我在Apache Geronimo 2.1.3上有一个Web服务应用程序。
我正在使用JAX-WS,使用SOAP 1.1注释POJOS。 (使用Sun JDK 1.5)
各种客户端毫无障碍地使用Web服务。
一个新客户无法使用。在工作客户端中,只有soapenv:Body下的子元素具有名称空间声明,并且子项的子元素没有名称空间声明。在新客户端中,所有soapenv:Body的后代,包括孩子的子女,都有名称空间声明。
从本质上讲,这有效:
<soapenv:Body>
<ns1:Echo>
<Message>Hello world</Message>
...
但这不是:
<ns1:Echo>
<ns1:Message>Hello world</ns1:Message>
...
登录应用程序会显示Message为null,而不是“Hello world”
这个“坏”请求好吗?看起来它确认了WS-I Basic Profile?
客户端程序无法更改。有没有办法让我覆盖一些东西,让这个请求的两个版本都有效?
答案 0 :(得分:3)
Message
和ns1:Message
是不同的类型,就像虚构的Java类Message
和ns1.Message
一样。服务器需要一个在默认命名空间中声明的Message
元素(某处应该有一个xmlns="<my.default.namespace.name>"
)但它得到一个<ns1:Message>
并且只是忽略它。
如果您无法强制客户端发送有效的xml soap消息(根据wsdl),您可以尝试更改服务器代码,使其接受<Message>
元素以及<ns1:Message>
元素作为<ns1:Echo>
个孩子。您必须为ns1
命名空间中的元素声明类型,并在choice
声明中添加<ns1:Echo>
元素。