我有一个用于传入消息的自定义 SOAP 消息处理程序,这些消息将根据调用的操作运行不同的代码。我第一次尝试获取操作名称看起来像这样:
public boolean handleMessage(SOAPMessageContext context)
{
String op = context.get(MessageContext.WSDL_OPERATION);
...
这失败了,因为该属性MessageContext.WSDL_OPERATION
似乎从未被设置。然后我尝试使用这个:
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]);
这可行,但我担心可能存在未设置标头属性“SOAPAction”(或什至不存在)或不具有我期望的值的情况。我也有点担心,因为我不知道这是否是获取操作名称的“官方”方式——我是通过查看context
调试器中的内容来弄清楚的。
在处理传入的 SOAP 消息时,有没有更好的方法来获取操作名称?