WSO2 ESB调用SOAP端点无法执行操作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WSO2 ESB调用SOAP端点无法执行操作相关的知识,希望对你有一定的参考价值。

我想用来自WSO2 ESB的Action调用SOAP端点URL。我可以调用SOAP URL并获取整个wsdl响应,但我无法执行Action。

让我说wsdl回复

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions ....>
 <wsdl:types>
        <xs:schema  ..>...</xs:schema>
</wsdl:types>
<wsdl:service>..</wsdl:service>

 <wsdl:portType name="..">

<wsdl:operation name="AAA">
            <wsdl:input message="tns:in"/>
            <wsdl:output message="tns:out"/>
            <wsdl:fault name="fault1" message="tns:Error"/>
        </wsdl:operation>
<wsdl:operation name="BBB">
            <wsdl:input message="tns:in"/>
            <wsdl:output message="tns:out"/>
            <wsdl:fault name="fault1" message="tns:Error"/>
        </wsdl:operation>
<wsdl:operation name="CCC">
            <wsdl:input message="tns:in"/>
            <wsdl:output message="tns:out"/>
            <wsdl:fault name="fault1" message="tns:Error"/>
        </wsdl:operation>
......
......
</wsdl:portType>
...

这是我调用SOAP端点的WSO2 ESB代码

<payloadFactory media-type="xml">
        <format>
          <soapenv:Envelope
            xmlns:app="...xsd"
            xmlns:com=".....xsd"
            xmlns:ser="...xsd" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
            <soapenv:Header/>
            <soapenv:Body>
              <ser:...Request>
                <app:ApplicationHeader>
                  <app:...>$1</app:...>
                  <app:...>$2</app:...>

                </app:ApplicationHeader>
                <ser:DataHeader>
                  <ser:....>$3</ser:...
                  <ser:...>$4</ser:...>

                </ser:DataHeader>
              </ser:...Request>
            </soapenv:Body>
          </soapenv:Envelope>
        </format>
        <args>
          <arg value="1"/>
          <arg value="2"/>
          <arg value="3"/>
          <arg value="4"/>

        </args>
      </payloadFactory>
      <header name="Action" scope="default" value="AAA"/>

      <call blocking="true">
        <endpoint>
          <address uri="http:/URL/>
        </endpoint>
      </call>
      <respond/>

当我调用此代码时,我将获得上面的整个WSDL响应而不是操作“AAA”

但我应该做这个操作

答案

看起来您将wsdl url指定为端点的地址。这就是为什么你收到wsdl文件和错误,而不是Soap信封它得到定义。

你应该使用wsdl端点。

    <endpoint xmlns="http://ws.apache.org/ns/synapse" name="Service">
   <wsdl uri="https://yourServer/yourService?wsdl" service="yourService" port="yourServiceSoap">
      <suspendOnFailure>
         <progressionFactor>1.0</progressionFactor>
      </suspendOnFailure>
      <markForSuspension>
         <retriesBeforeSuspension>0</retriesBeforeSuspension>
         <retryDelay>0</retryDelay>
      </markForSuspension>
   </wsdl>
</endpoint>

或者你可以使用地址端点,但是从wsdl:port部分的wsdl文件获取URI,对于这个例子,将https://yourServer/service/yourService.asmx作为URI:

<service name="yourService">
<port name="yourServiceSoap" binding="yourServiceSoapBinding">    
<soapbind:address location="https://yourServer/service/yourService.asmx"/>
</port>
</service>

以上是关于WSO2 ESB调用SOAP端点无法执行操作的主要内容,如果未能解决你的问题,请参考以下文章

WSO2 ESB:后端恢复后地址端点不恢复发送

注入端点参数 wso2

如何使用 vfs JMS Sender 在 wso2 esb 代理中返回响应?

如何从 wso2 ESB 中的另一个服务调用服务(或一个服务的参数)

如何使用 wso2 esb 执行 ldap 搜索?

如何正确配置此WSO2计划任务以执行简单的REST服务调用?