2013-01-02 1 views
0

J'ai écrit un gestionnaire pour construire mes en-têtes SOAP, mais je vais l'utiliser pour différentes opérations. Maintenant, en fonction de l'opération, certains noms d'en-tête changent. J'ai donc besoin de savoir quelle opération est appelée, en fonction de laquelle je vais changer mon nom d'en-tête.Comment obtenir le nom de l'opération WS dans Handler à l'aide de JAX RPC?

Là est mon problème. J'utilise JAX RPC, ce qui est l'exigence du projet en cours sur lequel je travaille. Comment puis-je connaître le nom de l'opération dans mon gestionnaire? Aide aimablement.

Répondre

0

J'ai fait des recherches à ce sujet. Il n'y a pas beaucoup de matériel disponible sur Internet pour cela. Cependant j'ai eu de la chance. Ceux qui sont confrontés à des problèmes similaires comme moi peut utiliser cette méthode:

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; 
    } 

Cette méthode prend l'objet de contexte de message et itère à travers l'enveloppe entière de savon pour obtenir le nom de l'opération.

J'espère que cela aidera certains des gens.

+0

Je suis arrivé cette info de cette url: http://docs.oracle.com/ cd/E13226_01/workshop/docs81/doc/fr/core/index.html. Il y a beaucoup d'autres choses aussi. Les aspirants RPC intéressés peuvent apprendre beaucoup de choses d'ici. –

0

Cela vous donne le nom du service:

@Override 
public boolean handleMessage(SOAPMessageContext pContext) { 
    QName servicio = (QName) pContext.get(MessageContext.WSDL_SERVICE); 
    return servicio.getLocalPart(); 
} 

Et cela vous donne le nom de l'opération:

@Override 
public boolean handleMessage(SOAPMessageContext pContext) { 
    QName servicio = (QName) pContext.get(MessageContext.WSDL_OPERATION); 
    return servicio.getLocalPart(); 
} 
Questions connexes