java - SOAP 体、命名空间问题

标签 java jax-ws geronimo

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

我正在使用 JAX-WS,注释 POJOS,使用 SOAP 1.1。 (使用Sun JDK 1.5)

各种客户端都可以顺利使用网络服务。

一个新客户端无法工作。在工作客户端中,只有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?

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

最佳答案

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

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

关于java - SOAP 体、命名空间问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4087692/

相关文章:

spring - JAX WS webservice不从applicationcontext中获取spring bean,因此抛出空指针异常

java - 用于 RESTful Web 服务的 JAX-WS 与 JAX-RS

java - 为什么我对 QueueConnectionFactory 的 JNDI 查找返回空值?

java - 根据线程记录到不同的文件

java - 原始类型将 super 传递给 sub

java - 无法记录 JaxWs 客户端 xml 消息

grails - Grails GSP在Geronimo下不会生成预期的HTML

java - com.sun.faces.config.WebConfiguration 无法加载 Web 片段内的 <context-param> 值

java - 部署 war : No Spring WebApplicationInitializer types detected on classpath

java - 执行 JUnit 方法后会发生什么?