Mule-如何发送SOAP Web服务请求?

Mule-如何发送SOAP Web服务请求?,web,service,mule,Web,Service,Mule,嗨,我在骡子里做简单的POC 我有一个web服务,我想让它成为客户端 这是SOAPWeb服务,我想向它发送请求,但我没有办法。请告诉我一些想法 以下是代码: 骡子: 以下是运行中的WSDL:我感到困惑,因为我是mule的新手,所以大约需要4天的时间 <operation name="RetrieveServiceContent"> <input message="vim2:RetrieveServiceContentRequestMsg" />

嗨,我在骡子里做简单的POC

我有一个web服务,我想让它成为客户端

这是SOAPWeb服务,我想向它发送请求,但我没有办法。请告诉我一些想法

以下是代码:

骡子:

以下是运行中的WSDL:我感到困惑,因为我是mule的新手,所以大约需要4天的时间

  <operation name="RetrieveServiceContent">
     <input message="vim2:RetrieveServiceContentRequestMsg" />
     <output message="vim2:RetrieveServiceContentResponseMsg" />
     <fault name="RuntimeFault" message="vim2:RuntimeFaultFaultMsg"/>
  </operation>

有几种方法可以做到这一点。我不希望我们像MuleStudio希望你那样做,因为我从来没有真正做到过。基本上,每当我创建webservice客户端时,我的mule配置如下所示:

<custom-transformer class="nl.thorax.someprogram.transformers.SomeRequestTransformer
<https:outbound-endpoint ref="someEndpoint" >
   <cxf:jaxws-client 
        clientClass="nl.thorax.someprogram.someclass"
        wsdlLocation="http://somedomain?wsdl
        port="somePort" 
        operation="someOperation"/>
</https:outbound-endpoint>
<custom-transformer class="nl.thorax.someprogram.transformers.SomeResponseTransformer
public Object transformMessage(MuleMessage message, String outputEncoding) throws TransformerException
{
  RequestObject request = new RequestObject();
  request.setText("Hello!");
  message.setPayload(request);
  return message;
}
我创建请求,设置变量并将其返回给Mule。RequestObject是由WSDL2Java生成的一个类,对应于WSDL中的某些操作。解析响应的方式基本相同

现在,根据经验,我知道很多Web服务的工作方式并不完全相同。试着自己实现我的例子。如果这不起作用,请提供您的Mule配置和您可能正在使用的所有Java类

编辑: 我已经创建了一个实际有效的方法示例。这些文件可在以下网址下载:。请查看文件中的注释。当然,您必须手动创建Mule项目

示例的注意事项:

  • Mule配置的XML表示可以在归档文件的“resources”文件夹中找到
  • “nl.example.example”文件夹包含所有生成的JAX-WS文件
  • Mule配置中的WSDL位置必须更改,因为它包含绝对路径
  • 该示例在
    http://localhost:8088
    供您拨打。该流包含一个转换器,该转换器使用预定义参数创建示例调用。然后它尝试连接到Web服务。我在创建模拟服务时使用了SOAPUI使用的默认地址,但这当然可以更改为您想要的任何内容。Web服务(据推测)返回的内容会回显到用户的浏览器中
  • 在本例中,参数实际上是字符串,因为WSDL请求不包含任何内容。要确定要传递给cxf:jaxws客户机的对象,请查看操作定义,该定义可以在生成的文件中的端口定义中找到

感谢您的回复,Richard。我现在正在一步一步地移动:实际上我有一个前屏幕,我可以使用->连接到Mule。。。。。。现在请求就在里面,我收到的表单参数是:{txtBoxInstance:ServiceInstance1,txtBox2Instance:ServiceInstance2}现在我正在为此编写transformer,正如您所建议的,可以用许多不同的方式创建transformer。我的示例使用纯Java创建请求,因为这可能是最容易理解和处理的。但是,如果您感到舒适,可以使用任何您喜欢的方式来设置参数。只要有效负载在到达https:outbound端点时包含请求对象,您就可以了。很好,我也在使用Java,因为我是Mule ESB的新手,以前没有使用过设计基础工具,所以我不会感到困惑。使用WSDL2JAVA,我已经生成了存根,我的请求类名是->ManagedObjectReference,我以前使用过Java代码,其中的操作调用如下->vimPort.retrieveServiceContent(MG_OBJ_REF)。在Mule中,我面临“java.lang.ClassNotFoundException:无法加载类'ManagedObjectReference'”,尽管一切正常,但我需要了解为什么会发生此异常,如->由以下原因引起:org.Mule.api.config.ConfigurationException:创建名为'prjvmwareFlow1'的bean时出错:无法创建类型的内部bean'(内部bean)'[esxiclient.CreateRequest]在设置键为[1]的bean属性“messageProcessors”时;嵌套异常为org.springframework.beans.factory.BeanCreationException:创建名为“(内部bean)的bean时出错“:初始化bean失败;嵌套异常为org.springframework.beans.typemischException:未能将类型为'java.lang.String'的属性值转换为属性'returnClass'所需的类型'java.lang.Class',Richard,我已经完成了上述步骤和第三步,现在执行了步骤3,我收到异常-->消息:无此类操作:RetrieveServiceContent。未能通过终结点:org.mule.module.cxf.CxfOutboundMessageProcessor路由事件。消息负载的类型为:ManagedObjectReference代码:mule_ERROR--2
<custom-transformer class="nl.thorax.someprogram.transformers.SomeRequestTransformer
<https:outbound-endpoint ref="someEndpoint" >
   <cxf:jaxws-client 
        clientClass="nl.thorax.someprogram.someclass"
        wsdlLocation="http://somedomain?wsdl
        port="somePort" 
        operation="someOperation"/>
</https:outbound-endpoint>
<custom-transformer class="nl.thorax.someprogram.transformers.SomeResponseTransformer
public Object transformMessage(MuleMessage message, String outputEncoding) throws TransformerException
{
  RequestObject request = new RequestObject();
  request.setText("Hello!");
  message.setPayload(request);
  return message;
}