2013-04-18 36 views
1

中的元素無效我試圖通過以下方式從webservice獲取結果。如何解決SAXException:

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服務客戶端,但沒有成功。還有什麼可能是這個問題?

+1

在深入研究代碼之前,請查看正在交換的原始XML。你可以使用SOAPui。 –

回答

1

這可能與此錯誤有關(AXIS-2758),與Axis 1.x無法解決。

如果您的客戶端存根未與服務器端(WSDL文件)保持最新,則可能會出現此問題。您可能必須重新生成它。 與axistools:wsdl2java一樣。

如今,如果您至少使用Java 6,可能在客戶端使用JAX-WS(JAX-WS Maven Plugin)。但它不能與使用RPC/Encoded的舊SOAP服務一起工作...傾向於文檔/文字風格。

0

解決方法這個問題:

打開生成的類(對於這個問題是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")); 
0

我有同樣的問題,這是因爲,在使用SoapUI嘗試Web服務之後,我發現我在響應中獲得的字段與WSDL生成的字段之間存在兩個不一致:

1-出於某種原因,當我產生我的結構從WSDL,它把一個空間的字段名稱後,就像這樣:

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

我剛剛刪除的空間,它解決了這一問題。

2-在響應中,我得到了一個在我的類中不存在的額外字段,我在這裏做的是將該字段添加到我的類中,並添加到靜態塊中,就像其他字段一樣。

希望它有幫助。