Java 从SOAP请求和响应中删除命名空间

Java 从SOAP请求和响应中删除命名空间,java,soap,cxf,jax-ws,Java,Soap,Cxf,Jax Ws,我有一个与此类似的SOAP请求: <SOAP-ENV:Envelope> <SOAP-ENV:Header> .... </SOAP-ENV:Header> <SOAP-ENV:Body> <MyRequest> <Param>3</Param> </MyRequest> </SOAP-ENV:Body> </SOAP-ENV:Envelope>

我有一个与此类似的SOAP请求:

<SOAP-ENV:Envelope>
 <SOAP-ENV:Header>
    ....
 </SOAP-ENV:Header>
 <SOAP-ENV:Body>
  <MyRequest>
    <Param>3</Param>
  </MyRequest>
 </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

....
3.
反应应该是这样的

<SOAP-ENV:Envelope>
 <SOAP-ENV:Header>
    ....
 </SOAP-ENV:Header>
 <SOAP-ENV:Body>
  <MyResponse>
    <Value>3234</Value>
    <Value>542</Value>
  </MyResponse>
 </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

....
3234
542
我的问题是,我的JAX-WSSOAP服务需要一个名称空间,例如xmlns=”http://myapp.example.com“在
MyRequest
中。它还将此名称空间添加到
MyResponse
元素中

我已经成功地编写了一个拦截器,如果请求消息为空,它会将我的应用程序目标命名空间添加到请求消息中。这个很好用

我现在的问题是我不确定如何从响应消息中删除这个名称空间


我知道最好的解决方案是让客户机使用名称空间,但这在我正在从事的项目中是不可能的。

这是相当广泛的,因为我们不知道您在使用什么,但是如果您可以使用Metro(JAX-WS),那么您可以利用他们所称的SOAPMessage Handler(看一看)。它的工作原理非常类似于Servlet过滤器组件


拥有实现SOAPHandler的
并删除其中的命名空间声明。

CXF附带转换功能,请查看

从页面中提取的示例bean

<bean id="transformFeature" class="org.apache.cxf.feature.StaxTransformFeature">
  <property name="outTransformElements">
    <map>
      <!-- change "book" to "thebook" -->
      <entry key="book" value="thebook"/>

      <!-- drop the namespace from "book" -->
      <entry key="{http://books}book" value="book"/> 

      <!-- qualify "book" with "http://books" -->
      <entry key="book" value="{http://books}thebook"/> 

      <!--  change namespace to "http://books" for all the elements with the "http://book" namespace -->
      <entry key="{http://book}*" value="{http://books}*"/> 
    </map>
  </property>
</bean> 

Metro是JAX-WS的一个实现。OP正在使用CXF和JAX-WS,正如您在标记中看到的,并且询问如何实现处理程序