我正在將一個服務從Axis遷移到Axis2(Java)。該服務響應與位「定製」 XML的簡單SOAP請求在主體如下所示:將服務從Axis遷移到Axis2(Java) - 我應該使用哪個MessageReceiver?
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Header>
<wsse:Security xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/04/secext">
<UsernameToken Id="MyID">
<Username>user</Username>
<Password>pass</Password>
</UsernameToken>
</wsse:Security>
<dstm:ClientType xmlns:dstm="http://schemas.company.com/My_functions">Messaging.EWS</dstm:ClientType>
<dstm:SessionScenario xmlns:dstm="http://schemas.company.com/My_functions">terminate</dstm:SessionScenario>
<dstm:Organization xmlns:dstm="http://schemas.company.com/My_functions">*</dstm:Organization>
</soapenv:Header>
<soapenv:Body>
<tt:processBodyMessage xmlns:tt="http://core.ws.com"/>
<GetZipCode_001 version="1.0" xmlns="http://schema.company.com/Company/1">
<Get>
<ActionExpression>getEntity</ActionExpression>
</Get>
<ZipCodeID>
<Id>10003</Id>
</ZipCodeID>
</GetZipCode_001>
</soapenv:Body>
</soapenv:Envelope>
在軸1,服務了org.wc3.dom元件的陣列作爲參數,並處理他們,例如
如果我將服務遷移到Axis2,我可以調用它,但調試顯示elems數組爲空。這在大多香草的services.xml使用RPCMessageReceivers:
<service name="Connector">
<Description>
Connector Service ported to Axis2
</Description>
<messageReceivers>
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
</messageReceivers>
<parameter name="ServiceClass" locked="false">com.ws.core.Service</parameter>
</service>
從我讀過有關Axis2的,所以一般不會有DOM在服務對象的簽名是個好主意,所以我嘗試使用AXIOM OMElements :
public OMElement processMessage(OMElement e) { ... }
與RawXMLINOutMessageReceiver結合:
<service name="Connector">
<Description>
Connector Service ported to Axis2
</Description>
<operation name="processMessage">
<messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
</operation>
<parameter name="ServiceClass" locked="false">com.ws.core.Service</parameter>
</service>
這工作好一點,但被傳遞到「E」的唯一事情是第一要素的SOAP身體。
如果我試圖改變方法簽名接受OMElements數組:
public OMElement processMessage(OMElement[] e) { ... }
我得到一個Axis2故障抱怨沒有實現所需的方法簽名方法。
我也曾嘗試使用帶有RPCMessageReceiver OMElements數組,但這會導致一個空數組中傳遞。
能約我可以使用什麼樣的接收機/方法簽名組合的任何人提供意見,以獲得訪問SOAP請求正文中的所有XML元素?提前致謝。