如何在soap请求和响应中不发送mule头

如何在soap请求和响应中不发送mule头,mule,Mule,我有一个请求-响应http端点,定义如下: <http:inbound-endpoint address="${mvi.service.address}" exchange-pattern="request-response"> <cxf:proxy-service wsdlLocation="classpath:mvi.wsdl" namespace="http://pennmutual.com/services/mvi" service="MVIService" /&

我有一个请求-响应
http端点
,定义如下:

<http:inbound-endpoint address="${mvi.service.address}" exchange-pattern="request-response">
   <cxf:proxy-service wsdlLocation="classpath:mvi.wsdl" namespace="http://pennmutual.com/services/mvi" service="MVIService" />
</http:inbound-endpoint>

它发送回客户端的响应附加了mule头,如下所示:

 <soap:Header>
  <mule:header xmlns:mule="http://www.muleumo.org/providers/soap/1.0">
     <mule:MULE_CORRELATION_ID>4784545a-4fad-44ac-171e-1bc150ccdcb2</mule:MULE_CORRELATION_ID>
     <mule:MULE_CORRELATION_GROUP_SIZE>-1</mule:MULE_CORRELATION_GROUP_SIZE>
     <mule:MULE_CORRELATION_SEQUENCE>-1</mule:MULE_CORRELATION_SEQUENCE>
  </mule:header>

4784545a-4fad-44ac-171e-1bc150ccdcb2
-1
-1

如何删除
元素?

添加:

enableMuleSoapHeaders="false"
在您的
cxf:proxy服务上
。并添加一个全局CXF配置元素:

<cxf:configuration enableMuleSoapHeaders="false"/>

通过使用
cxf:outInterceptors
和java类,有一种删除Mule头的替代方法,如下所示:-

<http:inbound-endpoint address="${mvi.service.address}" exchange-pattern="request-response"/>
<cxf:proxy-service wsdlLocation="classpath:mvi.wsdl" namespace="http://pennmutual.com/services/mvi" service="MVIService" >
<cxf:outInterceptors >
  <spring:bean id="outfault" class="com.SOAPInterceptorOutboundHeaderRemover"/>
</cxf:outInterceptors> 
</cxf:proxy-service>

在SOAPInterceptorOutboundHeaderRemover java类中:-

public class SOAPInterceptorOutboundHeaderRemover extends AbstractSoapInterceptor {

public SOAPInterceptorOutboundHeaderRemover() {
super(Phase.PRE_PROTOCOL);
}

@Override
public void handleMessage(SoapMessage arg0) throws Fault {
List<Header> headerList = arg0.getHeaders();
Header muleHeader = null;
boolean isMuleHeader = false;
for (Header header : headerList) {
ElementNSImpl element = (ElementNSImpl) header.getObject();
if ("mule:header".equals(element.getNodeName())) {
isMuleHeader = true;
muleHeader = header;
}
}
if (isMuleHeader) {
arg0.getHeaders().remove(muleHeader);
}

}
}
公共类SOAPInterceptorOutboundHeaderRemover扩展了抽象SOAPInterceptor{
公共SOAPInterceptorOutboundHeaderRemover(){
超级(阶段前协议);
}
@凌驾
public void handleMessage(SoapMessage arg0)引发错误{
List headerList=arg0.getHeaders();
标头muleHeader=null;
布尔值isMuleHeader=false;
用于(标题:标题列表){
ElementNSImpl element=(ElementNSImpl)header.getObject();
if(“mule:header.equals(element.getNodeName())){
isMuleHeader=true;
多头=收割台;
}
}
if(isMuleHeader){
arg0.getHeaders().remove(muleHeader);
}
}
}

cxf:outInterceptors
java类从响应中删除Mule头,并且工作正常

我正在使用SoapUI进行测试,仍然看到Mule头出现在元素中抱歉我忘记了全局cxf config元素。再试一次。谢谢,这次有效。很好奇全局CXF配置元素是如何工作的,它不是由元素引用的。例如传输、安全管理器等。。。如果只有一个,不需要参考它,它会被捡起来的。