我想弄清楚如何處理一個SOAP請求,其中SOAPAction在消息頭中指定,但不在消息正文中。以下是我需要處理的示例請求。用CXF處理SOAPAction
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap="http://soap.afis.com/">
<soapenv:Header/>
<soapenv:Body>
<String>12</String>
</soapenv:Body>
</soapenv:Envelope>
將SOAPAction在上述請求的報頭,如:
的SOAPAction: 「甕:過程」
以下是一個可行的請求。請注意「process」元素(也稱爲SOAPAction)。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap="http://soap.afis.com/">
<soapenv:Header/>
<soapenv:Body>
<soap:process>
<String>12</String>
</soap:process>
</soapenv:Body>
</soapenv:Envelope>
這裏是CXF端點:
<cxf:cxfEndpoint id="afisProcessEndpoint"
address="/wildcat"
serviceClass="com.afis.CCHEndpointImpl"/>
這裏是實現:
@WebService(serviceName = "com.CCHEndpoint")
public class CCHEndpointImpl implements CCHEndpoint {
@Override
@WebMethod(operationName = "process", action = "urn:process")
public String process(@WebParam(partName = "String", name = "String") String string) {
return "sd";
}
}
這裏的接口:
@WebService
public interface CCHEndpoint {
@WebMethod(operationName = "process", action = "urn:process")
public String process(@WebParam(partName = "String", name = "String")String string);
}
如果我提交沒有請求XML中的流程元素(但在SO中AP頭),我得到如下:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Client</faultcode>
<faultstring>Unexpected wrapper element String found. Expected {http://soap.afis.com/}process.</faultstring>
</soap:Fault>
</soap:Body>
</soap:Envelope>
注意使用Axis2,我能夠處理這樣的請求,因爲services.xml的地圖行動,行動對我們來說,但我無法使用的Axis2爲這個項目。我需要CXF的等效機制。我覺得在cxfEndpoint中的額外配置,或者可能是一個註釋,但我找不到解決方案。
謝謝!這正是我需要的 – DKerr