我已经编写了一个处理程序来构造我的 SOAP 标头,但我打算将它用于不同的操作。现在根据操作,一些标题名称会发生变化。所以我需要知道哪个操作被调用,基于它我将更改我的标题名称。
我的问题就在于此。我正在使用 JAX RPC,这是我正在处理的当前项目的要求。我如何知道我的处理程序中的操作名称?请帮忙。
这为您提供了服务名称:
@Override
public boolean handleMessage(SOAPMessageContext pContext) {
QName servicio = (QName) pContext.get(MessageContext.WSDL_SERVICE);
return servicio.getLocalPart();
}
这为您提供了操作名称:
@Override
public boolean handleMessage(SOAPMessageContext pContext) {
QName servicio = (QName) pContext.get(MessageContext.WSDL_OPERATION);
return servicio.getLocalPart();
}
我对此做了一些研究。互联网上没有很多可用的材料。不过我很幸运。像我一样面临类似问题的人可以使用这种方法:
protected String getMethodName(MessageContext mc)
{
String operationName = null;
try
{
SOAPMessageContext messageContext = (SOAPMessageContext) mc;
// assume the operation name is the first element
// after SOAP:Body element
Iterator i = messageContext.
getMessage().getSOAPPart().getEnvelope().getBody().getChildElements();
while ( i.hasNext() )
{
Object obj = i.next();
if(obj instanceof SOAPElement)
{
SOAPElement e = (SOAPElement) obj;
operationName = e.getElementName().getLocalName();
break;
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
return operationName;
}
此方法获取消息上下文对象并遍历整个肥皂信封以获取操作名称。
希望这可以帮助一些人。