2017-06-15 3 views
0

Ich habe den folgenden Proxy-Dienst, der von einem Proxy-Service aufgerufen wird.WSO2 ESB Preserve Payload Nachricht

<?xml version="1.0" encoding="UTF-8"?> 
<sequence name="seq_invchk_slpa_in" trace="disable" xmlns="http://ws.apache.org/ns/synapse"> 
    <log level="custom"> 
    <property name="STATUS::" value="***************************"/> 
    </log> 
    <payloadFactory media-type="xml"> 
    <format> 
     <soapenv:Envelope xmlns:hnb="http://10.104.74.93/hnb" 
     xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
     xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
     <soapenv:Header/> 
     <soapenv:Body> 
      <hnb:CheckInvoiceDetails soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> 
      <invoice_no xsi:type="xsd:string">$1</invoice_no> 
      </hnb:CheckInvoiceDetails> 
     </soapenv:Body> 
     </soapenv:Envelope> 
    </format> 
    <args> 
     <arg evaluator="xml" expression="$ctx:invoice_no"/> 
    </args> 
    </payloadFactory> 
    <property name="ContentType" scope="axis2" type="STRING" value="text/xml"/> 
    <header name="Action" scope="default" value="CheckInvoiceDetails"/> 
    <property name="SOAPAction" scope="transport" type="STRING" value="CheckInvoiceDetails"/> 
    <send> 
    <endpoint key="gov:INVCHK/SLPA/endpoints/invchk_slpa_validation_ep.xml"/> 
    </send> 
</sequence> 

Beim Aufruf von einem Tool (SOAP UI) funktioniert der Dienst ohne Probleme.

Aber beim Aufruf von einem System entsteht ein Problem. was ich bisher vorgezeichnet die Nutzlast Fabrik Nachricht als

gesendet wird während der korrekte Aufruf
<?xml version="1.0" encoding="UTF-8"?> 
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:hnb="http://10.104.74.93/hnb" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <soapenv:Body> 
     <hnb:CheckInvoiceDetails soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> 
     <invoice_no xmlns="http://ws.apache.org/ns/synapse" xsi:type="xsd:string">17231374967185</invoice_no> 
     </hnb:CheckInvoiceDetails> 
    </soapenv:Body> 
</soapenv:Envelope> 

Wenn die fehlerhafte Aufruf der Nachrichtennutzlast gemacht wird als

<?xml version="1.0" encoding="UTF-8"?> 
<hnb:CheckInvoiceDetails xmlns:hnb="http://10.104.74.93/hnb" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> 
    <invoice_no xmlns="http://ws.apache.org/ns/synapse" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xsd:string">17231374967185</invoice_no> 
</hnb:CheckInvoiceDetails> 

aus dem ESB geht die Ich denke, verursacht das Problem. Die Antwort, die ich von dem Client während des fehlerhaften Anruf erhalten, ist

<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap .org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> 
    <SOAP-ENV:Body> 
     <SOAP-ENV:Fault> 
     <faultcode xsi:type="xsd:string">SOAP-ENV:Client</faultcode> 
     <faultstring xsi:type="xsd:string">Operation '' is not defined in the WSDL for this service</faultstring> 
     <detail xsi:type="xsd:string" /> 
     </SOAP-ENV:Fault> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

Wie kann ich die SOAP-Nachricht erhalten, wie es ist, und es aussenden, wenn sie von einem System aufgerufen wird.

Warum sind die Seife Namensraum immer in der Methode Ebene gemischt <hnb:CheckInvoiceDetails xmlns:hnb="http://10.104.74.93/hnb" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">

Jede Hilfe sehr geschätzt wird.

+0

Speichern Sie es in der Eigenschaft . Dann wiederherstellen, wenn Sie mit bereichern brauchen. – simar

+0

Danke für den Kommentar, aber beim Senden der Nachricht Änderungen, das ist das Problem, jede Ahnung, warum die Soap-Namespaces hinzugefügt werden? – Yasothar

+0

PayloadFactory Mediator ist so konzipiert, Inhalt des Nachrichtentextes zu ändern. Warum haben Sie Umschlag-, Header- und Body-Tags? WSOESB fügt der Nachricht selbst einen Umschlag hinzu, bevor die Nachricht über den Transport gesendet wird. – simar

Antwort

1

Sie mindestens Gehalt an

<payloadFactory media-type="xml"> 
    <format> 
      <hnb:CheckInvoiceDetails xmlns:hnb="http://10.104.74.93/hnb"> 
      <hnb:invoice_no xsi:type="xsd:string">$1</hnb:invoice_no> 
      </hnb:CheckInvoiceDetails> 
    </format> 
    <args> 
     <arg evaluator="xml" expression="$ctx:invoice_no"/> 
    </args> 
    </payloadFactory> 

achten Sie auf invoice_no Tag Payload Werks Vermittler ändern. Ursprünglich ist es nicht klar, was für ein Namespace es haben soll, es verschachtelt standardmäßig den Namespace der Synapsen-Engine. Also besser Namespace explizit zuweisen.

Die Synapse-Engine fügt standardmäßig einen Umschlag hinzu.

Wenn ein Nachrichtentyp unbekannt ist, wird soap12 zurückgegeben. gefunden in der Dokumentation von Synapse. Property Content-Type ohne messageType ist nutzlos.

+0

Standardmäßig fügt die Synapse-Engine die SOAP 1.2-Header hinzu. Was ist, wenn ich 1.1-Header benötige? Wie kann ich sie explizit hinzufügen? – Yasothar

+0

Ich habe keine Gelegenheit, es sofort zu überprüfen. Aber ich erinnere mich, wenn Sie SOAP-Projekt in SOAPUI des Dienstes auf ESB erstellen, erhalten Sie 2 Kopien des Dienstes. man arbeitet auf soap1.1 ein anderes auf soap1.2 – simar

+0

Sagen wir Service-Name SampleProxy, dann erhalten Sie 2 Kopien von jedem Endpunkt jedes Transporttyps, den Sie für den Service zuweisen. Für Seife erhalten Sie http: // IP-Adresse: port/services/SampleProxy.SoapEnpoint1.1 http: // IP-Adresse: port/services/SampleProxy.SoapEnpoint1.2 Versuchen Sie die richtige Adresse zu verwenden – simar