我有一个从我的WSDL生成的JAX-WS 2.0 Web服务实现。
我需要在逻辑处理程序实现中访问Web服务操作名称。
我使用了以下来解决这个问题,但它总是返回null。
context.get(MessageContext.WSDL_OPERATION);
如果有人帮我解决这个问题,那就太好了。
我的服务器是WAS 7.0,开发IDE是RAD 8.
提前致谢。
答案 0 :(得分:2)
如果您想要SOAPAction Header并且它包含Web服务名称(就像我的那样),您可以使用它来打印它:
private void inLogger(SOAPMessageContext context){
HttpServletRequest req = (HttpServletRequest)context.get(MessageContext.SERVLET_REQUEST);
System.out.println(req.getHeader("SOAPAction"));
}
答案 1 :(得分:0)
您可以尝试这种方式:
1)通过requestContext设置参数:
Map<String, Object> requestCtx = dispatcher.getRequestContext();
requestCtx.put("operationName", "anyOperation");
2)在WS LogicalHandler中的handleMessage中检查此参数:
public boolean handleMessage(LogicalMessageContext messageContext) {
boolean isCustomOperation = messageContext.containsKey("operationName");
if (isCustomOperation) {
// do smth..
}
return true;
}
答案 2 :(得分:0)
如果您的处理程序正在实施LogicalHandler<LogicalMessageContext>
,您可以这样做:
((QName)context.get( LogicalMessageContext.WSDL_OPERATION )).getLocalPart();
这将返回被调用操作的名称。