JAX-WS 返回空列表
我是网络服务新手。我遇到了一些问题。 在服务器端我使用 spring-ws。在客户端我使用jax-ws。 使用 wsimport 工具,我根据我的 wsdl 生成了 java 类。
一切正常,但由于某种原因 jax-ws 无法正确解析数组和列表,所有列表都是空的
我绝对确定,该响应形式正确,用soapui测试它,而且我正在使用日志拦截器来记录输出回应。
的片段
下面是响应响应
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<firstElementResponse>
<name>hello world text</name>
<name>hello world text</name>
<name>hello world text</name>
</firstElementResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
和 wsdl 的片段
<xs:complexType name="sayHelloResponseType">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
为了生成客户端代码,我使用 wsimport。
SayHelloResponseType resp = serv.sayHello(r);
List<String> name = resp.getName();
System.out.println(name.size());
谢谢。任何帮助将不胜感激。
I'm new in web services. I have faced some problem.
At the server side i'm using spring-ws. At the client side i'm using jax-ws.
With wsimport tool i have generated java classes according to my wsdl.
Everything works fine, but for some reason jax-ws does not parse arrays and list correctly, all lists are empty
I'm absolutely sure, that response is form correctly, tested it with soapui, also i'm using logging interceptor to log outcomming responses.
Below is the snippets of response
response looks like
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<firstElementResponse>
<name>hello world text</name>
<name>hello world text</name>
<name>hello world text</name>
</firstElementResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
and the snippets of wsdl
<xs:complexType name="sayHelloResponseType">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
To generate client code i use wsimport.
SayHelloResponseType resp = serv.sayHello(r);
List<String> name = resp.getName();
System.out.println(name.size());
Thank you. Any help will be highly appreciated.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
似乎这只是一个无效的响应体,不符合 wsdl shema 的数学原理。 spring-ws 和 jax-ws 都不会抛出异常。它只是将无效数据解析为空列表,而不发出任何警告。
org.springframework.ws.soap.server.endpoint.interceptor.PayloadValidatingInterceptor 拯救了我的一天,
可能我必须调整 jax-ws 的日志记录以避免下次出现这种情况
Seems it's just an invalid body of response, that does not math wsdl shema. Neither spring-ws neither jax-ws throws exception. It simply parse invalid data to empty list without any warrnings.
org.springframework.ws.soap.server.endpoint.interceptor.PayloadValidatingInterceptor
saved my dayprobably i have to tweak logging for jax-ws to avoid it next time
我刚刚在 当命名空间在操作标记内定义时,如何处理 SOAP 消息的 Castor 解组? - 如果您使用 Spring-WS,那么您正在编写契约优先的 Web 服务,因此,请确保您确实确定了该合同。将所有元素放入命名空间中,确保 XSD 架构需要限定元素,并在 Castor 映射中声明 ns-uri 和 ns-prefixes。这是值得的。
I just answered a similar question in How can I handle Castor unmarshaling of SOAP messages when the namespace is defined inside the operation tag? - if you're using Spring-WS, you're writing contract-first web services, so make sure you really nail that contract down. Put all your elements in a namespace, make sure your XSD schema expects elements to be qualified, and declare ns-uri and ns-prefixes in your Castor mappings. It's worth the effort.