2016-06-13 9 views
0

Ich erstelle einen Java-Dienst, der ein eingehendes XML verwendet, einige Geschäftslogik auf einige Daten aus dem XML anwendet und einen SOAP-Service mit diesen und ursprünglichen Daten aus dem XML aufruft.XML to SOAP-Dienst

Ich habe ein Beispiel der eingehenden Anfrage XML und WSDL für den Outbound-SOAP-Service.

Mein Plan ist:

  1. XSD Generieren von der Probe eingehenden XML XMLSpy.
  2. Generieren Sie Java-Klassen von der XSD mit Maven-Jaxb2-Plugin.
  3. Unmarshal der eingehenden XML zu JAXB-Objekt.
  4. Extrahieren Sie Daten aus dem JAXB-Objekt, wenden Sie Geschäftslogik auf einige von ihnen an.
  5. Generieren Sie den SOAP-Client mithilfe des SOAP-WSDL-Dokuments mit dem cxf-codegen-plugin.
  6. Rufen Sie den SOAP-Client mit den Daten auf.

Hier habe ich über die Verwendung von XSLT lese: xml-to-soap-transformation

Bin ich richtig, diese Aufgabe anbietet? Sollte XSLT Teil meiner Implementierung sein?

Vielen Dank!

Update:

Der Outbound-SOAP-Dienst ist 'Dokumentstil', enthält die WSDL XSD-Schema.

Das Projekt verwendet Spring-Framework.

Der generierte Code sieht wie folgt aus etwas:

@WebServiceClient(name = "OrderService", 
        wsdlLocation = "file:/C:/......./src/main/resources/wsdl/OrderService.wsdl", 
        targetNamespace = "http://xmlns.some_name_space") 
public class OrderService extends Service { 


@WebService(targetNamespace = "http://xmlns.some_name_space", name = "OrderPortType") 
@XmlSeeAlso({org.....ObjectFactory.class}) 
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE) 
public interface OrderPortType { 

generiert Client:

QName SERVICE_NAME = new QName("http://xmlns......", "OrderService"); 
URL wsdlURL = OrderService.WSDL_LOCATION; 
OrderService ss = new OrderService(wsdlURL, SERVICE_NAME); 
OrderPortType port = ss.getOrder(); 
CancelOrderType cancelOrderMessage = null; 
CancelAcknowledgeOrderType cancelOrderReturn = port.cancelOrder(cancelOrderMessage); 
ProcessOrderType processOrderMessage = null; 
AcknowledgeOrderType processOrderReturn = port.processOrder(processOrderMessage); 

Antwort

0

Mit XSLT für etwas, das nur Nutzlast einer SOAP-Kommunikation ist klingt falsch. Payload sollte nicht mit Umschlagsachen belästigt werden.

Schauen Sie sich zuerst die WSDL an. Moderne Webdienste sind normalerweise nicht mehr document stype, daher können Sie die Schritte 1.-4 möglicherweise überspringen.

in der Regel Meine Kunden gehen durch:

  1. SOAP-Client-Implementierung generieren cxf-codegen mit

    <extraarg>-client</extraarg> 
    <extraarg>-impl</extraarg> 
    
  2. durch die Verlängerung der ServiceName_Service Klasse einen Test-Client-Implementierung generieren verwenden, dessen Port-Objekt bekommen und Rufen Sie dann einfach eine der in der WSDL definierten Methoden auf.

+0

Ich habe den Link in meinem ursprünglichen Beitrag behoben. –

+0

Wir verwenden den Dokumentstil. Die WSDL enthält ein XSD-Schema. –

+0

Was passiert also, wenn Sie das Maven-Plugin Code generieren lassen? Erhalten Sie eine API im RPC-Stil oder nur ein get-/setDocument? – wallenborn