我正在尝试使用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
答案 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: "Invalid URL"}"/>
</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>
希望这有帮助。