【问题标题】:com.sun.xml.internal.ws.developer.JAXWSProperties not found at compilecom.sun.xml.internal.ws.developer.JAXWSProperties 在编译时找不到
【发布时间】:2011-11-13 14:18:20
【问题描述】:

我们在代码中使用了 com.sun.* 包中的 JAXWSProperties 类来设置超时属性,如下所示:

import com.sun.xml.internal.ws.developer.JAXWSProperties;
...
Map<String, Object> ctxt = ((BindingProvider) port).getRequestContext();
ctxt.put(JAXWSProperties.CONNECT_TIMEOUT, 10000);

它在本地 Eclipse 中编译得很好,但在持续集成系统上却不能编译(都使用 JDK 1.6)。通过研究这个问题,我了解到应该避免使用 com.sun.* 包。

所以我的问题是:

  • 编译时导入失败的原因是什么?
  • 应该使用什么来代替JAXWSProperties

【问题讨论】:

  • Eclipse 使用它自己的编译器。您是否尝试过在不使用 eclipse 的情况下在本地计算机上编译应用程序?这会在您的 CI 服务器上重现问题吗?
  • @flob 好点,谢谢。你是对的,它也不起作用。那么,谁能告诉我,为什么这个包是 JDK 中 rt.jar 的一部分,但编译器却找不到?

标签: jax-ws java


【解决方案1】:

在将我们的一个项目转换为在 Maven 下运行时,我遇到了几乎相同的问题。

我找到的解决方案并不是真正的理想解决方案,实际上它更像是一个“杂物”而不是“修复”,尽管它确实可以通过编译器运行。和你一样,我对这个问题做了一些研究,发现 Sun 的评论说这些包对编译器是隐藏的,但对 JVM 是可用的。

所以,我找到的解决方案是简单地找到常量指向的字符串,并在本地使用它。

在你的情况下是:

final static String CONNECT_TIMEOUT = "com.sun.xml.internal.ws.connect.timeout";
....
Map<String, Object> ctxt = ((BindingProvider) port).getRequestContext();
ctxt.put(CONNECT_TIMEOUT, 10000);

正如我所提到的,这并不理想,并且不能保证在未来的编译器版本中也能正常工作,因此请谨慎使用。

【讨论】:

  • 感谢您的信息,尽管您说这更像是一个杂物,但它仍然有助于解决问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-10
  • 2018-09-25
相关资源
最近更新 更多