我有一个从我的 WSDL 生成的 JAX-WS 2.0 Web 服务实现。
我需要在我的逻辑处理程序实现中访问 Web 服务操作名称。
我使用以下方法来解决这个问题,但它总是返回 null。
context.get(MessageContext.WSDL_OPERATION);
如果你们中的任何人都可以帮助我解决这个问题,那就太好了。
我的服务器是 WAS 7.0,开发 IDE 是 RAD 8。
提前致谢。
我有一个从我的 WSDL 生成的 JAX-WS 2.0 Web 服务实现。
我需要在我的逻辑处理程序实现中访问 Web 服务操作名称。
我使用以下方法来解决这个问题,但它总是返回 null。
context.get(MessageContext.WSDL_OPERATION);
如果你们中的任何人都可以帮助我解决这个问题,那就太好了。
我的服务器是 WAS 7.0,开发 IDE 是 RAD 8。
提前致谢。
如果您想要 SOAPAction Header 并且它包含 Web 服务名称(就像我的一样),您可以使用它来打印它:
private void inLogger(SOAPMessageContext context){
HttpServletRequest req = (HttpServletRequest)context.get(MessageContext.SERVLET_REQUEST);
System.out.println(req.getHeader("SOAPAction"));
}
如果您的处理程序正在实施LogicalHandler<LogicalMessageContext>
,您可以这样做:
((QName)context.get( LogicalMessageContext.WSDL_OPERATION )).getLocalPart();
这将返回被调用的操作的名称。
您可以尝试这种方式:
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;
}