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端点无法执行操作的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 vfs JMS Sender 在 wso2 esb 代理中返回响应?