【问题标题】:mule simple web client soap request with wsdl带有 wsdl 的 mule 简单 Web 客户端肥皂请求
【发布时间】:2014-07-11 20:21:47
【问题描述】:

我想从 mule flow 向 Web 服务发出请求。到目前为止,我得到了 WSDL 生成类(wsdl2java)、准备好的流程(如下)和“成功”发送请求。现在,问题是,即使您从生成的类中获取基类并将其放入有效负载中,它也不会生成所需的肥皂。

我的流程:

<flow name="flow1" doc:name="flow1">
    <quartz:inbound-endpoint jobName="testingJob" repeatInterval="10810000" repeatCount="0" startDelay="5000" responseTimeout="10000" doc:name="Quartz">
        <quartz:event-generator-job groupName="g1job" jobGroupName="g1job">
            <quartz:payload>a</quartz:payload>
        </quartz:event-generator-job>
    </quartz:inbound-endpoint>
    <logger message="Starting quartz for testing purpouses" level="INFO" doc:name="Logger"/>
    <custom-transformer class="com.example.GenerateSimpleRoutePublish" doc:name="Java"/>
    <cxf:simple-client   doc:name="SOAP"  serviceClass="com.example.ws.MyWebService" operation="send">
    </cxf:simple-client>
    <logger message="#[payload]" level="INFO" doc:name="Logger"/>
    <http:outbound-endpoint exchange-pattern="request-response" host="localhost" port="9094" path="sync-server-web/services/myws" method="POST" connector-ref="http_internal" doc:name="HTTP"/>
</flow>

GenerateSimpleRoutePublish 只是将基础对象放入有效负载中并继续。

作为soap请求发送的结果:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <ns1:send xmlns:ns1="http://somenamespace.si/">
            <ns1:arg0>
                <ns1:MyRequest>
...

但它应该是这样的:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <ns1:send xmlns:ns1="http://somenamespace.si/">
           <ns1:MyRequest>
...

注意,所需的 xml 中不再存在。

有人知道如何实现吗?我做了很多谷歌搜索,但没有找到正确的解决方案。如果需要更多,我可以提供信息。

谢谢!

编辑

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions name="MyWebService" targetNamespace="http://ws.example.com/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:tns="http://ws.example.com/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <wsdl:types>
        <xs:schema elementFormDefault="unqualified" targetNamespace="http://ws.example.com/"
            version="1.0" xmlns:tns="http://ws.example.com/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
            <xs:element name="MyRequest" type="tns:MyRequest" />
            <xs:element name="send" type="tns:send" />
            <xs:element name="sendResponse" type="tns:sendResponse" />
            <xs:complexType name="send">
                <xs:sequence>
                    <xs:element minOccurs="0" ref="tns:MyRequest" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType final="extension restriction" name="MyRequest">
                <xs:complexContent>
...

Transformer 类 GenerateSimpleRoutePublish.java:

@Override
public MuleEvent process(MuleEvent event) throws MuleException {
    event.setMessage(transformMessage(event.getMessage(), event.getEncoding()));
    // TODO Auto-generated method stub
    return event;
}

public MuleMessage transformMessage(MuleMessage message, String outputEncoding) throws TransformerException {

    MyRequest myRequest = new MyRequest();
    /**
     * some filling of testing data that is formatted correctly when soap is sent.
     */

    Send send = new Send();
    send.setMSyequest(myRequest);//the only setter method available for Send

    message.setPayload(send);
    return message;
}

Send.java 方法和 xml 定义:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "send", propOrder = {"myRequest"})

public MyRequest getMyRequest()
public void setMyRequest(MyRequest value)

【问题讨论】:

  • 如果没有你的 XSD/WSDL 和你的转换器类,很难判断这个问题......你能分享一下吗?
  • 好的,我添加了 WSDL(缩短版)。这部分应该足够了(否则它是 ~2k 行,但“发送”基本上只是包装包含更多节点的 MyRequest。在生成的代码中,我在 Send 类中只有 MyRequest 的 setter 和 getter,没有别的。谢谢

标签: web-services cxf mule webservice-client


【解决方案1】:

您可以使用 Groovy 脚本向 Web 服务客户端发送 SOAP 请求,而不是使用自定义转换器,就像 Java pojo 类一样...请查看参考:- https://m-square.com.au/consuming-net-wcf-soap-web-services-from-mule/

【讨论】:

    猜你喜欢
    • 2017-09-27
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-22
    • 1970-01-01
    • 2019-01-27
    • 1970-01-01
    相关资源
    最近更新 更多