【发布时间】:2013-01-02 12:16:21
【问题描述】:
我已经编写了一个处理程序来构造我的 SOAP 标头,但我打算将它用于不同的操作。现在根据操作,一些标题名称会发生变化。所以我需要知道调用了哪个操作,根据它我将更改我的标题名称。
这就是我的问题。我正在使用 JAX RPC,这是我正在处理的当前项目的要求。我如何知道我的处理程序中的操作名称?请帮忙。
【问题讨论】:
我已经编写了一个处理程序来构造我的 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;
}
此方法获取消息上下文对象并遍历整个soap信封以获取操作名称。
希望这对一些人有所帮助。
【讨论】: