2013-01-02 53 views
0

我已經寫了一個處理程序來構建我的SOAP頭,但是我打算將它用於不同的操作。現在取決於操作,一些標題名稱會改變。所以我需要知道哪個操作被調用,基於此我將更改我的標題名稱。如何使用JAX RPC在Handler中獲取WS操作名稱?

有謊言我的問題。我正在使用JAX RPC,這是我正在開發的當前項目的要求。我如何知道我的處理程序中的操作名稱?請幫助。

回答

0

我對此做了一些研究。互聯網上沒有很多這方面的資料。不過,我很幸運。這些誰面臨着像我這樣類似的問題可以用這個方法:

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信封來獲得操作名稱。

希望這有助於一些人。

+0

我從這個網址此信息:http://docs.oracle.com/ cd/E13226_01/workshop/docs81/doc/en/core/index.html。還有很多其他的東西。有興趣的RPC志向者可以從這裏學到很多東西。 –

0

這給你的服務名稱:

@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(); 
} 
相關問題