0
我有以下形式的APIWSO2 ESB調用不及格信封
<api xmlns="http://ws.apache.org/ns/synapse" name="MyRestApi" context="/practice">
<resource methods="GET" uri-template="/{someValue}">
<inSequence>
<header name="Action" value="urn:sayHello"/>
<payloadFactory media-type="xml">
<format>
<p:sayHello xmlns:p="http://practice">
<p:inputString>$1</p:inputString>
</p:sayHello>
</format>
<args>
<arg evaluator="xml" expression="$ctx:uri.var.someValue"/>
</args>
</payloadFactory>
<log level="full"/>
<call>
<endpoint>
<address uri="http://192.168.0.105:9763/services/Practice/sayHello" format="soap12"/>
</endpoint>
</call>
<enrich>
<source type="body" clone="true"/>
<target type="property" action="child" property="body_of_first_call"/>
</enrich>
<property xmlns:ns="http://practice" name="response" expression="//ns:return" scope="default" type="STRING"/>
<property xmlns:ns="http://practice" name="response2" expression="//ns:sayHelloResponse" scope="default" type="STRING"/>
<log>
<property name="myValue" expression="$ctx:response"/>
<property name="myValue2" expression="$ctx:response2"/>
<property name="myValue3" expression="$ctx:body_of_first_call"/>
</log>
<payloadFactory media-type="xml">
<format>
<result>
<sentValue>$1</sentValue>
<returnedValue>$2</returnedValue>
</result>
</format>
<args>
<arg evaluator="xml" expression="$ctx:uri.var.someValue"/>
<arg evaluator="xml" expression="$ctx:response"/>
</args>
</payloadFactory>
<property name="messageType" value="application/xml" scope="axis2" type="STRING"/>
<respond/>
</inSequence>
<outSequence/>
<faultSequence/>
</resource>
</api>
幾乎完全基於引導發現here
這是在這一點上只是試圖抓住連接器和API的概念所以我可以將它應用於我在工作中所做的事情,但我遇到了一些障礙。任何嘗試與外部SOAP服務進行通信(ESB需要執行的操作),都無法找到端點或無法傳遞SOAP信封中的值。
如上所述,代碼將查找端點,但請求中的輸入值inputString始終爲空。它與將該地址放入瀏覽器中完全相同,完全省略了SOAP信封,然而,記錄該調用會按預期方式將信封打印到控制檯,因此信封正在生成但未進入應用程序服務器。
事情我也都試過:
1)改變端點地址是服務端點,而不是特定的操作。這會導致AS發生錯誤,聲稱無法找到操作。此端點和操作在SoapUI中按預期工作。
2)使用WSDL端點而不是地址。結果與1相同。
3)添加/刪除標題標籤。所有三個端點都已嘗試使用/不使用標題標記。他們的結果不會改變。
在這一點上,我已經窮盡了我對ESB的理解。