比如A机器和B机器分别使用cxf发布了一个webservice,C机器部署了mule应用,我想在mule应用里集成A机器和B机器中的webservice,所有的请求通过访问mule应用来调用实际的webservice,并且根据webservice的响应去和另一个异构系统做交互,这样的场景可以实现吗?具体应该怎样去做?有没有例子提供一下?求教!

解决方案 »

  1.   

    当然可以。
    1、先把A和B上的服务做成proxy,放到mule中去。
    2、在访问outbound endpoint的返回中加入自己的集成逻辑
    3、集成逻辑里拿到响应信息,处理异构系统的交互
    4、最后再返回。其中2-3也可以考虑做成异步的,或是走jms。
      

  2.   

    <?xml version="1.0" encoding="UTF-8"?><mule xmlns:file="http://www.mulesoft.org/schema/mule/file" xmlns:jms="http://www.mulesoft.org/schema/mule/jms" xmlns:email="http://www.mulesoft.org/schema/mule/email"  xmlns:vm="http://www.mulesoft.org/schema/mule/vm" xmlns:jdbc="http://www.mulesoft.org/schema/mule/jdbc" xmlns:stdio="http://www.mulesoft.org/schema/mule/stdio"
    xmlns:mulexml="http://www.mulesoft.org/schema/mule/xml" xmlns:http="http://www.mulesoft.org/schema/mule/http" 
    xmlns:cxf="http://www.mulesoft.org/schema/mule/cxf" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:spring="http://www.springframework.org/schema/beans" version="CE-3.3.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="
    http://www.mulesoft.org/schema/mule/vm http://www.mulesoft.org/schema/mule/vm/current/mule-vm.xsd 
    http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd 
    http://www.mulesoft.org/schema/mule/xml http://www.mulesoft.org/schema/mule/xml/current/mule-xml.xsd 
    http://www.mulesoft.org/schema/mule/cxf http://www.mulesoft.org/schema/mule/cxf/current/mule-cxf.xsd 
    http://www.mulesoft.org/schema/mule/jms http://www.mulesoft.org/schema/mule/jms/current/mule-jms.xsd 
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd 
    http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd 
    http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd 
    http://www.mulesoft.org/schema/mule/email http://www.mulesoft.org/schema/mule/email/current/mule-email.xsd 
    http://www.mulesoft.org/schema/mule/jdbc http://www.mulesoft.org/schema/mule/jdbc/current/mule-jdbc.xsd 
    http://www.mulesoft.org/schema/mule/stdio http://www.mulesoft.org/schema/mule/stdio/current/mule-stdio.xsd ">
        <mulexml:object-to-xml-transformer name="Object_to_XML" doc:name="Object to XML"/>
        <!-- 提供HTTP入口的数据更新服务  -->
        <flow name="dataUpdateByHttpFlow" doc:name="dataUpdateByHttpFlow">
    <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" path="demo" doc:name="HTTP" 
    responseTransformer-refs="Object_to_XML"/>       
    <flow-ref name="GetDataFlow" doc:name="Flow Reference"/>
        </flow>
        <!-- 通过数据抽取服务获取数据  -->
        <flow name="GetDataFlow" doc:name="GetDataFlow">
            <set-payload value="mule" doc:name="Parameters"/>
            <http:outbound-endpoint  address="computerA" responseTimeout="100000" doc:name="HTTP endpoint">
    <!-- 可以根据wsdl进行相应的配置 -->
    <cxf:jaxws-client operation="" clientClass="" port="" doc:name="SOAP"/>
            </http:outbound-endpoint>
            <byte-array-to-object-transformer doc:name="Byte Array to Object"/>  
            <vm:outbound-endpoint exchange-pattern="one-way" doc:name="VM" path="datas"/> 
        </flow>
        <!-- 通过数据插入服务添加数据  -->
        <flow name="insertData" doc:name="insertData">
            <vm:inbound-endpoint exchange-pattern="one-way" path="datas" doc:name="VM"/>
            <custom-transformer class="yourTransformer" doc:name="Java"/>
    <!-- 可以根据wsdl进行相应的配置 -->
            <cxf:jaxws-client operation="" clientClass="" port="" doc:name="SOAP"/>
            <http:outbound-endpoint address="computerB" responseTimeout="100000" doc:name="HTTP endpoint"/>
        </flow>
    </mule>
    给你提供一个通过mule集成得到数据更新服务的一个模板你可以参考着这个进行添写,至于里面的operation就是wsdl中的operation而clientClass对应的就是你生成的本地Service类