Библиотеки NetBeans содержат другой JAR / класс, чем указано в - PullRequest
1 голос
/ 21 июля 2011

Я пытался следовать Приступая к работе с веб-службами JAX-WS .У меня было много проблем, потому что у JDK 6 есть JAX-WS 2.1, но у METRO есть JAX-WS 2.2.Таким образом, после долгих поисков я обнаружил, что существует нечто, называемое « одобрено ».Я пытаюсь работать с Apache, и я узнал о столкновении JAX-WS (см. Гиперссылку PS2 3).Теперь у меня есть одобренная папка с двумя файлами .jar: «C: \ Program Files \ Java \ jdk1.6.0_21 \ jre \ lib \ endorsed», содержащая «jaxb-api.jar» и «jaxws-api.jar»,И, наконец, все, казалось, работало, но, к сожалению, только для «серверного приложения».После долгих поисков и копирования разных файлов в одобренную папку и снова и снова ... ... я начал думать, что с Netbeans что-то не так, а не глупо.Поэтому я скачал декомпилятор java (см. Гиперссылку PS2 4) и посмотрел jar-файлы в одобренной папке.Кстати, ошибки, которые я получаю в Netbeans, заключаются в том, что javax.xml.ws.Service также не содержит следующий конструктор:

protected Service(URL wsdlDocumentLocation, QName serviceName, WebServiceFeature[] features)

, но только следующий конструктор:

protected Service(URL wsdlDocumentLocation, QName serviceName)

Я установил в netbeans, чтобы он содержал два jar-файла в одобренной папке, но когда я раскрываю их и открываю класс 'Service', конструктор с 3 аргументами не появляется.НО (здесь происходит странная часть), когда я декомпилирую службу классов в файле jar "jaxws-api.jar" в утвержденном файле, он содержит этот конструктор.

Таким образом, netbeans не использует файл jarссылка на библиотеку?Или что происходит (и что более важно, как я могу это исправить)?

Я проверил, где находится класс, с помощью "Service.class.getClassLoader ()" (вставил его откуда-то, что не могу вспомнить):

System.out.println(System.getProperty("java.endorsed.dirs"));
final URL location;
final String classLocation = Service.class.getName().replace('.', '/') + ".class";
final ClassLoader loader = Service.class.getClassLoader();
if(loader == null){
    System.out.println("Cannot load the class");
}else{
    location = loader.getResource(classLocation);
    System.out.println("Class " + location);
}

Но это дает мне вывод: "C: \ Program Files \ Java \ jdk1.6.0_21 \ jre \ lib \ endorsed" и во второй строке "Не удается загрузить класс".Поэтому во время работы он не может загрузить класс, но NetBeans показывает в окне своих проектов в proyect-> Библиотеки, когда я расширяю библиотеку, содержащую «одобренные jar-файлы», до класса Service, который там находится.И когда я открываю его, я не получаю ошибки, только не файл, содержащий правильный конструктор

Подводя итог: я думаю, что netbeans игнорирует файл jar, который я ему говорю, и где-то получает свой собственный файл jar, ноне показывать это мне ...

PS: некоторые спецификации

Версия продукта: NetBeans IDE 7.0 (сборка 201104080000) Java: 1.6.0_21;Java HotSpot (TM) 64-разрядный сервер ВМ 17.0-b17 Система: Windows 7 версии 6.1, работающая на amd64;Тесты с Apache Tomcat 7.0.11 (я не думаю, что это имеет какое-либо применение)

Надеюсь разгадать эту тайну, Tjen

PS2: я могу опубликовать только 2 гиперссылки, так что здесь число3 и 4 (включая ваши собственные http://):

3: weblogs.java.net/blog/ramapulavarthi/archive/2009/04/tip_for_using_j.html

4: java.decompiler.free.fr/? д = jdgui

...