首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mule ESB流调用SOAP不起作用,但在SOAP UI中起作用

Mule ESB流调用SOAP不起作用,但在SOAP UI中起作用
EN

Stack Overflow用户
提问于 2018-02-14 15:58:59
回答 1查看 864关注 0票数 0

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

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

代码语言:javascript
复制
<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].
EN

回答 1

Stack Overflow用户

发布于 2018-02-14 16:34:08

更新答案:

代码语言:javascript
复制
<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请求中传递一个空的主体。

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

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

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

代码语言:javascript
复制
<?xml version='1.0' encoding='UTF-8'?>
<ns0:getDetails xmlns:ns0="http://localhost/getDetails:getDetailsWSD">
    <getDetailsOrder/>
</ns0:getDetails>

我想我们已经完成了你的初始问题,关于你的空负载的转换。您现在关心的是使用web服务。

谢谢。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48782248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档