Wie lösen SAXException: Ungültiges element in
Ich versuche, Ergebnisse zu erhalten, von einem webservice in der folgenden Weise.
List result = new Vector();
LibrarySearchRequest request = new LibrarySearchRequest(queryString);
LibrarySearchServicePortTypeProxy proxy =
new LibrarySearchServicePortTypeProxy();
LibrarySearchServicePortType port = proxy.getLibrarySearchServicePortType();
LibrarySearchResponse response = port.process(request);
librarysearch.soft.Book[] books = response.getBooks();
Wenn ich das mache bekomme ich folgende exception (stacktrace) :
org.xml.sax.SAXException: Invalid element in librarysearch.soft.Book - book
at org.apache.axis.encoding.ser.BeanDeserializer.onStartChild(BeanDeserializer.java:258)
at org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1035)
at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:165)
at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:1141)
at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:236)
at org.apache.axis.message.RPCElement.getParams(RPCElement.java:384)
at org.apache.axis.client.Call.invoke(Call.java:2467)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
at librarysearch.soft.LibrarySearchServiceSOAP11BindingStub.process(LibrarySearchServiceSOAP11BindingStub.java:180)
at softarch.portal.db.ws.WS_RegularDatabase.findRecords(WS_RegularDatabase.java:44)
at softarch.portal.db.test.TestWSRegularDatabase.main(TestWSRegularDatabase.java:39)
The regular database has caught an unexpected exception: ; nested exception is:
org.xml.sax.SAXException: Invalid element in librarysearch.soft.Book - book
Habe ich gelesen, das problem könnte verursacht werden durch das zurückgegebene Ergebnis des webservice nicht in übereinstimmung mit den Klassen aus der wsdl generiert. Ich regenerierte meinen webservice-client, aber kein Erfolg. Was sonst könnte das problem sein?
Vor dem Graben in den code, Blick auf die XML-Rohdaten, die ausgetauscht werden. Sie können SOAPui.
InformationsquelleAutor Jeremy Knees | 2013-04-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies könnte im Zusammenhang mit diesem bug (ACHSE-2758), ungelöste mit Achse 1.x.
Dieses problem kann auftreten, wenn die client-stub ist nicht up to date mit der server-Seite (WSDL-Datei). Sie hätte zu re-generieren.
Wie mit axistools:wsdl2java.
Die besten heutzutage, vorausgesetzt, Sie verwenden mindestens Java 6, ist vielleicht die Verwendung von JAX-WS auf client-Seite (JAX-WS Maven Plugin). Aber könnte es nicht funktionieren mit der alten SOAP-Dienste über RPC/Encoded... Lieber das Document/Literal-Stil.
InformationsquelleAutor Guillaume Husta
Abhilfe für dieses problem:
Öffnen Sie die generierte Klasse(Für diese Frage ist es
librarysearch.soft.Book
). Finden Sie die statische code-block definiert die Eigenschaften(name, Typ, etc.) von Feldern.Wirst du so etwas wie unten:
ändern es durch hinzufügen namespaceURI, um es (mit dem gleichen
namespameURI
die benutzt wird, umsetXmlType
call):InformationsquelleAutor Devrim
Ich hatte das gleiche problem und nach dem Versuch, die Web Service mit SoapUI, entdeckte ich zwei Inkonsistenzen zwischen den Bereichen war ich immer in der Antwort und die Felder durch die erzeugte WSDL:
1 - aus irgendeinem Grund, wenn ich generierte meiner Struktur von WSDL, setzen Sie ein Leerzeichen nach dem Feld name, so wie hier:
Ich gerade entfernt, der Raum und das problem behoben.
2 - In der Antwort, ich war immer ein zusätzliches Feld, das nicht vorhanden war in meiner Klasse. Was ich hier Tat, war, fügen Sie das Feld ist für meine Klasse, und fügen Sie auch in den static-block, genau wie jedes andere Feld.
Hoffe, es hilft.
InformationsquelleAutor Roberto Rodriguez