Многие рекомендуют не использовать пакеты sun по разным причинам. Подробные ответы представлены здесь.

Однако я использую jaxws-rt.jar, который использует библиотеку sun.

Мне интересно, стоит ли мне jaxws-rt.jar или нет. Я работаю в контейнере tomcat и не хочу включать реализации jaxws для Jboss, GlassFish или любых других серверов приложений.

Вот что я пытаюсь сделать (установка соединения и таймаутов запросов)

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);

Благодарность

1
brain storm 30 Апр 2016 в 07:52

2 ответа

Лучший ответ

Как вы обнаружили, определенное поведение (например, тайм-ауты соединения) контролируется средствами, зависящими от реализации.

Если вы не хотите компилировать (импортировать) пакеты com.sun, то вы можете попробовать просто удалить зависимости времени компиляции, но при этом установить эти свойства для управления эталонной реализацией JAX-WS. установка свойств контекста запроса 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 и BindingProviderProperties.REQUEST_TIMEOUT.

2
Scott Heaberlin 1 Май 2016 в 10:19

Это недоразумение.

даже если он включает библиотеки sun?

Он не «включает sun библиотеки». Это относится к библиотеке com.sun. Это совсем другое дело. Две совершенно разные вещи.

Многие рекомендуют не [использовать] sun пакеты по разным причинам.

Есть только одна рекомендация, которая имеет значение, и это Примечание о солнце . * пакеты. Действующее предложение в этом:

Программы, содержащие прямые обращения к пакетам sun. *, Не являются на 100% чистой Java.

Пакеты sun.* существуют, конечно, по какой-то причине, а именно для обеспечения реализации различных вещей в JDK . Если это единственное использование в вашей программе этих классов, и особенно если ваш код не содержит «прямых вызовов пакетов sun.*», вам не о чем беспокоиться.

1
Marquis of Lorne 1 Май 2016 в 10:56