如何从SOAP响应中删除Mule头
我需要公开SOAP Web服务。。因此,我有以下骡子流:-如何从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="
<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组件中引用。。但结果萨默沃斯当时开了一个吉拉。