Existe uma maneira garantida de obter o nome da operação em um manipulador de sabão personalizado?

Eu tenho um manipulador de mensagem SOAP personalizado para mensagens de entrada que executará código diferente com base na qual a operação está sendo chamada. Minha primeira tentativa de obter o nome da operação parecia algo assim:

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

Isso falhou porque a propriedadeMessageContext.WSDL_OPERATION parece nunca ser definido. Então tentei usar isso:

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]);

Isso funciona, mas estou preocupado que possa haver situações em que a propriedade de cabeçalho "SOAPAction" não esteja definida (ou nem exista) ou não tenha o valor esperado. Eu também estou um pouco preocupado porque eu não sei se esta é uma maneira "oficial" de obter o nome da operação - eu descobri olhando para o conteúdo decontext no depurador.

Existe alguma maneira melhor de obter o nome da operação ao manipular mensagens SOAP recebidas?

questionAnswers(4)

yourAnswerToTheQuestion