我尝试将WSO2 ESB与SAP Solution Manager Webservice一起用作端点。 为了向Webservice发送消息,我需要修改SOAP Header。 在谷歌搜索时,我发现我可以使用Enrich Mediator。但我找不到如何在标题中添加前缀的示例。
我拥有的是:
<?xml version='1.0' encoding='utf-8'?>
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
<soapenv:Body>
<urn:ReadCompleteIncident>
<IncidentGuid>xxxxx</IncidentGuid>
<SystemGuid>xxx</SystemGuid>
</urn:ReadCompleteIncident>
</soapenv:Body>
</soapenv:Envelope>
但是我收到错误,因为ESB不知道前缀“urn:”。所以我必须将“xmlns:urn =”urn:sap-com:document:sap:soap:functions:mc-style“”添加到Header中以获取此信息:
<?xml version='1.0' encoding='utf-8'?>
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:urn="urn:sap-com:document:sap:soap:functions:mc-style">
<soapenv:Body>
<urn:ReadCompleteIncident>
<IncidentGuid>xxxxx</IncidentGuid>
<SystemGuid>xxx</SystemGuid>
</urn:ReadCompleteIncident>
</soapenv:Body>
</soapenv:Envelope>
如何使用Enrich Mediator进行此操作?还是有另一种解决方案吗?
谢谢:)
答案 0 :(得分:2)
您可以使用WSO2 ESB的Header介体来满足您的要求。
<header name="Action" value="urn:ReadCompleteIncident"/>
您可以参考此链接以查找更多信息。
答案 1 :(得分:1)
我用Enrich Mediator解决了这个问题。例如,这是我的代理。
向ESB输入消息:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Header/>
<soap:Body>
<content>Message content</content>
</soap:Body>
</soap:Envelope>
SAP PI所需的输入消息:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:xxxx">
<soapenv:Header/>
<soapenv:Body>
<urn:xxxx>
<content>Message content</content>
</urn:xxxx>
</soapenv:Body>
</soapenv:Envelope>
解决方案:
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="WSO2toSAP"
transports="https,http"
statistics="disable"
trace="disable"
startOnLoad="true">
<target>
<inSequence>
<property name="OUT_ONLY" value="true" scope="default" type="STRING"/>
<property name="FORCE_SC_ACCEPTED"
value="true"
scope="axis2"
type="STRING"/>
<log level="full"/>
<enrich>
<source type="body" clone="true"/>
<target type="property" property="INPUT_MESSAGE"/>
</enrich>
<enrich>
<source type="inline" clone="true">
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body/>
</soapenv:Envelope>
</source>
<target type="envelope"/>
</enrich>
<enrich>
<source type="inline" clone="true">
<urn:xxxx xmlns:urn="urn:xxxx"/>
</source>
<target type="body"/>
</enrich>
<enrich>
<source type="property" clone="true" property="INPUT_MESSAGE"/>
<target type="body" action="child"/>
</enrich>
<log level="full"/>
<send>
<endpoint key="WSO2toSAP_endpoint"/>
</send>
</inSequence>
</target>
<description/>
</proxy>
我希望,我帮助你:)。
答案 2 :(得分:0)
我认为有多种方法可以解决这个问题 -
payloadFactory介体,用于处理请求或响应。
使用脚本介体 - 有关如何使用脚本的更多详细信息,请查看此页面http://abeykoon.blogspot.com/2013/03/encoding-and-decoding-xml-using-wso2-esb.html#comment-form。如您所见,博客使用payloadFactory生成请求,然后使用脚本对其进行操作以获得所需的效果。
如果我找时间,我会尝试使用脚本为您构建快速解决方案。
一切顺利......