Com.sun.xml.internal.ws.developer.JAXWSProperties не найден при компиляции

Мы использовали класс JAXWSProperties из пакета com.sun.* в коде, чтобы установить такие свойства таймаута, как это:

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?

Ответ 1

У меня была почти такая же проблема при конвертации одного из наших проектов для запуска под Maven.

Решение, которое я нашел, на самом деле не является идеальным решением, на самом деле это скорее "cludge", чем "fix", хотя оно выполняется через компилятор OK. Как и вы, я немного поработал над этой проблемой и нашел комментарий от 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);

Как я уже упоминал, это не идеально, и не может быть гарантировано работать в будущих выпусках компилятора, поэтому используйте с осторожностью.