Java 从SOAP请求和响应中删除命名空间
我有一个与此类似的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-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,正如您在标记中看到的,并且询问如何实现处理程序