许多人建议不要出于各种原因使用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);
由于
答案 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_TIMEOUT和BindingProviderProperties.REQUEST_TIMEOUT。
答案 1 :(得分:1)
这是一种误解。
即使它包含
sun
个库?
它不包含sun
个库。它指的是一个com.sun
库。那是完全不同的事情。两件完全不同的事情。
由于各种原因,许多人建议不要[使用]
sun
包。
只有一项推荐重要,而且是Note about sun.* packages。其中的有效判决是:
包含对sun。*包的直接调用的程序不是100%Pure Java。
sun.*
包当然是出于某种原因,那就是为JDK 中的各种事物提供实现。如果这是您的程序对这些类的唯一用途,特别是如果您的代码不包含“直接调用sun.*
包”,则无需担心。