Подтвердить что ты не робот

Com.sun.xml.internal.ws.client не существует

Я пытаюсь поймать ClientTransportException и моя программа выходит из строя на этапе компиляции со следующим исключением

[ERROR]\workspace\rates\java\service\bundle1\src\main\java\com\connector\ws\TestClass1.java:[72,70] package com.sun.xml.internal.ws.client does not exist

Как я знаю, этот пакет из rt.jar и существует в jre

Если я добавлю @SuppressWarnings ( "ограничение" ), он компилируется из плагина Eclipse Maven, но не из IntelliJ Idea (через maven) или в командную строку.

Когда я удаляю @SuppressWarnings, Eclipse показывает следующее предупреждение

Access restriction: The type ClientTransportException is not accessible due to restriction on required library C:\Program Files\Java\jre6\lib\rt.jar

Я нашел аналогичный question, но ответ на этот вопрос не достаточно ясен для меня, потому что я могу этот класс в rt.jar, и моя идея IntelliJ может видеть это тоже.

Может кто-нибудь объяснить такое поведение и возможное решение для него?

4b9b3361

Ответ 1

В соответствии с этим FAQ это плохая практика для прямого вызова пакетов "sun". Когда я столкнулся с одной и той же проблемой, она была исправлена ​​путем ловли javax.xml.ws.WebServiceException вместо этого (как было сказано artbristol).

Ответ 2

Вы можете избавиться от этой ошибки, используя:

javac -XDignore.symbol.file=true

Для объяснения вы должны прочитать эту интересную статью.

Ответ 3

Даже в 2015 году я нашел много проектов, которые используют эту плохую практику импорта пакетов com.sun.*.

Если вы (как я) не можете изменить классы, импортирующие эти пакеты, добавление rt.jar к вашему пути к классам должно сделать трюк.

Обратите внимание, что указанный rt.jar обычно находится в папке <jdk_home>/jre/lib.

Ответ 4

Библиотека Jre System ограничивает доступ некоторых пакетов к компилятору, в то время как они доступны JDK. В этом случае ошибки не будет, но при компиляции он будет показывать ошибки, такие как класс не найден или пакет не найден.

В этом случае есть две практики. 1) Добавьте rt.jar из jre системной библиотеки в свой путь сборки для компиляции и сборки. 2) Добавьте jaxws-rt.jar в свой путь сборки.

Второй вариант является хорошим вариантом, так как он не позволит добавлять дубликаты библиотек в ваш путь сборки.

Ответ 5

Даже у меня была такая же проблема в моем проекте maven. Я импортировал import com.sun.xml.internal.ws.client.ResponseContext; в одном из файлов классов, но это не использовалось. Я просто прокомментировал строку в своем файле класса, и ошибка остановилась, и я смог успешно запустить проект maven.

Ответ 6

Нельзя использовать пакеты com.sun.*. Мы могли бы решить проблему, используя вместо этого наш собственный класс:

/**
 * Copy of com.sun.xml.internal.ws.client.BindingProviderProperties since we're
 * not allowed to use com.sun.* packages..     
 */
public final class BindingProviderProperties {
    public static final java.lang.String CONNECT_TIMEOUT = "com.sun.xml.internal.ws.connect.timeout";
    public static final java.lang.String REQUEST_TIMEOUT = "com.sun.xml.internal.ws.request.timeout";
}