传输头属性最佳实践

您可以在 Java™ API for XML-based RPC (JAX-RPC) 客户机存根、Call 实例或 Java API for XML-Based Web services (JAX-WS) BindingProvider 的 RequestContext 实例上设置 REQUEST_TRANSPORT_PROPERTIES 属性和 RESPONSE_TRANSPORT_PROPERTIES 属性,以使 Web Service 客户机可以发送或检索传输头。

最佳实践 最佳实践: 使用这些最佳实践可以使 Web Service 客户机能够发送或检索传输头。bprac

REQUEST_TRANSPORT_PROPERTIES 最佳实践

某些传输头(例如 HTTP Cookie 头和 Cookie2 头)包含多个嵌入式值。对于包含多个值的头,必须以如下方式编写头值:
  • 在头值中嵌入的每个 name=value 对必须用分号 (;) 分隔。
  • 每个 name 和它的值必须用等号 (=) 分隔。
以下是必须如何编写头值的示例:
name1=value1;name2=value2;name3=value3
如果传出请求已包含与 Map 中的值相匹配的头标识,那么在将用户的 Map 中包含的值添加至传出请求前可能会对这些值进行解析。 对于某些包含多个嵌入值的传输头,Map 中的头值将解析为各个 name=value 组件。分号 (;) 分隔各成分,例如,name1=value1;name2=value2。将每个 name=value 追加到出局头,除非:
  • 传出请求头包含 name 值。

    在这种情况下,将不提示并静默忽略 Map 中的 name=value,以防止客户机覆盖或修改传出请求头中已由服务器或 Web Service 引擎设置的 name 值。

  • 用户的头值包含多个 name 值。

    用户的头值包含多个 name 值时,将使用第一个出现的 name 值并静默忽略其他值。例如,如果用户的头值包含 name1=value1;name2=value2;name1=value3,其中 name1 出现了两次,那么将使用第一个值 name1=value1。不提示而静默忽略另一个值 name1=value3。

RESPONSE_TRANSPORT_PROPERTIES 最佳实践

仅使用 Map 键;忽略 Map 值。通过检索传输头,在此 Map 中填入值,这些值对应于传入响应消息中的 Map 键。空 Map 将导致从传入响应消息中检索所有传输头及关联值。

处理时需要特别考虑的 HTTP 头

以下是在发送和获取 HTTP 响应和请求时要特别考虑的 HTTP 头。

这些头中的值可用多种方法设置。例如,有些头值是基于部署描述符或绑定文件中的设置发送的。在这些情况中,通过 REQUEST_TRANSPORT_PROPERTIES 设置的值会覆盖任何其他方式设置的值。

表 1. HTTP 请求和响应头值. 发送和检索 HTTP 响应和请求时要针对 HTTP 头指定的值。
发送请求 检索响应
Transfer-encoding
  • HTTP 1.0 忽略 transfer-encoding 头。
  • 使用 HTTP 1.1 时,如果值为 chunked,那么 transfer-encoding 头设为 chunked
没有特殊处理。
Connection
  • HTTP 1.0 忽略 connection 头。
  • 使用 HTTP 1.1 时,将设置以下值:
    • 如果值设为“close”,那么 connection 头设为“close”。
    • 如果值设为“keep-alive”,那么 connection 头设为“keep-alive”。
    • 忽略所有其他值设置。
没有特殊处理。
Expect
  • HTTP 1.0 忽略 expect 头。
  • 使用 HTTP 1.1 时,将设置以下值:
    • 如果值设为“100-continue”,那么 connection 头设为“100-continue”。
    • 忽略所有其他值设置。
没有特殊处理。
主机 已忽略 没有特殊处理。
Content-type 已忽略 没有特殊处理。
SOAPAction 已忽略 没有特殊处理。
Content-length 已忽略 没有特殊处理。
Cookie

以下是字符串常量:com.ibm.websphere.webservices.Constants.HTTP_HEADER_COOKIE

如果该值构造正确,那么它在头上被发送。请参阅本信息以了解头值格式和 Map 值。 没有特殊处理。
Cookie2

以下是字符串常量:com.ibm.websphere.webservices.Constants.HTTP_HEADER_COOKIE2

请参阅“Cookie”条目中的信息。 没有特殊处理。
Set-cookie

以下是字符串常量:com.ibm.websphere.webservices.Constants.HTTP_HEADER_SET_COOKIE

没有特殊处理。 如果属性 MAINTAIN_SESSION 设为 true,那么值将完整地保存在 SessionContext.CONTEXT_PROPERTY 中,并将在后续请求的 Cookie 头中发送。请参阅本表中的 Cookie 条目以了解更多信息。
Set-cookie2

以下是字符串常量:com.ibm.websphere.webservices.Constants.HTTP_HEADER_SET_COOKIE2

没有特殊处理。 如果属性 MAINTAIN_SESSION 设为 true,那么值将完整地保存在 SessionContext.CONTEXT_PROPERTY 中,并将在后续请求的 Cookie 头中发送。请参阅本表中的 Cookie 条目以了解更多信息。

样本客户机代码

以下示例说明如何编写 Web Service 客户机的代码以发送和检索传输头值:
public class MyApplicationClass {
    // Inject an instance of the service's port-type.
    @WebServiceRef(EchoService.class)
    private EchoPortType port;

    // This method will invoke the web service operation and send and receive transport headers.
    public void invokeService() {

        // Set up the Map that will contain the request headers.
        Map<String, Object>requestHeaders = new HashMap<String, Object>();
        requestHeaders.put(“Cookie”, “ClientAuthenticationToken=FFEEBBCC”);
        requestHeaders.put(“MyHeaderFlag”, new Boolean(true));

        // Set the Map as a property on the RequestContext.
        BindingProvider bp = (BindingProvider) port;
        bp.getRequestContext().put(com.ibm.websphere.webservices.Constants.REQUEST_TRANSPORT_PROPERTIES, requestHeaders);

        // Set up the Map to retrieve transport headers from the response message.
        Map<String, Object>responseHeaders = new HashMap<String, Object>();
        responseHeaders.put(“Set-Cookie”, null);
        responseHeaders.put(“MyHeaderFlag, null);

        // Invoke the web services operation.
        String result = port.echoString(“Hello, world!”);

        // Retrieve the headers from the response.
        String cookieValue = responseHeaders.get(“Set-Cookie”);
        String headerFlag = responseHeaders.get(“MyHeaderFlag”);
    }
}

指示主题类型的图标 参考主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rwbs_transportheaderproperty
文件名:rwbs_transportheaderproperty.html