With web services at times one needs to know the name of the method (operation) being invoked before it is really invoked. A typical scenario is the authorization, where access to method is restricted to certain roles only. The JAX-WS RI 2.0 used to hold the name of the operation being invoked in SOAPMessageContext, which can be obtained in following manner-
soapMessageContext.get(MessageContext.WSDL_OPERATION);
Unfortunately JAX-WS RI 2.1.x no longer have this information and JAX-WS team is not ready to provide it as they said this is optional. Then what is the workaround when someone really needs it? Looking for clues I ran JAX-WS RI 2.1.5 code in Eclispe debugger and found operation name in non-public classes / variables as shown in the following screenshot-

Now equipped with this information operation name can be extracted using reflection API-
private String getMethodName(SOAPMessageContext context, boolean isRequest) {
try {
Field field = context.getClass().getSuperclass().getDeclaredField(
"packet");
field.setAccessible(true);
Packet packet = (Packet) field.get(context);
if (isRequest)
return ((StreamMessage) packet.getMessage())
.getPayloadLocalPart();
return ((JAXBMessage) packet.getMessage()).getPayloadLocalPart();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}Though this is not a clean way and may not work with future releases of JAX-WS RI but works for now :-)