How to solve SAXException: Invalid element in
Solution 1
This could be related to this bug (AXIS-2758), unresolved with Axis 1.x.
This problem can appear if your client stub is not up to date with the server side (the WSDL file). You could have to re-generate it. Like with axistools:wsdl2java.
The best nowadays, provided you use at least Java 6, is maybe to use JAX-WS on the client side (JAX-WS Maven Plugin). But it could not work with old SOAP Services using RPC/Encoded... Prefer the Document/Literal style.
Solution 2
Workaround for this problem:
Open your generated class(For this question it is librarysearch.soft.Book
). See the static code block which defines the properties(name, type, etc.) of fields.
You'll something like below:
elemField.setXmlName(new javax.xml.namespace.QName("", "book"));
change it by adding namespaceURI to it (use same namespameURI
which is used at setXmlType
call):
elemField.setXmlName(new javax.xml.namespace.QName("http://your.namespaceuri.here", "book"));
Solution 3
I had the same problem and after trying the Web Service using SoapUI, I discovered two inconsistencies between the fields I was getting in the response and the fields generated by the WSDL:
1- For some reason, when I generated my structure from the WSDL, it put a space after the field name, like this:
elemField.setXmlName(new javax.xml.namespace.QName("http://namespaceuri.here", "book "));
I just removed that space and it fixed the problem.
2- In the response I was getting an additional field that was not present in my class. What I did here was to add the field to my class, and to add also in the static block, just like any other field.
Hope it helps.
Jeremy Knees
Updated on September 08, 2020Comments
-
Jeremy Knees almost 4 years
I try to get results from a webservice in the following way.
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();
When I do this I get the following 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
I read the problem could be caused by the result returned from the webservice not matching with the classes generated from the wsdl. I regenerated my webservice client but no succes. What else could be the problem?