¿Hay una forma garantizada de obtener el nombre de la operación en un controlador de jabón personalizado?

Tengo un controlador de mensajes SOAP personalizado para los mensajes entrantes que ejecutarán un código diferente según la operación a la que se llame. Mi primer intento de obtener el nombre de la operación parecía algo así:

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

Esto falló porque la propiedadMessageContext.WSDL_OPERATION Parece que nunca se establece. Entonces intenté usar esto:

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

Esto funciona, pero me preocupa que pueda haber situaciones en las que la propiedad del encabezado "SOAPAction" no esté establecida (o ni siquiera exista), o no tenga el valor que esperaba. También estoy un poco preocupado porque no sé si esta es una forma "oficial" de obtener el nombre de la operación; lo descubrí mirando el contenido decontext en el depurador.

¿Hay alguna forma mejor de obtener el nombre de la operación cuando se manejan los mensajes SOAP entrantes?

Respuestas a la pregunta(4)

Su respuesta a la pregunta