检查出站消息上所设置 SOAP Action 的行为更改

该行为在 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 供客户机应用程序提供带有 JAX-WS 的 SOAP 操作 javax.xml.ws.BindingProvider 属性 SOAPACTION_USE_PROPERTY And the SOAPACTION_URI_PROPERTY 我不知道 将使用提供的 SOAP 操作,无论设置如何,都不会对出站消息进行解析。 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 将禁用出站操作解析。

有关更多信息,请参阅: