WebService nicht umgehen kann-Anforderung mit SOAP-Body ist nicht mit einem namespace-Präfix
Meine web-service ist nicht in der Lage, meine Kunden Anfragen, wenn der client ruft die Webservice ohne Präfix in der SOAP-Body Sie wie folgt vor:
<soap:Body>
<GetPatientResultsRequest xmlns="http://urlA">
<PatientIdentification>
<PersonCivilRegistrationIdentifier xmlns="http://UrlB"/>
</PatientIdentification>
<Period>
<From>2012-05-26</From>
<To>2012-06-26</To>
</Period>
</GetPatientResultsRequest>
</soap:Body>
Der Fehler ist, dass das Java-Objekt entsprechende GetPatientResultsRequest
und die anderen null sind.
Scheint es, wie wenn es kein Präfix im Körper, die Deserialisierung ist nicht passiert, richtig. Meine web-service ist in der Lage, zu reagieren nur, wenn der SOAP-Body muss ein Präfix wie
<soap:Body>
<m:GetPatientResultsRequest xmlns:m="http://urlA">
<PatientIdentification>
<PersonCivilRegistrationIdentifier xmlns="http://UrlB"/>
</PatientIdentification>
<Period>
<From>2012-05-26</From>
<To>2012-06-26</To>
</Period>
</m:GetPatientResultsRequest>
</soap:Body>
Kann jemand lassen Sie mich wissen, was zu tun, damit meine web-service bringt SOAP-Anfragen aller Art (d.h. mit und ohne Präfix im Körper)?
Ich bin mit JAX-WS (SOAP 1.1)
- welchen client benutzt du ? jaxws ?
- Deine beiden Beispiele sind unterschiedlich. Im ersten Fall, dann-namespace wird auf die
GetPatientResultsRequest
und diePatientIdentification
,Period
,From
undTo
Elemente. Im zweiten Beispiel ist es nur derGetPatientResultsRequest
element. - Ich bin vor dem gleichen problem. Bitte sagen Sie mir, wenn Sie in der Lage waren, zu lösen dieses Problem...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen web-service definiert einen Vertrag, die Sie befolgen müssen, um es nennen. Nur eine Nachricht aus den Beispielen, die Sie geschrieben Spiele, Vertrag so, dass einer funktioniert, der andere nicht.
In Ihrer ersten Nachricht, die Sie definiert den Standard-namespace (wegen der
xmlns
Attribut wrapper) und alle Ihre Elemente, die nicht undeclare, und dass es keine Vorwahl liegen im gleichen Namensraum, weil Sie Erben es von Ihren Eltern.In Ihrer zweiten Nachricht, die Sie haben eine explizite Präfix-Deklaration und nur die Hülle ist, dass namespaces, die anderen Elemente sind nicht in einem namespace und nicht Erben die default von den übergeordneten (wegen
xmlns
Attribut fehlt).Wie gesagt, am Anfang der web-service definiert einen Vertrag. Es mehr Sinn macht, ändern Sie die clients zum senden der richtigen Nachricht anstelle der änderung des service zu akzeptieren, die falschen Nachrichten vom client.
Zur Steuerung des namespaces, der Ihre Elemente, die Sie verwenden müssen, um die
targetNamespace
Werte auf der JAX-WS-Annotationen von Ihren web service und client.Hier ist ein Beispiel zu sehen, der Unterschied im code und-message-format, wenn Sie ändern Sie den target Namespace. Ich verwende ein einfaches WSDL für diesen:
Diese definiert Nachrichten wie:
und:
Finden Sie unter dem namespace-Präfix auf den Wrapper? Das ist, weil die Elemente deklariert sind, in der
http://tempuri.org
namespace, während die anderen es nicht sind und sich nicht in einem namespace.Können Sie auch entfernen Sie alle Elemente aus der namespaces. Streifen Sie den target namespace aus dem WSDL-und bekommen es so Aussehen:
Diese neue WSDL entsprechen Meldungen wie:
und:
Kein Präfix, in diesem Fall.
Nun verwenden
wsimport.exe
auf beiden WSDLs und Sie werden sehen, die target namespaces ich Rede am Anfang, nämlich eine änderung von diesem:zu diesem:
Kontrolle der
targetNamespace
und Sie werden kontrollieren, wie die Meldung aussieht.