如何解决的SAXException:在无效的元素(How to solve SAXException

2019-08-31 12:15发布

我尝试从以下方式一个Web服务得到结果。

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();

当我这样做,我得到了以下异常(堆栈跟踪):

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

我读的问题可以通过从WebService不是从WSDL生成的类匹配返回的结果造成的。 我再生我的web客户端,但没有更迭。 还有什么问题?

Answer 1:

这可能与这个bug( AXIS-2758 ),未解决与轴1.x的

如果你的客户存根是不是最新的与服务器端(WSDL文件)可能会出现此问题。 你可能要重新生成它。 像axistools:WSDL2Java的 。

最好的今天,只要你至少使用Java 6中,也许是在客户端(使用JAX-WS JAX-WS Maven插件 )。 但是,它不能使用RPC /编码老SOAP服务...身高的文档/文字的工作作风。



Answer 2:

绕过这个问题:

打开生成的类(对于这个问题是librarysearch.soft.Book )。 看到所述静态代码块 ,其限定字段的属性(名称,类型等)。

你会像下面:

elemField.setXmlName(new javax.xml.namespace.QName("", "book"));

通过添加的namespaceURI到它(使用相同的改变它namespameURI其在使用setXmlType呼叫):

elemField.setXmlName(new javax.xml.namespace.QName("http://your.namespaceuri.here", "book"));


Answer 3:

我有同样的问题,并尝试使用了SoapUI Web服务后,我发现我是在得到响应的字段和由WSDL产生的场之间的两个矛盾:

1-出于某种原因,当我产生我的结构从WSDL,它把一个空间的字段名称后,就像这样:

elemField.setXmlName(new javax.xml.namespace.QName("http://namespaceuri.here", "book "));

我刚才删除了空间,它解决了这一问题。

2-在响应我得到一个附加的字段,这是不存在于我的类。 我在这里做的字段添加到我的课,并且还可以添加在静态块,就像任何其他领域。

希望能帮助到你。



文章来源: How to solve SAXException: Invalid element in