该行为在 WebSphere Application Server V8 中,就如何在 JAX-WS 分派客户机的出站消息上确定 SOAP Action 设置方面已发生更改。 在 V8 之前的发行版中,如果分派客户机应用程序未提供 SOAP Action,那么 JAX-WS 运行时环境就无法在出站消息上发送正确的 SOAP Action。 相反地,它会将操作设为匿名操作。 现在,在 V8 中,如果客户机应用程序未提供 SOAP Action,那么 JAX-WS 运行时环境将解析外发消息以确定所调用的操作,并使用该操作来确定 SOAP Action 的相应值。
在下列情况下,此规则会标记为了建立分派客户机而进行的调用:
WebSphere Application Server Traditional 和 Liberty 的最佳编码做法是让客户机应用程序向 SOAP 操作提供 JAX-WS javax.xml.ws.BindingProvider 属性 SOAPACTION_USE_PROPERTY 和 SOAPACTION_URI_PROPERTY。 将使用提供的 SOAP Action,而且不管如何设置 DISPATCH_CLIENT_OUTBOUND_RESOLUTION 属性,都不会解析出站消息。
本示例显示了请求上下文上设置了 SOAP Action 的最佳实践代码。 如果 SOAPACTION_URI_PROPERTY 未设置或 SOAPACTION_USE_PROPERTY 已设为 false,那么此规则会标记对 createDispatch() 方法的调用。
例如:|
//Create a dispatch instance Dispatch<SOAPMessage> dispatch = service.createDispatch(portName, SOAPMessage.class, Service.Mode.MESSAGE); // Use Dispatch as BindingProvider BindingProvider bp = (BindingProvider) dispatch; // Configure RequestContext to send SOAPAction HTTP Header Map<String, Object> rc = bp.getRequestContext(); rc.put(BindingProvider.SOAPACTION_USE_PROPERTY, Boolean.TRUE); rc.put(BindingProvider.SOAPACTION_URI_PROPERTY, "hello"); |
因为此解析的成本可能很高,所以可以在 WebSphere Application Server Traditional 上,在系统级别设置属性(以始终禁用此解析)或在 JAX-WS 请求消息上下文上设置属性(以逐个消息地禁用此解析)。 如果禁用了解析,那么出站消息中的 SOAP Action 将继续像以前那样设为匿名操作。 禁用属性定义为常量 org.apache.axis2.jaxws.Constants.DISPATCH_CLIENT_OUTBOUND_RESOLUTION,其字符串值为 jaxws.dispatch.outbound.operation.resolution.enable。 如果未设置该属性,那么它会解释为字符串 true,从而启用出站操作解析。 将该属性设为 false 会禁用出站操作解析。
有关更多信息,请参阅: