Ich muss einen Webdienst in meinem Projekt verwenden. Ich verwende NetBeans, habe also mit der rechten Maustaste auf mein Projekt geklickt und versucht, einen neuen "Web Service Client" hinzuzufügen. Als ich das letzte Mal nachgesehen habe, war dies der Weg, um einen Webdienst-Client zu erstellen. Aber es führte zu einem AssertionError, der sagte:
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: Fehler beim Lesen des Schemadokuments ' xjc.xsd ', da der Zugriff auf 'Datei' aufgrund der durch die Eigenschaft accessExternalSchema festgelegten Einschränkung nicht zulässig ist .
Die Standard-Java-Plattform für NetBeans war JDK8 (die offizielle Version von Oracle). Als ich also meine Datei netbeans.conf änderte und JDK7 (auch von Oracle) als meine Standardversion verwendete, funktionierte alles einwandfrei. Ich denke, das Problem liegt bei JDK8. Hier ist meine java -version
Ausgabe:
Java-Version "1.8.0"
Java (TM) SE-Laufzeitumgebung (Build 1.8.0-b132)
Java HotSpot (TM) 64-Bit-Server-VM (Build 25.0-b70, gemischter Modus)
Im Moment behalte ich JDK7 als meine Standard-Java-Plattform. Wenn es eine Möglichkeit gibt, JDK8 zum Laufen zu bringen, teilen Sie diese bitte mit.
Antworten:
Nun, ich habe die Lösung gefunden. (basierend auf http://docs.oracle.com/javase/7/docs/api/javax/xml/XMLConstants.html#ACCESS_EXTERNAL_SCHEMA )
Erstellen Sie eine Datei mit dem Namen
jaxp.properties
(falls nicht vorhanden) unter/path/to/jdk1.8.0/jre/lib
und schreiben Sie diese Zeile hinein:Das ist alles. Viel Spaß mit JDK 8.
quelle
/path/to/jdk1.8.0/lib
nicht unter das weiterejre
Verzeichnis stellen.Keine tatsächliche Antwort, sondern eher als Referenz.
Wenn Sie das jaxws Maven-Plugin verwenden und dieselbe Fehlermeldung erhalten, fügen Sie der Plugin-Konfiguration die erwähnte Eigenschaft hinzu:
quelle
accessExternalSchema=all
Wert wird standardmäßig festgelegt, wenn Sie spätere Versionen (wie 0.12.3) desorg.jvnet.jaxb2.maven2:maven-jaxb2-plugin
Plugins verwenden.Ich führe Ant Builds in Eclipse IDE (4.4, Luna, unter Windows 7 x64) aus. Anstatt die installierte JRE-Bibliothek oder Ant-Skripte zu ändern (ich habe mehrere Projekte, deren Builds XJC enthalten), ziehe ich es vor, die Eclipse-Einstellungen "Externe Tools-Konfigurationen" zu ändern und den VM-Argumenten für die Ant-Build-Konfiguration Folgendes hinzuzufügen:
quelle
Folgendes funktioniert für wsimport 2.2.9, das in jdk 1.8.0_66 enthalten ist:
quelle
wsimport
direkter Verwendung .In meinem Fall hinzufügen:
zu jaxp.properties hat nicht funktioniert, ich muss hinzufügen:
Meine Umgebung ist Linux Mint 17 und Java 8 Orakel. Ich werde es dort als Antwort für Leute mit dem gleichen Problem setzen.
quelle
Ich habe dies für Version 2.4 von Artefakt org.codehaus.mojo getestet und das hat ~ funktioniert
quelle
-Djavax.xml.accessExternalSchema=all
, die in Ihrer Plugin-Deklaration konfiguriert sind. Es wird in Netbeans Bug 244891Hier ist ein Hinweis Hinweis für Gradle-Benutzer ohne Administratorrechte: Fügen Sie diese Zeile zu Ihrer JaxB-Aufgabe hinzu:
es wird so aussehen:
quelle
Wenn Sie dieses Problem beim Konvertieren von wsdl in jave mit dem cxf-codegen-plugin erhalten , können Sie es lösen, indem Sie das Plugin auf fork konfigurieren und die zusätzliche JVM-Option "-Djavax.xml.accessExternalSchema = all" bereitstellen.
quelle
Beim Testen eines Webservice-Programms auf dem Glassfish 4.0-Webserver wurde in Eclipse eine ähnliche Fehlerart angezeigt:
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.
Ich habe hinzugefügt ,
javax.xml.accessExternalSchema = All
injaxp.properties
, aber für mich doesnot Arbeit.Allerdings habe ich hier unten eine Lösung gefunden, die für mich funktioniert: Für GlassFish Server muss ich
domain.xml
den GlassFish-Pfad ändern :<path>/glassfish/domains/domain1
oderdomain2/config/domain.xml
) und<jvm-options>-Djavax.xml.accessExternalSchema=all</jvm-options>
unter dem<java-config>
Tag hinzufügen<java-config> ... <jvm-options>-Djavax.xml.accessExternalSchema=all</jvm-options> </java-config>
... und starten Sie dann den GlassFish-Server neuquelle
Aktivieren des Zugriffs auf ein externes Schema
Sie müssen die IDE und den GlassFish-Server für den Zugriff auf ein externes Schema aktivieren, um die WSDL-Datei des Webdienstes zu analysieren. Um den Zugriff zu aktivieren, müssen Sie die Konfigurationsdateien der IDE und des GlassFish-Servers ändern. Weitere Informationen finden Sie in den FAQ. So aktivieren Sie das Parsen von WSDL mit einem externen Schema. IDE konfigurieren
Um einen Webdienst-Client in der IDE aus einem Webdienst oder einer WSDL-Datei zu generieren, müssen Sie die IDE-Konfigurationsdatei (netbeans.conf) ändern, um den folgenden Schalter zu netbeans_default_options hinzuzufügen.
Weitere Informationen zum Suchen und Ändern der Konfigurationsdatei netbeans.conf finden Sie in den häufig gestellten Fragen zu Netbeans Conf. Konfigurieren des GlassFish-Servers
Wenn Sie auf dem GlassFish-Server bereitstellen, müssen Sie die Konfigurationsdatei des GlassFish-Servers (domain.xml) ändern, damit der Server auf externe Schemas zugreifen kann, um die WSDL-Datei zu analysieren und den Testclient zu generieren. Um den Zugriff auf externe Schemas zu ermöglichen, öffnen Sie die GlassFish-Konfigurationsdatei (GLASSFISH_INSTALL / glassfish / domain / domain1 / config / domain.xml) und fügen Sie das folgende JVM-Optionselement hinzu (fett gedruckt). Sie müssen den Server neu starten, damit die Änderung wirksam wird.
quelle
Wenn Sie Maven mit IntelliJ IDE verwenden, können Sie
-Djavax.xml.accessExternalSchema=all
die Maven-Einstellung unter JVM-Optionen für die Runner-Konfiguration von Maven Build Tools hinzufügenquelle
Dies funktioniert auf jdk1.8.0_65
quelle
Für
wsimport
Benutzer der ANT-Task besteht eine Möglichkeit, die von @CMFly vorgeschlagene und in der Dokumentation angegebene Option zu übergeben :quelle
Es ist jetzt in der Version 2.5 behoben (veröffentlicht in jul / 17). https://github.com/mojohaus/jaxws-maven-plugin/issues/8 .
Für die 2.4.x-Versionen gibt es eine Problemumgehung (wie unter https://github.com/mojohaus/jaxws-maven-plugin/issues/4 beschrieben ):
quelle
Ich habe es mit einem regulären Maven- Projekt verwendet und es mit dieser Plugin-Abhängigkeitskonfiguration gelöst, um Folgendes auszuführen
xjc plugin
:quelle
jaxws-maven-plugin
auf 2.5 aktualisieren , wie in anderen Antworten angegeben. Mojohaus.org/jaxws-maven-plugin/usage.html Aber trotzdem die beste Antwort in meinem Fall, danke!Erstellen Sie eine Datei mit dem Namen
jaxp.properties
(falls nicht vorhanden) unter dem Pfad zu Ihrer "JDK-Version / jre / lib" und fügen Sie diese Zeile hinzu:quelle
Eine weitere Lösung: wiki.netbeans.org
Der Webdienstclient-Assistent in der IDE analysiert die WSDL-Datei, wenn ein Webdienstclient aus einem Webdienst oder einer WSDL-Datei generiert wird. Sie müssen die IDE-Konfigurationsdatei (netbeans.conf) ändern, um den netbeans_default_options den folgenden Schalter hinzuzufügen. Sie müssen die IDE neu starten, damit die Änderung wirksam wird.
Bei der Bereitstellung in GlassFish müssen Sie den Zugriff auf ein externes Schema aktivieren, um einen Testclient für einen Webdienst zu generieren. Um den Zugriff zu aktivieren, müssen Sie die Konfigurationsdatei des GlassFish-Servers (GLASSFISH_INSTALL / glassfish / domain / domain1 / config / domain.xml) ändern und das folgende JVM-Optionselement hinzufügen. Sie müssen den Server neu starten, damit die Änderung wirksam wird.
quelle
Wenn Sie ant verwenden, können Sie Ihren Java-Aufrufen ein jvmarg hinzufügen:
quelle
Eine sehr einfache tragbare Lösung wäre, die folgende Codezeile irgendwo in einem wichtigen Teil Ihres Codes zu platzieren, von dem Sie sicher sind, dass er ausgeführt wird (zum Beispiel direkt in der Hauptmethode):
Dadurch wird die erforderliche Systemeigenschaft programmgesteuert festgelegt, ohne dass schwierige Änderungen an maven pom.xml vorgenommen werden müssen (was aus irgendeinem Grund bei mir nicht funktioniert hat).
quelle
Ich habe gerade versucht, dass, wenn Sie Tool verwenden
SoapUI (5.4.x)
und verwendenApache CXF
, um Java-Code zu generieren, das Einfügenjavax.xml.accessExternalSchema = all
in eineYOUR_JDK/jre/lib/jaxp.properties
Datei auch funktioniert.quelle
Eine andere Alternative besteht darin, das Shell-Skript wsimport.sh zu aktualisieren, indem Folgendes hinzugefügt wird:
Die Datei wsimport.sh befindet sich in diesem Verzeichnis:
jaxws-ri.2.2.28 / bin
exec "$ JAVA" $ WSIMPORT_OPTS -Djavax.xml.accessExternalSchema = all -jar "$ JAXWS_HOME / lib / jaxws-tools.jar" "$ @"
quelle
Ein weiterer Hinweis: Wenn Sie das
maven-jaxb2-plugin
vor Version 0.9.0 verwenden, können Sie die in diesem Problem beschriebene Problemumgehung verwenden , bei der sich dieses Verhalten auf das Plugin auswirkte.quelle
NetBeans aktualisieren ihr Tutorial für JDK8 und dieses Problem:
Erste Schritte mit JAX-WS-Webdiensten -> Aktivieren des Zugriffs auf ein externes Schema
quelle