Ответ 1
В соответствии с этим FAQ это плохая практика для прямого вызова пакетов "sun". Когда я столкнулся с одной и той же проблемой, она была исправлена путем ловли javax.xml.ws.WebServiceException
вместо этого (как было сказано artbristol).
Я пытаюсь поймать 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 может видеть это тоже.
Может кто-нибудь объяснить такое поведение и возможное решение для него?
В соответствии с этим FAQ это плохая практика для прямого вызова пакетов "sun". Когда я столкнулся с одной и той же проблемой, она была исправлена путем ловли javax.xml.ws.WebServiceException
вместо этого (как было сказано artbristol).
Вы можете избавиться от этой ошибки, используя:
javac -XDignore.symbol.file=true
Для объяснения вы должны прочитать эту интересную статью.
Даже в 2015 году я нашел много проектов, которые используют эту плохую практику импорта пакетов com.sun.*
.
Если вы (как я) не можете изменить классы, импортирующие эти пакеты, добавление rt.jar
к вашему пути к классам должно сделать трюк.
Обратите внимание, что указанный rt.jar
обычно находится в папке <jdk_home>/jre/lib
.
Библиотека Jre System ограничивает доступ некоторых пакетов к компилятору, в то время как они доступны JDK. В этом случае ошибки не будет, но при компиляции он будет показывать ошибки, такие как класс не найден или пакет не найден.
В этом случае есть две практики. 1) Добавьте rt.jar из jre системной библиотеки в свой путь сборки для компиляции и сборки. 2) Добавьте jaxws-rt.jar в свой путь сборки.
Второй вариант является хорошим вариантом, так как он не позволит добавлять дубликаты библиотек в ваш путь сборки.
Даже у меня была такая же проблема в моем проекте maven. Я импортировал
import com.sun.xml.internal.ws.client.ResponseContext;
в одном из файлов классов, но это не использовалось.
Я просто прокомментировал строку в своем файле класса, и ошибка остановилась, и я смог успешно запустить проект maven.
Нельзя использовать пакеты 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";
}