肥皂体,命名空间问题

时间:2010-11-03 13:51:51

标签: java jax-ws geronimo

我在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?

客户端程序无法更改。有没有办法让我覆盖一些东西,让这个请求的两个版本都有效?

1 个答案:

答案 0 :(得分:3)

Messagens1:Message是不同的类型,就像虚构的Java类Messagens1.Message一样。服务器需要一个在默认命名空间中声明的Message元素(某处应该有一个xmlns="<my.default.namespace.name>")但它得到一个<ns1:Message>并且只是忽略它。

如果您无法强制客户端发送有效的xml soap消息(根据wsdl),您可以尝试更改服务器代码,使其接受<Message>元素以及<ns1:Message>元素作为<ns1:Echo>个孩子。您必须为ns1命名空间中的元素声明类型,并在choice声明中添加<ns1:Echo>元素。