erstellen von WSDL für bestimmte SOAP-Anforderung
Ich haben, um eine bestimmte SOAP-request-Nachricht auf Basis einer WSDL-Datei. Ich bin mit SOAP-UI erstellen der SOAP request von der WSDL.
SOAP-Anfrage sollte so Aussehen:
<?xml version="1.0"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingstyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Header>
<username>xxxx</username>
<password>xxxx</password>
<MaxOrders>1</MaxOrders>
<xmlVers>1</xmlVers>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<m:getNewOrders xmlns:m= "urn:https://xxx.yyy.co.uk/b2b/soap/soap:getNewOrders/">
</m:getNewOrders>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Habe ich die folgende WSDL:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<wsdl:definitions
xmlns:m="https://xxx.yyy.co.uk/b2b/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
name="xxxOrders"
targetNamespace="https://xxx.yyy.co.uk/b2b/">
<wsdl:types>
<xsd:schema targetNamespace="https://xxx.yyy.co.uk/b2b/">
<xsd:element name="Envelope">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Header"/>
<xsd:element name="Body"/>
</xsd:sequence>
<xsd:attribute name="encodingstyle" type="xsd:anyURI" form="qualified" use="required" />
</xsd:complexType>
</xsd:element>
<xsd:element name="Header">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="username" type="xsd:NCName" form="unqualified" />
<xsd:element name="password" type="xsd:integer" form="unqualified" />
<xsd:element name="MaxOrders" type="xsd:integer" form="unqualified" />
<xsd:element name="xmlVers" type="xsd:integer" form="unqualified" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="Body">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="m:getNewOrders" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="getNewOrders">
<xsd:complexType />
</xsd:element>
</xsd:schema>
</wsdl:types>
<wsdl:message name="getNewOrders">
<wsdl:part element="m:getNewOrders" name="parameters"/>
</wsdl:message>
<wsdl:portType name="xxxOrders">
<wsdl:operation name="getNewOrders">
<wsdl:input message="m:getNewOrders"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="xxxOrdersSOAP" type="m:xxxOrders">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="getNewOrders">
<soap:operation soapAction="urn:https://xxx.yyy.co.uk/b2b/soap/soap:getNewOrders/"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="xxxOrders">
<wsdl:port binding="m:xxxOrdersSOAP" name="xxxOrdersSOAP">
<soap:address location="https://xxx.yyy.co.uk/b2b/soap/soap_orders.asp"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
Aber wenn ich das WSDL-und importieren Sie es in SOAP UI, SOAP-request-Nachricht sieht anders aus als das, was ich erwarte:
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:b2b="https://xxx.yyy.co.uk/b2b/">
<soapenv:Header/>
<soapenv:Body>
<b2b:getNewOrders/>
</soapenv:Body>
</soapenv:Envelope>
Meine Header
element leer ist, zum Beispiel. Die getNewOrders
ich denke, dass ist okay, weil es gebunden ist xmlns:b2b
so brauche ich nicht den namespace in der element getNewOrders. Bin ich richtig?
Kann bitte jemand darauf hinweisen, was ich zu beheben, die in der WSDL? Ich bin verloren.
Meinst du für
danke. ja, tut mir Leid, dass ich bearbeitet.
https://b2bqa.shoprite.co.za/b2b/
die gleichen sein wie https://xxx.yyy.co.uk/b2b/
?danke. ja, tut mir Leid, dass ich bearbeitet.
InformationsquelleAutor Peter | 2014-01-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du bist ok mit namespaces, das problem ist, dass Sie nicht definieren, die Teil der Kopfzeile. Nun, selbst wenn Sie es tun, ich würde nicht wissen, ob das tool berücksichtigt... aber auf jeden Fall, in Bezug auf die interface definition das ist, was Sie tun müssen.
Suche nach "wsdl soap-header Beispiel" oder gleich nachgeben sollten viele Treffer, wie diese eine.
Die wichtigsten Punkte sind:
Nun, ich habe nicht geprüft, die Präfixe (sollten Sie einen Standard-Namensraum der targetNamespace Ihrer WSDL für die oben genannten arbeiten ohne Präfixe, etc.) noch versucht, zu schreiben, die WSDL für Sie... aber dieses ist grundlegend, wie Sie geben Sie die Kopfzeile: Ihre Eingabe hat mehrere Teile, die in der SOAP geht man in die Kopfzeile und die andere in den Körper.
das ist in der Tat seltsam... so lange, wie verschiedene Präfixe gebunden sind, zu den gleichen namespace (URI), die Wahl des Präfixes (alias) sollte eigentlich egal sein, jeder anständige XML-parser, der namespace bewusst.
Wenn der service kümmert sich, welches Präfix verwendet wird, dann ist es kaputt. Sollte Ihr Unternehmen vermeiden Geschäfte mit anderen Unternehmen, die nicht die Mühe gemacht, Folgen Sie einfach den Industrie-standards, die bereits seit über einem Jahrzehnt.
vielen Dank für Ihre hilfreiche Beratung. Ich werde auf jeden Fall sagen Sie Ihnen, über, die. Eine andere seltsame Tatsache für mich ist, dass Sie wollen, um das Passwort zu ändern alle 30 Tage. Ich denke, das ist nicht notwendig, besonders da auch ein Zertifikat für die Serverauthentifizierung verwendet. Ihr webservice muss ich schließen, geschrieben in Visual Basic. Beste Grüße, Peter
InformationsquelleAutor Petru Gardea