如何从SOAP响应中删除Mule头

如何从SOAP响应中删除Mule头,soap,jms,mule,mule-studio,Soap,Jms,Mule,Mule Studio,我需要公开SOAP Web服务。。因此,我有以下骡子流:- <jms:activemq-connector name="Active_MQ" brokerURL="tcp://localhost:61616" validateConnections="true" doc:name="Active MQ"/> <flow name="Flow1" doc:name="Flow1" > <http:inbound-endpoint exchange-pattern="

我需要公开SOAP Web服务。。因此,我有以下骡子流:-

<jms:activemq-connector name="Active_MQ" brokerURL="tcp://localhost:61616" validateConnections="true" doc:name="Active MQ"/>

<flow name="Flow1" doc:name="Flow1" >
<http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8082" path="mainData" doc:name="HTTP"/>
<cxf:jaxws-service serviceClass="com.test.services.schema.maindata.v1.MainData"  doc:name="SOAP"/>
<mulexml:object-to-xml-transformer doc:name="Object to XML"/>
<jms:outbound-endpoint queue="NewQueue" connector-ref="Active_MQ" doc:name="JMS" exchange-pattern="request-response"/>
<logger message="Response2 :- #[message.payload]" level="INFO" doc:name="Logger"/>
<mulexml:xml-to-object-transformer doc:name="XML to Object"/>
</flow>


<flow name="flow2" doc:name="flow2" >
<jms:inbound-endpoint connector-ref="Active_MQ" address="jms://tcp:NewQueue" doc:name="JMS" exchange-pattern="request-response" disableTemporaryReplyToDestinations="true" responseTimeout="90000"/>
<set-variable variableName="SOAPRequest" value="#[message.payload]" doc:name="Variable"/>
<mulexml:xml-to-object-transformer doc:name="XML to Object"/>
<component class="com.test.services.schema.maindata.v1.Impl.MainDataImpl" doc:name="JavaMain_ServiceImpl">
<method-entry-point-resolver>
        <include-entry-point method="retrieveDataOperation"/>
        <include-entry-point method="insertDataOperation"/>
        <include-entry-point method="updateDataOperation"/>
        <include-entry-point method="deleteDataOperation"/>
</method-entry-point-resolver>
</component>
<mulexml:object-to-xml-transformer doc:name="Object to XML"/>
 </flow>

在这里,您可以看到请求从第一个流进入JMS队列,第二个流use JMS inbound从JMS队列和webservice实现的类ProcessIt获取请求。。现在服务很好,没有任何问题。。唯一的问题是它在响应中的SOAP中获取Mule头,如下所示:-

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Header>
      <mule:header xmlns:mule="http://www.muleumo.org/providers/soap/1.0">
         <mule:MULE_CORRELATION_ID>ID:ANIRBAN-PC-49483-1408719168461-1:1:10:1:1</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>
   </soap:Header>
   <soap:Body>
      <deleteDataResponse xmlns="http://services.test.com/schema/MainData/V1">
         <Response>Data not exists !!! Please provide correct ID</Response>
         <Id>0</Id>
         <Age>0</Age>
      </deleteDataResponse>
   </soap:Body>
</soap:Envelope>

ID:ANIRBAN-PC-49483-1408719168461-1:1:10:1:1
-1
-1
数据不存在!!!请提供正确的身份证
0
0

现在请帮助我从SOAP响应中删除Mule头。。我尝试了以下方法:-
,但没有用。。它仍在显示骡头。。请提供帮助。

enableMuleSoapHeaders=“false”
问题得到解决之前,您可以通过以下任一方式暂时解决问题:

  • 在HTTP入站端点和CXF服务之间添加一个连接;为了删除不适当的SOAP头,但是XSL转换
  • 使用delete message属性删除
    Flow1
    末尾的
    MULE.*
    道具,就在
    mulexml:xml到对象转换器之后

我还找到了另一种解决方案,将其添加到
cxf:outInterceptors

 <cxf:jaxws-service serviceClass="com.test.services.schema.maindata.v1.MainData"  doc:name="SOAP">
   <cxf:outInterceptors >
      <spring:bean id="outfault" class="com.test.services.schema.SOAPOptionalData.SOAPInterceptorOutboundHeaderRemover"/>
  </cxf:outInterceptors> 
</cxf:jaxws-service>

在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);
}
}
}

这也很好

我正要建议使用
enableMuleSoapHeaders=“false”
(这是正确的方法,请参见),但显然它不适合您。也许是回归?如果你100%确定它不起作用,那就用MuleSoft打开一个bug报告。是的,David。。我一路都试着。。我在CXF组件中设置了它,但它不起作用。。然后我将其设置为全局CXF组件,并将其从Mule flow的CXF组件中引用。。但结果萨默沃斯当时开了一个吉拉。