Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何解决SAXException:中的元素无效_Java_Web Services_Wsdl_Axis_Sax - Fatal编程技术网

Java 如何解决SAXException:中的元素无效

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

我尝试通过以下方式从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();
执行此操作时,会出现以下异常(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 "));