使用Mule 3.4使用Web服务

时间:2013-10-22 12:21:06

标签: web-services soap jax-ws cxf mule

我正在尝试使用mule文档中的教程来使用生成的Web服务。已经能够成功构建Web服务,但有消耗它的问题。我有两个Java Clasess“HelloWorld”和“HelloWorldImpl”。这是我的流程

<flow name="helloService" doc:name="helloService">
   <http:inbound-endpoint address="http://localhost:63081/hello" exchange-pattern="request-response" doc:name="HTTP">
       <cxf:jaxws-service serviceClass="com.test.HelloWorld"/>
   </http:inbound-endpoint>
   <component class="com.test.HelloWorldImpl" doc:name="Java"/>
   <cxf:jaxws-client serviceClass="com.test.HelloWorld" operation="sayHi" doc:name="SOAP" />
   <outbound-endpoint address="http://localhost:63081/services/greeter" doc:name="Generic"/>
</flow>

我做错了什么?

当我访问出站端点时,我得到了

Cannot bind to address "http://activate.adobe.com:63081/services/greeter" No component     registered on that endpoint

4 个答案:

答案 0 :(得分:2)

您必须使您的端点接受所有子路径,然后使用消息路由处理错误的路径:

示例:

<flow name="jfeed_fill_data">
    <http:inbound-endpoint address="http://localhost:1212" />
    <choice>
        <when evaluator="header" expression="INBOUND:http.request.path=/jcore/insert/feed/">
            <component class="main.java.com.joshlabs.jcore.Feed"/>
        </when>
        <otherwise>
            <message-properties-transformer>
                <add-message-property key="http.status" value="404"/>
            </message-properties-transformer>
            <expression-transformer>
                <return-argument evaluator="string" expression="{Exception: &quot;Invalid URL&quot;}"/>
            </expression-transformer>
        </otherwise>
    </choice>
</flow>

答案 1 :(得分:1)

您的入站端点是http://localhost:63081/hello,这是您应该调用以使用您的网络服务的地址。

此外,您的出站端点似乎指向没有要使用的Web服务的地址。除非你的mule配置中有第二个流程,否则你没有显示。

答案 2 :(得分:1)

您已定义了一个在服务端点http://localhost:63081/hello上具有侦听器的流。在此流程中,请求进入,然后使用jaxws-client将其转发到另一个在http://localhost:63081/services/greeter监听的服务。

现在错误消息显示Cannot bind to address,这意味着它无法调用终点。是否有服务在您尝试向其发送请求的终点处运行?如果你想在本地发送请求,就像从你的流程中看到的那样,那么你需要另一个流程在那个端点上监听,类似于你拥有的但具有不同的http-endpoint

答案 3 :(得分:1)

第一个问题:如何在localhost上的同一端口(63081)上运行两个服务。

http://localhost:63081/hello
http://localhost:63081/services/greeter

另外如您的帖子所述,您创建的Web服务是端点

的Hello服务
http://localhost:63081/hello

所以你的网络服务应该如下。

<flow name="helloService" doc:name="helloService">
   <http:inbound-endpoint address="http://localhost:63081/hello" exchange-pattern="request-response" doc:name="HTTP">
       <cxf:jaxws-service serviceClass="com.test.HelloWorld"/>
   </http:inbound-endpoint>
   <component class="com.test.HelloWorldImpl" doc:name="Java"/>
</flow>

为了消费,您可以编写另一个获得cxf:jaxws-client

的流程
<flow name="helloclient" >
  <some inbound endpoint. >
  ....
   <cxf:jaxws-client serviceClass="com.test.HelloWorld" operation="sayHi" doc:name="SOAP" />
   <outbound-endpoint address="http://localhost:63081/hello" doc:name="Generic"/>
  .....

</flow>

希望这有帮助。