首页 > mule esb 3.8: 如何在mule内部调用websevice服务,并传递参数。

mule esb 3.8: 如何在mule内部调用websevice服务,并传递参数。

1、在本地起了一个webservice的服务

http://localhost:63081/hello?wsdl

2、在mule创建一个webservice cosumer,用来调用1中的webservice服务。以下是相关配置

<!--外部的ws连接-->
<ws:consumer-config name="Web_Service_Consumer" wsdlLocation="http://localhost:63081/hello?wsdl" service="HelloWorldService" port="HelloWorldPort" serviceAddress="http://localhost:63081/hello" doc:name="Web Service Consumer"/>
<!--mule提供给外部访问的地址-->
  <http:listener-config name="HTTP_Listener_Configuration" host="localhost" port="8081" doc:name="HTTP Listener Configuration"/>
    <ws:consumer-config name="ws-order" service="TshirtServicePortTypeService" port="TshirtServicePortTypePort" serviceAddress="http://tshirt-service.cloudhub.io/" wsdlLocation="http://tshirt-service.cloudhub.io/?wsdl" doc:name="Web Service Consumer"/>
    <!-- 接收HTTP请求,并在Mule内部调用ws服务中具体的方法(传递参数) -->
    <flow name="sayHi" >
        <http:listener config-ref="HTTP_Listener_Configuration" path="sayHi" doc:name="HTTP">
            <http:response-builder statusCode="200"/>
        </http:listener>
        <custom-transformer class="org.example.ws.proxy.DataTransFormat" doc:name="transformer" mimeType="text/xml"/>
        <ws:consumer config-ref="Web_Service_Consumer" operation="sayHi" doc:name="sayHi"/>
        <custom-transformer class="org.example.ws.proxy.DataTransFormatForShow" doc:name="transformer" mimeType="application/json"/>
        <response>
            <echo-component doc:name="Echo"/>
        </response>
    </flow>

3、直接在浏览器上输入http://localhost:8081/sayHi,返回以下信息

COULD_NOT_READ_XML_STREAM. Failed to route event via endpoint: org.mule.module.cxf.CxfOutboundMessageProcessor.

4、借用postman请求

返回以下信息

Message part {http://schemas.xmlsoap.org/soap/envelope/}Envelope was not recognized.  (Does it exist in service WSDL?).

5、如果借助soapUI工具来请求的话,是会成功返回信息的,证明第1步启动的webservice服务是没有错的

6、在第4中,post的请求参数是确定有传进去的(debug过)

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:exam="http://example.org/">
   <soapenv:Header/>
   <soapenv:Body>
      <exam:sayHi>
         <!--Optional:-->
         <arg0>the king in the north</arg0>
      </exam:sayHi>
   </soapenv:Body>
</soapenv:Envelope>

但是却不知道为何调用webservice失败。请求大神耐心解答。谢谢。

【热门文章】
【热门文章】