Muszę skorzystać z usługi internetowej w moim projekcie. Korzystam z NetBeans, więc kliknąłem prawym przyciskiem myszy mój projekt i próbowałem dodać nowego „klienta usług sieciowych”. Ostatnim razem, gdy sprawdzałem, był to sposób na utworzenie klienta usługi internetowej. Ale to spowodowało błąd AssertionError, mówiąc:
java.lang.AssertionError: org.xml.sax.SAXParseException; systemId: jar: file: /path/to/glassfish/modules/jaxb-osgi.jar! /com/sun/tools/xjc/reader/xmlschema/bindinfo/binding.xsd; lineNumber: 52; columnNumber: 88; schema_reference: Nie można odczytać dokumentu schematu „ xjc.xsd ”, ponieważ dostęp do „pliku” jest niedozwolony z powodu ograniczeń ustawionych przez właściwość accessExternalSchema .
Domyślną platformą Java dla NetBeans był JDK8 (oficjalna wersja Oracle), więc kiedy zmieniłem mój plik netbeans.conf i ustawiłem JDK7 (również z Oracle) jako moją domyślną, wszystko działało dobrze. Myślę więc, że problem dotyczy JDK8. Oto mój java -version
wynik:
Wersja Java „1.8.0”
Środowisko wykonawcze Java (TM) SE (kompilacja 1.8.0-b132
) 64-bitowa maszyna wirtualna serwera Java HotSpot (TM) (kompilacja 25.0-b70, tryb mieszany)
Na razie zachowuję JDK7 jako moją domyślną platformę Java. Jeśli istnieje sposób, aby JDK8 działał, udostępnij.
Odpowiedzi:
Znalazłem rozwiązanie. (na podstawie http://docs.oracle.com/javase/7/docs/api/javax/xml/XMLConstants.html#ACCESS_EXTERNAL_SCHEMA )
Utwórz plik o nazwie
jaxp.properties
(jeśli nie istnieje) pod,/path/to/jdk1.8.0/jre/lib
a następnie zapisz w nim ten wiersz:To wszystko. Ciesz się JDK 8.
źródło
/path/to/jdk1.8.0/lib
innymjre
katalogu.Nie rzeczywista odpowiedź, ale raczej jako odniesienie.
Jeśli korzystasz z wtyczki Javenws Maven i pojawia się ten sam komunikat o błędzie, dodaj wspomnianą właściwość do konfiguracji wtyczki:
źródło
accessExternalSchema=all
Wartość jest ustawiona domyślnie, jeśli używasz nowsze wersje (jak 0.12.3) zorg.jvnet.jaxb2.maven2:maven-jaxb2-plugin
wtyczką.Uruchamiam kompilacje mrówek w środowisku Eclipse IDE (4.4, Luna, na Windows 7 x64). Zamiast modyfikować zainstalowane biblioteki JRE lub jakiekolwiek skrypty Ant (mam wiele projektów, które zawierają XJC w swoich kompilacjach), wolę zmienić Ustawienia Eclipse „Konfiguracje narzędzi zewnętrznych” i dodać następujące argumenty do argumentów VM dla konfiguracji kompilacji Ant:
źródło
Następujące prace dla wsimport 2.2.9 zawarte w jdk 1.8.0_66:
źródło
wsimport
bezpośrednim użyciu .W moim przypadku dodanie:
do jaxp.properties nie działało, muszę dodać:
Moje środowisko to linux mint 17 i java 8 oracle. Przedstawię to jako odpowiedź dla osób z tym samym problemem.
źródło
Przetestowałem to dla wersji 2.4 artefaktu org.codehaus.mojo i działało ~
źródło
-Djavax.xml.accessExternalSchema=all
jest skonfigurowany w deklaracji wtyczki. Jest to omówione w Netbeans Bug 244891Oto wskazówka Wskazówka dla stopniowych użytkowników bez uprawnień administratora: dodaj tę linię do zadania jaxb:
będzie to wyglądać tak:
źródło
Jeśli ten problem występuje podczas konwertowania wsdl do jave za pomocą wtyczki cxf-codegen , możesz go rozwiązać, konfigurując wtyczkę do rozwidlenia i udostępniając dodatkową opcję JVM „-Djavax.xml.accessExternalSchema = all”.
źródło
Otrzymałem również podobny typ błędu w Eclipse podczas testowania programu webservice na serwerze glassfish 4.0:
java.lang.AssertionError: org.xml.sax.SAXParseException; systemId: bundle://158.0:1/com/sun/tools/xjc/reader/xmlschema/bindinfo/binding.xsd; lineNumber: 52; columnNumber: 88; schema_reference: Failed to read schema document 'xjc.xsd', because 'bundle' access is not allowed due to restriction set by the accessExternalSchema property.
Dodałem
javax.xml.accessExternalSchema = All
wjaxp.properties
, ale praca doesnot dla mnie.Jednak znalazłem tutaj rozwiązanie, które działa dla mnie: W przypadku GlassFish Server muszę zmodyfikować
domain.xml
GlassFish, ścieżka:<path>/glassfish/domains/domain1
lubdomain2/config/domain.xml
) i dodać<jvm-options>-Djavax.xml.accessExternalSchema=all</jvm-options>
pod<java-config>
tagiem<java-config> ... <jvm-options>-Djavax.xml.accessExternalSchema=all</jvm-options> </java-config>
... a następnie ponownie uruchom serwer GlassFishźródło
Włączanie dostępu do schematu zewnętrznego
Musisz włączyć IDE i serwer GlassFish, aby uzyskać dostęp do zewnętrznego schematu w celu parsowania pliku WSDL usługi internetowej. Aby umożliwić dostęp, musisz zmodyfikować pliki konfiguracyjne IDE i GlassFish Server. Aby uzyskać więcej informacji, zobacz często zadawane pytania Jak włączyć parsowanie WSDL za pomocą zewnętrznego schematu? Konfigurowanie IDE
Aby wygenerować klienta usług WWW w IDE z usługi internetowej lub pliku WSDL, należy zmodyfikować plik konfiguracyjny IDE (netbeans.conf), aby dodać następujący przełącznik do opcji netbeans_default_options.
Aby uzyskać więcej informacji na temat lokalizowania i modyfikowania pliku konfiguracyjnego netbeans.conf, zobacz Często zadawane pytania dotyczące Conf Netbeans. Konfigurowanie serwera GlassFish
W przypadku wdrażania na serwerze GlassFish należy zmodyfikować plik konfiguracyjny serwera GlassFish (domain.xml), aby umożliwić serwerowi dostęp do schematów zewnętrznych w celu analizy pliku WSDL i wygenerowania klienta testowego. Aby umożliwić dostęp do schematów zewnętrznych, otwórz plik konfiguracyjny GlassFish (GLASSFISH_INSTALL / glassfish / domains / domain1 / config / domain.xml) i dodaj następujący element opcji JVM (pogrubiony). Konieczne będzie zrestartowanie serwera, aby zmiana zaczęła obowiązywać.
źródło
Korzystając z Maven z IntelliJ IDE, możesz dodać
-Djavax.xml.accessExternalSchema=all
ustawienie Maven w Opcjach JVM dla konfiguracji narzędzia Run Maven Build Toolsźródło
Działa to na jdk1.8.0_65
źródło
Dla tych, którzy korzystają z zadania ANT
wsimport
, sposób przekazania opcji sugerowany przez @CMFly i określony w dokumentacji jest następujący:źródło
Zostało to naprawione w wersji 2.5 (wydanej w lipcu / 17). https://github.com/mojohaus/jaxws-maven-plugin/issues/8 .
W przypadku wersji 2.4.x istnieje obejście (jak opisano w https://github.com/mojohaus/jaxws-maven-plugin/issues/4 ):
źródło
Użyłem go ze zwykłym projektem maven i rozwiązałem go dzięki tej konfiguracji zależności wtyczki do uruchamiania
xjc plugin
:źródło
jaxws-maven-plugin
do wersji 2.5, jak podano w innych odpowiedziach mojohaus.org/jaxws-maven-plugin/usage.html Ale nadal najlepsza odpowiedź w moim przypadku, dziękuję!Utwórz plik o nazwie
jaxp.properties
(jeśli nie istnieje) pod ścieżką do „wersji JDK / jre / lib”, a następnie dodaj w nim następujący wiersz:źródło
Inne rozwiązanie do rozwiązania: wiki.netbeans.org
Kreator klienta usług WWW w IDE analizuje plik WSDL podczas generowania klienta usług WWW z usługi internetowej lub pliku WSDL. Musisz zmodyfikować plik konfiguracyjny IDE (netbeans.conf), aby dodać następujący przełącznik do opcji netbeans_default_options. Konieczne będzie ponowne uruchomienie IDE, aby zmiana zaczęła obowiązywać.
Podczas wdrażania w GlassFish musisz włączyć dostęp do schematu zewnętrznego, aby wygenerować klienta testowego dla usługi sieciowej. Aby umożliwić dostęp, musisz zmodyfikować plik konfiguracyjny serwera GlassFish (GLASSFISH_INSTALL / glassfish / domains / domain1 / config / domain.xml) i dodać następujący element opcji JVM. Konieczne będzie zrestartowanie serwera, aby zmiana zaczęła obowiązywać.
źródło
Jeśli używasz ant, możesz dodać jvmarg do swoich wywołań Java:
źródło
Bardzo prostym przenośnym rozwiązaniem byłoby umieszczenie następującego wiersza kodu gdzieś w kluczowej części kodu, którego część jesteś pewien, że zostanie on uruchomiony (na przykład bezpośrednio w metodzie głównej):
To ustawia potrzebną właściwość systemową programowo, bez konieczności wprowadzania skomplikowanych zmian pom.xml maven (co z jakiegoś powodu nie działało dla mnie).
źródło
Właśnie próbowałem, że jeśli używasz
SoapUI (5.4.x)
i użycieApache CXF
narzędzia do generowania kodu java, umieścićjavax.xml.accessExternalSchema = all
wYOUR_JDK/jre/lib/jaxp.properties
pliku działa również.źródło
Inną alternatywą jest aktualizacja skryptu powłoki wsimport.sh poprzez dodanie następujących elementów:
Plik wsimport.sh znajduje się w tym katalogu:
jaxws-ri.2.2.28 / bin
exec "$ JAVA" $ WSIMPORT_OPTS -Djavax.xml.accessExternalSchema = all -jar "$ JAXWS_HOME / lib / jaxws-tools.jar" "$ @"
źródło
Inne odniesienie: Jeśli korzystasz z
maven-jaxb2-plugin
wersji wcześniejszej niż 0.9.0, możesz skorzystać z obejścia opisanego w tym problemie , w którym to zachowanie wpłynęło na wtyczkę.źródło
NetBeans aktualizuje samouczek dla JDK8 i tego problemu:
Rozpoczęcie pracy z usługami internetowymi JAX-WS -> Włączanie dostępu do schematu zewnętrznego
źródło