肥皂体、命名空间问题

发布于 2024-09-30 03:10:29 字数 644 浏览 5 评论 0原文

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

客户端程序不能改变。有没有办法让我覆盖某些东西,让这个请求的两个版本都起作用?

I have a web service app on Apache Geronimo 2.1.3.

I am using JAX-WS, annotating POJOS, using SOAP 1.1. (using Sun JDK 1.5)

Various clients use the web services without a hitch.

One new client is not working. In working clients, only the child element under soapenv:Body has a namespace declaration, and the child's children elements have no namespace declaration. In the new client, ALL descendents of soapenv:Body, including the child's children, have namespace declarations.

In essence, this works:

<soapenv:Body>
<ns1:Echo>
  <Message>Hello world</Message>
...

But this does not:

<ns1:Echo>
  <ns1:Message>Hello world</ns1:Message>
...

Logging in the app would show that Message is null, instead of "Hello world"

Is this "bad" request OK? It looks like it confirms to WS-I Basic Profile?

The client program can't change. Is there a way for me to override something, to get both versions of this request to work?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

非要怀念 2024-10-07 03:10:29

Messagens1:Message 是不同的类型,就像虚构的 java 类 Messagens1.Message 一样。服务器需要一个在默认命名空间中声明的 Message 元素(应该有一个 xmlns="" 某处),但它获取 并简单地忽略它。

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

Message and ns1:Message are different types, just like fictional java Classes Message and ns1.Message. The server expects a Message element that is declared in the default namespace (there should be a xmlns="<my.default.namespace.name>" somewhere) but it gets a <ns1:Message> and simply ignores it.

If you can't force the client to send valid xml soap messages (according to the wsdl), you may try to change the server code so that it accepts <Message> elements aswell as <ns1:Message> elements as <ns1:Echo> children. You'd have to declare types for the elements from the ns1 namespace and add a choice element to the <ns1:Echo> declaration.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文