2

我在 Apache Geronimo 2.1.3 上有一个 Web 服务应用程序。

我正在使用 JAX-WS,注释 POJOS,使用 SOAP 1.1。(使用 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 为空,而不是“Hello world”

这个“坏”请求可以吗?看起来它证实了 WS-I Basic Profile?

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

4

1 回答 1

3

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

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

于 2010-11-03T14:10:14.790 回答