偶是测试新手,希望前辈们能多多指教。

在JAX-WS中的快速信息集

上一篇 / 下一篇  2009-05-05 14:10:26 / 个人分类:与WebService相关技术

   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客户端:

<targetname="run"><javafork="true"classname="${client}"><classpath><pathrefid="client.classpath"/><pathelementlocation="${build.classes.home}"/><pathelementlocation="${basedir}/conf"/></classpath><syspropertykey="com.sun.xml.ws.client.ContentNegotiation"value="pessimistic"/><argvalue="${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

TAG:

 

评分:0

我来说两句

Open Toolbar