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?