我们可以使用jaxws-rt.jar作为运行时实现,虽然它包含sun库吗?

时间:2016-04-30 04:52:44

标签: java web-services tomcat jax-ws

许多人建议不要出于各种原因使用sun个包。提供了详细的答案here

但是我使用的是使用sun库的jaxws-rt.jar

我想知道我是否应该jaxws-rt.jar。我在tomcat容器中运行,我不想包含Jboss,GlassFish或任何其他应用程序服务器的jaxws实现。

以下是我要做的事情(设置连接和请求超时)

import com.sun.xml.internal.ws.client.BindingProviderProperties;
import javax.xml.ws.BindingProvider;

((BindingProvider)soapService).getRequestContext()
        .put(BindingProviderProperties.REQUEST_TIMEOUT,REQUEST_TIMEOUT_MILLI);
((BindingProvider)soapService).getRequestContext()
        .put(BindingProviderProperties.CONNECT_TIMEOUT,CONNECT_TIMEOUT_MILLI);

由于

2 个答案:

答案 0 :(得分:2)

正如您所发现的,某些行为(例如连接超时)是通过特定于实现的方式进行控制的。

如果你不热衷于编译(导入)com.sun包,那么一种方法可以删除编译时依赖项,还可以设置这些属性来控制JAX-WS参考实现,就像你需要的那样,您可以尝试通过string values为参考实现设置BindingProvider请求上下文属性。即使在与RI之外的其他JAX-WS运行时运行时,您也可以设置这些属性 - 它不会失败(它可能没有任何效果)。

import javax.xml.ws.BindingProvider;

((BindingProvider)soapService).getRequestContext()
    .put("com.sun.xml.ws.request.timeout", 5000L);
((BindingProvider)soapService).getRequestContext()
    .put("com.sun.xml.ws.connect.timeout", 5000L);

以下是您问题中两个常量的两个值。 JAXWSProperties.CONNECT_TIMEOUTBindingProviderProperties.REQUEST_TIMEOUT

答案 1 :(得分:1)

这是一种误解。

  

即使它包含sun个库?

它不包含sun个库。它指的是一个com.sun库。那是完全不同的事情。两件完全不同的事情。

  

由于各种原因,许多人建议不要[使用] sun包。

只有一项推荐重要,而且是Note about sun.* packages。其中的有效判决是:

  

包含对sun。*包的直接调用的程序不是100%Pure Java。

sun.*包当然是出于某种原因,那就是为JDK 中的各种事物提供实现。如果这是您的程序对这些类的唯一用途,特别是如果您的代码不包含“直接调用sun.*包”,则无需担心。