商讯信箱
用户名: @
密  码:   注册|忘记密码
登录
个人用户经销商
您的位置:首页 > 技术频道 > 正文


三、在JAX-WS中的快速信息集

    JAX-WS通过检查标准的HTTP头的Accept和Content-Type字段来支持快速信息集。在默认情况下,所有的JAX-WS Web Services的快速信息集都是打开的(通过服务运行时实现)。为了在信息交换中使用快速信息集,客户端必须明确指出客户端运行时有支持快速信息集文档的能力。我们可以通过向服务端发送一个以标准的XML格式编码的初始化请求,这个请求包括了HTTP Accept字段,它的值为MIME类型的application/fastinfoset。在发送初始化请求后,所有的客户端和服务端的数据规范都将以快速信息集格式编码,只要客户端继续使用同一个BindingProvider对象实例就会一直保持这种状态。

    在JAX-WS中,我们可以用两种方法来完成上述的约定:

1. 在客户端的JVM中设置系统属性。

2. 在binding provider对象(一个端口协议和委派)中设置属性。

    不管使用哪种方法,都需要指定属性名" com.sun.xml.ws.client.ContentNegotiation"和它的值"pessimistic"。在JAX-WS2.0中为了描述属性名,还在com.sun.xml.ws.developer.JAXWSProperties接口中定义了一个常量,CONTENT_NEGOTIATION_PROPERTY。但这个常量在以后的JAX-WS版本中并不建议使用。

    在这里我们使用第一种方法(也就是设置系统属性),我们可以通过如下的命令行来运行Web service客户端:
 
          java –Dcom.sun.xml.ws.client.ContentNegotiation=pessimistic ...
 
    下面的代码段显示了如何使用Ant来运行Web Sevice客户端:

<target name="run"> <java fork="true" classname="${client}"> <classpath> <path refid="client.classpath"/> <pathelement location="${build.classes.home}"/> <pathelement location="${basedir}/conf"/> </classpath> <sysproperty key="com.sun.xml.ws.client.ContentNegotiation" value="pessimistic"/> <arg value="${isbn}"/> </java> </target>
我们还可以通过第二种方法(也就是设置binding provider对象的方法)来达到同样的目的:
CatalogPortType port = service.getCatalogPort(); ((BindingProvider) port).getRequestContext().put(JAXWSProperties.CONTENT_NEGOTIATION_PROPERTY, "pessimistic"); //((BindingProvider) port).getRequestContext().put("com.sun.xml.ws.client.ContentNegotiation", "pessimistic");
    上面的例子使用了一个端口协议。如果我们正在使用一个Dispatch实例,我们可以再次转换它,以得到一个请求上下文,并设置相应的属性来开启数据传输规范。这是因为在JAX-WS中的Dispatch实例也是一个BindingProvider
1 2 3 4
©版权所有。未经许可,不得转载。
[责任编辑:李宁]
[an error occurred while processing this directive]