Java 如何解决SAXException:中的元素无效
我尝试通过以下方式从Web服务获取结果Java 如何解决SAXException:中的元素无效,java,web-services,wsdl,axis,sax,Java,Web Services,Wsdl,Axis,Sax,我尝试通过以下方式从Web服务获取结果 List result = new Vector(); LibrarySearchRequest request = new LibrarySearchRequest(queryString); LibrarySearchServicePortTypeProxy proxy = new LibrarySearchServicePortTypeProxy(); LibrarySearchSer
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();
执行此操作时,会出现以下异常(stacktrace):
我了解到问题可能是由webservice返回的结果与wsdl生成的类不匹配引起的。我重新生成了webservice客户端,但没有成功。还有什么问题吗?这可能与此bug()有关,Axis 1.x无法解决此问题 如果客户端存根在服务器端(WSDL文件)上不是最新的,则会出现此问题。你可能需要重新生成它。 比如说 如果您至少使用Java6,现在最好的方法可能是在客户端()上使用JAX-WS。但它无法使用RPC/编码的旧SOAP服务。。。首选文档/文字样式。此问题的解决方法: 打开生成的类(对于这个问题,它是
librarysearch.soft.Book
)。请参阅定义字段属性(名称、类型等)的静态代码块
您将看到以下内容:
elemField.setXmlName(new javax.xml.namespace.QName("", "book"));
通过向其添加namespaceURI来更改它(使用在setXmlType
call中使用的相同namespameURI
):
我也遇到了同样的问题,在使用SoapUI尝试Web服务之后,我发现响应中的字段与WSDL生成的字段之间存在两个不一致之处: 1-出于某种原因,当我从WSDL生成我的结构时,它在字段名后放了一个空格,如下所示:
elemField.setXmlName(new javax.xml.namespace.QName("http://namespaceuri.here", "book "));
我只是删除了那个空间,它解决了这个问题
2-在回答中,我得到了一个在我的课堂上不存在的额外字段。我在这里做的是将字段添加到我的类中,并将其添加到静态块中,就像任何其他字段一样
希望有帮助。在深入研究代码之前,先看看正在交换的原始XML。您可以使用SOAPui。
elemField.setXmlName(new javax.xml.namespace.QName("http://your.namespaceuri.here", "book"));
elemField.setXmlName(new javax.xml.namespace.QName("http://namespaceuri.here", "book "));