我已經寫了一個處理程序來構建我的SOAP頭,但是我打算將它用於不同的操作。現在取決於操作,一些標題名稱會改變。所以我需要知道哪個操作被調用,基於此我將更改我的標題名稱。如何使用JAX RPC在Handler中獲取WS操作名稱?
有謊言我的問題。我正在使用JAX RPC,這是我正在開發的當前項目的要求。我如何知道我的處理程序中的操作名稱?請幫助。
我已經寫了一個處理程序來構建我的SOAP頭,但是我打算將它用於不同的操作。現在取決於操作,一些標題名稱會改變。所以我需要知道哪個操作被調用,基於此我將更改我的標題名稱。如何使用JAX RPC在Handler中獲取WS操作名稱?
有謊言我的問題。我正在使用JAX RPC,這是我正在開發的當前項目的要求。我如何知道我的處理程序中的操作名稱?請幫助。
我對此做了一些研究。互聯網上沒有很多這方面的資料。不過,我很幸運。這些誰面臨着像我這樣類似的問題可以用這個方法:
protected String getMethodName(MessageContext mc)
{
String operationName = null;
try
{
SOAPMessageContext messageContext = (SOAPMessageContext) mc;
// assume the operation name is the first element
// after SOAP:Body element
Iterator i = messageContext.
getMessage().getSOAPPart().getEnvelope().getBody().getChildElements();
while (i.hasNext())
{
Object obj = i.next();
if(obj instanceof SOAPElement)
{
SOAPElement e = (SOAPElement) obj;
operationName = e.getElementName().getLocalName();
break;
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
return operationName;
}
該方法以消息上下文對象並遍歷整個SOAP信封來獲得操作名稱。
希望這有助於一些人。
這給你的服務名稱:
@Override
public boolean handleMessage(SOAPMessageContext pContext) {
QName servicio = (QName) pContext.get(MessageContext.WSDL_SERVICE);
return servicio.getLocalPart();
}
這給你的操作名稱:
@Override
public boolean handleMessage(SOAPMessageContext pContext) {
QName servicio = (QName) pContext.get(MessageContext.WSDL_OPERATION);
return servicio.getLocalPart();
}
我從這個網址此信息:http://docs.oracle.com/ cd/E13226_01/workshop/docs81/doc/en/core/index.html。還有很多其他的東西。有興趣的RPC志向者可以從這裏學到很多東西。 –