在Mule 3.5中使用CXF的Web服务

时间:2015-12-27 11:50:36

标签: java web-services mule cxf anypoint-studio

我正在尝试使用mule(Anypoint Studio)中的CXF组件来使用Web服务。 所以我尝试从URL生成WSDL文件,但我得到了这个错误:Rpc/encoded wsdls are not supported in CXF所以我跟着this answer.

它工作了,它生成了客户端存根,然后将文件复制到我的mule项目中。

但是我收到了这个错误:

Service.SomeService.<init>(java.net.URL, javax.xml.namespace.QName) (java.lang.NoSuchMethodException)

这是我的流程:

<flow name="WebServiceTest">
          <cxf:jaxws-client
         clientClass="service.SomeService"
         wsdlLocation="http://127.0.0.1:8000/api/v2_soap/?wsdl"
        operation="test"/>         
      <outbound-endpoint address="http://127.0.0.1:8000/api.php/?type=v2_soap"/>
</flow>

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您的配置不正确特别是您的出站端点网址。 您可以尝试按照Mule文档配置CXF客户端 您还可以为 JAX-WS 服务构建客户端,而无需从WSDL生成客户端。在这里,您需要在本地使用服务接口和所有数据对象的副本,以使用以下内容: -

<flow name="csvPublisher">
  ...
  <cxf:jaxws-client serviceClass="org.example.HelloService" operation="sayHi"/>
  <outbound-endpoint address="http://localhost:63081/services/greeter"/>
</flow>

另一种方法是您可以将CXF生成的客户端用作出站端点。首先,您需要使用CXF或Maven插件中的 WSDL to Java 工具生成CXF客户端。
然后,您需要配置以下内容: -

<flow name="csvPublisher">
  ...
  <cxf:jaxws-client
         clientClass="org.apache.hello_world_soap_http.SOAPService"
         port="SoapPort"
         wsdlLocation="classpath:/wsdl/hello_world.wsdl"
         operation="greetMe"/>
  <outbound-endpoint address="http://localhost:63081/services/greeter"/>
</flow>

最好将wsdl放在本地类路径中。

请查看此处的完整文档作为参考以获得配置: -
https://docs.mulesoft.com/mule-user-guide/v/3.7/consuming-web-services-with-cxf

Consuming a Webservice Using Mule 3.4