0

详细信息:我在 MuleESB 中创建了一个流程,它正在调用一个没有任何参数的 Web 服务,只是在一个属性中发送它的用户名、密码和令牌,它工作正常。

但是第二个API我想在调用soap请求时发布一些参数但我不知道如何使用它我试图通过set payload但没有响应。

<http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" port="8081" doc:name="HTTP Listener Configuration"/>
<http:request-config name="HTTP_Request_Configuration" host="webservicehostadd" port="443" doc:name="HTTP Request Configuration">
        <http:basic-authentication username="username" password="pass"/>
    </http:request-config>
    <ws:consumer-config name="Web_Service_Consumer" wsdlLocation="https://xxxx/1.0?wsdl" service="xxx" port="xxxx" serviceAddress="https://xxxxx/1.0" connectorConfig="HTTP_Request_Configuration" doc:name="Web Service Consumer"/>
    <flow name="mycustomflow">
        <http:listener config-ref="HTTP_Listener_Configuration" path="/TEST" doc:name="HTTP"/>
        <set-property propertyName="APIKey" value="xxx-xxx-xxx-xxx-xxx" doc:name="Property"/>
        <dw:transform-message doc:name="Transform Message" metadata:id="xxx-xxx-xxx-xxx-xxxxxxxx">
            <dw:input-payload mimeType="application/xml"/>
            <dw:set-payload><![CDATA[%dw 1.0
%output application/xml
%namespace ns0 http://localhost/getDetails:getDetailsWSD
---
{
    ns0#getDetails: {
        getDetailsOrder: {
            ID: payload.ns0#getDetails.getDetailsOrder.ID,
            AllData: payload.ns0#getDetails.getDetailsOrder.AllData
        }
    }
}]]></dw:set-payload>
        </dw:transform-message>
        <ws:consumer config-ref="Web_Service_Consumer" operation="employeeDetails" doc:name="Web Service Consumer"/>
    </flow>

It showed the below error:

Exception while executing: 
[row,col]: [1,1]
Unexpected character '{' (code 123) in prolog; expected '<'
 at [row,col {unknown-source}]: [1,1].
4

1 回答 1

0

更新的答案:

<dw:transform-message metadata:id="XXXXX" doc:name="Transform Message">
<dw:set-payload><![CDATA[
    %output application/xml skipNullOn="everywhere" 
    %namespace ns0 localhost/getDetails:getDetailsWSD 
    ---
    {
       ns0#getDetails: { 
          getDetailsOrder: { 
             ID: payload.ns0#getDetails.getDetailsOrder.ID, 
             AllData: payload.ns0#getDetails.getDetailsOrder.AllData 
          } 
       } 
    }]]>
</dw:set-payload>
</dw:transform-message>

在您的场景中:您正在传递一个 XML 格式的正文,有时在您的 Postman 请求中传递一个空正文。

传递一个空的身体会导致你的有效载荷是{NullPayload}. 为了处理这个问题,我们必须删除显式定义输入 mime 类型:<dw:input-payload mimeType="application/xml"/>

在你的转变中:ID: payload.ns0#getDetails.getDetailsOrder.ID,。您正在从空有效负载中检索值,这将失败。为避免失败,我们添加了:skipNullOn="everywhere". 你可以在这里阅读更多关于它的信息。

我自己尝试了这种转换,结果如下:

<?xml version='1.0' encoding='UTF-8'?>
<ns0:getDetails xmlns:ns0="http://localhost/getDetails:getDetailsWSD">
    <getDetailsOrder/>
</ns0:getDetails>

我认为我们已经完成了关于转换空有效负载的初始问题。您现在关心的是使用 Web 服务。

谢谢你。

于 2018-02-14T08:34:07.943 回答