2016-07-31 7 views
0

Ich arbeite mit einem SOAP-Webdienst, der mit dem Format des XML-Körpers, den er empfängt, ziemlich unversöhnlich zu sein scheint. Zum Beispiel, wenn ich beinhalten nicht die xsi: type-Eigenschaft, wie folgt aus:SOAP Spring WS - Jaxb2Marshaller enthält keine xsi: type beim Unmarshalling

<SOME_TAG>New York</SOME_TAG> 

Ich erhalte eine Fehlermeldung, dass „No Deserializer eine‚SOME_TAG‘mit Codierung Stil‚http://schemas.xmlsoap.org/encoding/‘deserialisieren gefunden“

wenn ich jedoch den Tag dies zu ändern, ist alles in Ordnung:

<SOME_TAG xsi:type="xsd:string">New York</SOME_TAG> 

Leider kann ich nicht herausfinden, wie die Jaxb2Marshaller bekommen die xsi enthalten: Art Attribut. Ich habe versucht, 'type = String.class' in der @ XmlElement-Annotation hinzuzufügen, aber es hat die Ausgabe nicht geändert.

Alle Tipps oder Anleitungen werden sehr geschätzt!

+0

Das klingt sehr ungewöhnlich für eine SOAP WS. Ist 'SOME_TAG' in der' .wsdl' Datei definiert? Generiert Ihr Programm den richtigen Namespace? –

+0

Ja, ich fand es auch ungewöhnlich. So sieht die Definition in der .wsdl-Datei aus: . Namensraum-Sachen sehen für mich normal aus. –

+0

Können Sie die WSDL und die XML-Anfrage posten? Ich denke, das würde bei der Diagnose helfen. –

Antwort

0

Okay, das ist eine ziemlich schreckliche Antwort, aber ich habe es funktioniert, indem Sie sicherstellen, dass der Datentyp in der WSDL-Datei und die Java-Objektklasse unterschiedlich sind. So in in diesem Fall änderte ich die Java Annotations, dies zu sein:

@XmlElement(name = "SOME_TAG", type = java.lang.StringBuffer.class) 

Und wenn diese gemarshallt wird, es endet Zugabe des xsi: type = "xsd: string" -Attribut.

Wie gesagt, nicht wirklich eine gute Antwort - aber es funktioniert.