2017-12-11 7 views
0

Hallo Ich versuche Camel-SOAP-Komponente zu verwenden, um eine Soap-Nachricht zu entpacken, die mit MQ gesendet wird. Aber ich kann nicht herausfinden, wie ServiceInterfaceStrategy durch und SoapJaxbDataFormat erforderlich verwendenSo verwenden Sie Camel-SOAP unmarshal

ich Maven-jaxb2-Plugin erzeugt meine JAXB Bohnen verwenden, die provieded Wsdl verwenden, XSD ist.

Welche Klasse sollte ich verwenden?
Und wie erzeuge ich es mit maven-jaxb2-plugin?

SoapJaxbDataFormat soap = new 
SoapJaxbDataFormat("xx.xxx.service._201x._01._01.notification", new 
ServiceInterfaceStrategy(WHAT_CLASS_TO_USE.class, false)); 

Antwort

1

Und wie erzeuge ich es mit Maven-jaxb2-Plugin?

Um Ihre Klassendateien über das Plugin zu erzeugen, versuchen Sie die folgende Konfiguration:

<plugin> 
    <groupId>org.jvnet.jaxb2.maven2</groupId> 
    <artifactId>maven-jaxb2-plugin</artifactId> 
    <version>0.13.1</version> 
    <executions> 
     <execution> 
      <id>generate</id> 
      <goals> 
       <goal>generate</goal> 
      </goals> 
      <configuration> 
       <schemaDirectory>src/test/resources/wsdl</schemaDirectory> 
       <generatePackage>org.tempuri.calculator.jaxb2</generatePackage> 
       <generateDirectory>src/test/java</generateDirectory> 
       <clearOutputDir>false</clearOutputDir> 
       <episode>false</episode> 
       <strict>true</strict> 
       <schemaIncludes> 
        <schemaInclude>*.wsdl</schemaInclude> 
        <schemaInclude>*.xsd</schemaInclude> 
       </schemaIncludes> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

Der Maven Befehl, um die Quellen zu erzeugen, ist: mvn generate-sources.

Welche Klasse sollte ich verwenden?

Um es in die Routenberechnung zu verwenden, versuchen Sie Folgendes:

protected SoapJaxbDataFormat createDataFormat() { 
    String jaxbPackage = Add.class.getPackage().getName(); 
    ElementNameStrategy elStrat = new TypeNameStrategy(); 
    SoapJaxbDataFormat answer = new SoapJaxbDataFormat(jaxbPackage, elStrat); 
    answer.setVersion("1.2"); 
    return answer; 
} 

@Override 
protected RoutesBuilder createRouteBuilder() throws Exception { 
    return new RouteBuilder() { 
     @Override 
     public void configure() throws Exception { 
      SoapJaxbDataFormat df = createDataFormat(); 
      from("direct:start") // 
       .marshal(df) // 
       .to("mock:result"); 
     } 
    }; 
} 

Die Nachricht ein XML so sein sollte:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<Envelope xmlns="http://www.w3.org/2003/05/soap-envelope" xmlns:ns2="http://tempuri.org/"> 
    <Body> 
     <ns2:Add> 
      <ns2:intA>10</ns2:intA> 
      <ns2:intB>20</ns2:intB> 
     </ns2:Add> 
    </Body> 
</Envelope> 

Die POJO Gegenstück (erzeugt durch das jaxb2 Plugin) :

package org.tempuri.calculator.jaxb2; 

import javax.xml.bind.annotation.XmlAccessType; 
import javax.xml.bind.annotation.XmlAccessorType; 
import javax.xml.bind.annotation.XmlRootElement; 
import javax.xml.bind.annotation.XmlType; 

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "", propOrder = { 
    "intA", 
    "intB" 
}) 
@XmlRootElement(name = "Add") 
public class Add { 

    protected int intA; 
    protected int intB; 

    public int getIntA() { 
     return intA; 
    } 

    public void setIntA(int value) { 
     this.intA = value; 
    } 

    public int getIntB() { 
     return intB; 
    } 

    public void setIntB(int value) { 
     this.intB = value; 
    } 

} 

Vergessen Sie nicht, diehinzuzufügenAbhängigkeit zu Ihrer pom Datei:

<dependency> 
    <groupId>org.apache.camel</groupId> 
    <artifactId>camel-soap</artifactId> 
</dependency> 

Die WSDL durch dieses Beispiel verwendet wird, könnte here, basierend auf this unit test finden.