Czy istnieje gwarantowany sposób uzyskania nazwy operacji w niestandardowym programie obsługi mydła?

Mam niestandardowy moduł obsługi komunikatów SOAP dla wiadomości przychodzących, które będą uruchamiały inny kod w zależności od wywoływanej operacji. Moja pierwsza próba uzyskania nazwy operacji wyglądała podobnie:

public boolean handleMessage(SOAPMessageContext context)
{
    String op = context.get(MessageContext.WSDL_OPERATION);
    ...

To nie powiodło się, ponieważ właściwośćMessageContext.WSDL_OPERATION wydaje się, że nigdy nie zostanie ustawiony. Następnie spróbowałem użyć tego:

public boolean handleMessage(SOAPMessageContext context)
{
    Map<?, ?> headers = (Map<?, ?>)context.get(MessageContext.HTTP_REQUEST_HEADERS);    
    ArrayList<String> SOAPAction = ((ArrayList<String>) headers.get("SOAPAction"));
    String opName = SOAPAction.get(0);
    //opName will be formatted like "urn#myOperation", so the prefix must be removed
    opName = ((opName.replace("\"","").split("#"))[1]);

To działa, ale obawiam się, że mogą wystąpić sytuacje, w których właściwość nagłówka „SOAPAction” nie jest ustawiona (lub nawet nie istnieje) lub nie ma wartości, której oczekuję. Jestem też trochę zaniepokojony, ponieważ nie wiem, czy jest to „oficjalny” sposób na uzyskanie nazwy operacji - zrozumiałem to, patrząc na zawartośćcontext w debuggerze.

Czy istnieje lepszy sposób na uzyskanie nazwy operacji podczas obsługi przychodzących komunikatów SOAP?

questionAnswers(4)

yourAnswerToTheQuestion