我们可以使用 jaxws-rt.jar 作为运行时实现,尽管它包含 sun 库吗?
can we use jaxws-rt.jar as runtime implementation though it includes sun libraries?
许多人出于各种原因建议不要使用 sun
包。提供了详细的答案 here.
但是我使用的是 jaxws-rt.jar
,它使用 sun 库。
我在想我是否应该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);
谢谢
如您所见,某些行为(例如连接超时)是通过特定于实现的方式来控制的。
如果您不热衷于针对(导入)com.sun
包进行编译,一种删除编译时依赖项但设置这些属性以按照您需要的方式控制 JAX-WS 参考实现的方法,您可以尝试通过 string values 为参考实现设置 BindingProvider
请求上下文属性。即使 运行 其他 JAX-WS 运行时而不是 RI,您也可以设置这些属性 - 它不会失败(它可能没有效果)。
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 and BindingProviderProperties.REQUEST_TIMEOUT。
这是误会。
even though it includes sun
libraries?
它没有 'include sun
libraries'。它 引用 一个 com.sun
库。那是完全不同的事情。两个完全不同的东西。
Many recommend not to [use] sun
packages for various reasons.
只有一项推荐很重要,那就是 Note about sun.* packages。其中的执行语句是:
Programs that contain direct calls to the sun.* packages are not 100% Pure Java.
sun.*
包当然是有原因的,那就是为 JDK 中的各种事物提供实现。如果这是您的程序对这些 类 的唯一用途,特别是如果您的代码不包含 'direct calls to the sun.*
packages',则您无需担心任何事情。
许多人出于各种原因建议不要使用 sun
包。提供了详细的答案 here.
但是我使用的是 jaxws-rt.jar
,它使用 sun 库。
我在想我是否应该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);
谢谢
如您所见,某些行为(例如连接超时)是通过特定于实现的方式来控制的。
如果您不热衷于针对(导入)com.sun
包进行编译,一种删除编译时依赖项但设置这些属性以按照您需要的方式控制 JAX-WS 参考实现的方法,您可以尝试通过 string values 为参考实现设置 BindingProvider
请求上下文属性。即使 运行 其他 JAX-WS 运行时而不是 RI,您也可以设置这些属性 - 它不会失败(它可能没有效果)。
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 and BindingProviderProperties.REQUEST_TIMEOUT。
这是误会。
even though it includes
sun
libraries?
它没有 'include sun
libraries'。它 引用 一个 com.sun
库。那是完全不同的事情。两个完全不同的东西。
Many recommend not to [use]
sun
packages for various reasons.
只有一项推荐很重要,那就是 Note about sun.* packages。其中的执行语句是:
Programs that contain direct calls to the sun.* packages are not 100% Pure Java.
sun.*
包当然是有原因的,那就是为 JDK 中的各种事物提供实现。如果这是您的程序对这些 类 的唯一用途,特别是如果您的代码不包含 'direct calls to the sun.*
packages',则您无需担心任何事情。