2013-01-02 2 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; 
    } 

이 방법은 작업 이름을 얻을 수있는 전체 비누 봉투를 통해 메시지 컨텍스트 객체와 반복됩니다.

희망 사항은 일부 사람들에게 도움이되기를 바랍니다.

+0

나는이 URL에서이 정보를 얻었다을 : http://docs.oracle.com/ cd/E13226_01/workshop/docs81/doc/ko/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(); 
}