Frage

Ich muss in meinem Projekt einen Webdienst nutzen.Ich verwende NetBeans, also habe ich 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 die Möglichkeit, einen Webdienst-Client zu erstellen.Aber es führte zu einem AssertionError, der besagte:

java.lang.AssertionError:org.xml.sax.SAXParseException;System-ID:jar:file:/path/to/glassfish/modules/jaxb-osgi.jar!/com/sun/tools/xjc/reader/xmlschema/bindinfo/binding.xsd;Zeilennummer:52;Spaltennummer:88;schema_reference:Das Schemadokument konnte nicht gelesen werden.xjc.xsd', da der Zugriff auf die Datei aufgrund der von der festgelegten Einschränkung nicht zulässig ist accessExternalSchema Eigentum.

Die Standard-Java-Plattform für NetBeans war JDK8 (die offizielle Version von Oracle). Als ich also meine Datei „netbeans.conf“ änderte und JDK7 (ebenfalls von Oracle) als meine Standardplattform festlegte, funktionierte alles einwandfrei.Ich denke also, dass das Problem bei JDK8 liegt.Hier ist mein java -version Ausgabe:

Java-Version „1.8.0“
Java(TM) SE Runtime Environment (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 uns dies bitte mit.

War es hilfreich?

Lösung

Nun, ich habe die Lösung gefunden.(bezogen 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 schreibe dann diese Zeile hinein:

javax.xml.accessExternalSchema = all

Das ist alles.Viel Spaß mit JDK 8.

Andere Tipps

Keine tatsächliche Antwort, sondern eher als Referenz.

Wenn Sie das jaxws Maven-Plugin verwenden und dieselbe Fehlermeldung erhalten, fügen Sie die genannte Eigenschaft zur Plugin-Konfiguration hinzu:

...
<plugin>
  <groupId>org.jvnet.jax-ws-commons</groupId>
  <artifactId>jaxws-maven-plugin</artifactId>
  <version>2.3</version>
  <configuration>
    <!-- Needed with JAXP 1.5 -->
    <vmArgs>
        <vmArg>-Djavax.xml.accessExternalSchema=all</vmArg>
    </vmArgs>
  </configuration>
</plugin>

Ich führe Ant-Builds in der Eclipse-IDE aus (4.4, Luna, unter Windows 7 x64).Anstatt die installierte JRE-Bibliothek oder Ant-Skripte zu ändern (ich habe mehrere Projekte, die XJC in ihren Builds enthalten), ändere ich lieber die Eclipse-Einstellungen „Externe Tools-Konfigurationen“ und füge Folgendes zu den VM-Argumenten für die Ant-Build-Konfiguration hinzu:

-Djavax.xml.accessExternalSchema=all

Folgendes funktioniert für wsimport 2.2.9, der in JDK 1.8.0_66 enthalten ist:

wsimport -J-Djavax.xml.accessExternalSchema=all ....

In meinem Fall füge ich hinzu:

javax.xml.accessExternalSchema = all

zu jaxp.properties hat nicht funktioniert, ich muss hinzufügen:

javax.xml.accessExternalDTD = all

Meine Umgebung ist Linux Mint 17 und Java 8 Oracle.Ich werde es dort als Antwort für Leute mit dem gleichen Problem veröffentlichen.

Ich habe dies für Version 2.4 von Artefakt org.codehaus.mojo getestet und das hat funktioniert ~

<plugins>
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>jaxws-maven-plugin</artifactId>
        <version>2.4.1</version>
        <executions>
            <execution>

                <goals>
                    <goal>wsimport</goal>
                </goals>
                <configuration>
                    <wsdlDirectory>path/to/dir/wsdl</wsdlDirectory>
                </configuration>
                <id>wsimport-web-service</id>
                <phase>generate-sources</phase>
            </execution>
        </executions>
        <dependencies>
            <dependency>
                <groupId>javax.xml</groupId>
                <artifactId>webservices-api</artifactId>
                <version>${webservices-api-version}</version>
            </dependency>
        </dependencies>
        <configuration>
            <vmArgs>
                <vmArg>-Djavax.xml.accessExternalSchema=all</vmArg>
            </vmArgs>
            <sourceDestDir>generated-sources/jaxws-wsimport</sourceDestDir>
            <xnocompile>true</xnocompile>
            <verbose>true</verbose>
            <extension>true</extension>
            <sei>/</sei>
        </configuration>
    </plugin>
</plugins>

Hier ist ein Hinweis für Gradle-Benutzer ohne Administratorrechte:Fügen Sie diese Zeile zu Ihrer Jaxb-Aufgabe hinzu:

System.setProperty('javax.xml.accessExternalSchema', 'all')

es wird so aussehen:

jaxb {
    System.setProperty('javax.xml.accessExternalSchema', 'all')
    xsdDir = "${project.name}/xsd"
    xjc {
        taskClassname = "com.sun.tools.xjc.XJCTask"
        args = ["-npa", "-no-header"]
    }
}

Wenn dieses Problem beim Konvertieren von WSDL in Java mit dem auftritt cxf-codegen-plugin, dann können Sie das Problem lösen, indem Sie das Plugin so konfigurieren, dass es forkt und die zusätzliche JVM-Option „-Djavax.xml.accessExternalSchema=all“ bereitstellt.

        <plugin>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-codegen-plugin</artifactId>
            <version>${cxf.version}</version>
            <executions>
                <execution>
                    <id>generate-sources</id>
                    <phase>generate-sources</phase>
                    <configuration>
                        <fork>always</fork>
                        <additionalJvmArgs>
                            -Djavax.xml.accessExternalSchema=all
                        </additionalJvmArgs>

Beim Testen eines Webservice-Programms auf dem Glassfish 4.0-Webserver ist in Eclipse auch ein ähnlicher Fehler aufgetreten: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 In jaxp.properties, funktioniert aber bei mir nicht.

Allerdings habe ich hier unten eine Lösung gefunden, die für mich funktioniert:Für GlassFish Server muss ich das ändern domain.xml des Glassfish, Pfad:<path>/glassfish/domains/domain1 oder domain2/config/domain.xml) und füge hinzu, <jvm-options>-Djavax.xml.accessExternalSchema=all</jvm-options>unter dem <java-config> Etikett

....

<java-config> ... <jvm-options>-Djavax.xml.accessExternalSchema=all</jvm-options> </java-config> ...und dann den GlassFish-Server neu starten

Wenn Sie Maven mit IntelliJ IDE verwenden, können Sie hinzufügen -Djavax.xml.accessExternalSchema=all zur Maven-Einstellung unter JVM-Optionen für Maven Build Tools Runner-Konfiguration

Ermöglichen des Zugriffs auf externe Schemata

Sie müssen der IDE und dem GlassFish-Server den Zugriff auf das externe Schema ermöglichen, um die WSDL-Datei des Webdienstes zu analysieren.Um den Zugriff zu ermöglichen, müssen Sie die Konfigurationsdateien der IDE und des GlassFish-Servers ändern.Weitere Einzelheiten finden Sie in der FAQ „Wie aktiviere ich das Parsen von WSDL mit einem externen Schema?“Konfigurieren der IDE

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.

-J-Djavax.xml.accessExternalSchema=all

Weitere Informationen zum Auffinden 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, um dem Server den Zugriff auf externe Schemata zu ermöglichen, um die WSDL-Datei zu analysieren und den Testclient zu generieren.Um den Zugriff auf externe Schemata zu ermöglichen, öffnen Sie die GlassFish-Konfigurationsdatei (GLASSFISH_INSTALL/glassfish/domains/domain1/config/domain.xml) und fügen Sie das folgende JVM-Optionselement (in Fettdruck) hinzu.Sie müssen den Server neu starten, damit die Änderung wirksam wird.

</java-config>
  ...
  <jvm-options>-Djavax.xml.accessExternalSchema=all</jvm-options>
</java-config>

Für diejenigen, die die ANT-Aufgabe verwenden wsimport, eine Möglichkeit zum Übergeben der Option, wie von @CMFly vorgeschlagen und in angegeben Dokumentation ist das Folgende:

<wsimport
   <!-- ... -->
   fork="true"
  >
  <jvmarg value="-Djavax.xml.accessExternalSchema=all"/>
</wsimport>

Ich habe es mit einem normalen verwendet Maven Projekt, und habe es mit dieser Plugin-Abhängigkeitskonfiguration zum Ausführen des gelöst xjc plugin:

     <plugin>
        <!-- Needed to run the plugin xjc en Java 8 or superior -->
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>properties-maven-plugin</artifactId>
        <version>1.0-alpha-2</version>
        <executions>
            <execution>
                <id>set-additional-system-properties</id>
                <goals>
                    <goal>set-system-properties</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <properties>
                <property>
                    <name>javax.xml.accessExternalSchema</name>
                    <value>all</value>
                </property>
                <property>
                    <name>javax.xml.accessExternalDTD</name>
                    <value>all</value>
                </property>
            </properties>
        </configuration>
    </plugin>

Dies funktioniert unter jdk1.8.0_65

wsimport -J-Djavax.xml.accessExternalSchema=all -keep -verbose https://your webservice url?wsdl

Es ist jetzt in der Version 2.5 behoben (veröffentlicht am 17. Juli). https://github.com/mojohaus/jaxws-maven-plugin/issues/8.

Für die 2.4.x-Versionen gibt es einen Workaround (wie in beschrieben). https://github.com/mojohaus/jaxws-maven-plugin/issues/4):

    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>jaxws-maven-plugin</artifactId>
        <version>2.4.1</version>
        <dependencies>
            <dependency>
                <groupId>com.sun.xml.ws</groupId>
                <artifactId>jaxws-tools</artifactId>
                <version>2.2.10</version>
            </dependency>
        </dependencies>
    </plugin>

Eine weitere Lösung zur Behebung: wiki.netbeans.org

Der Webdienst-Client-Assistent in der IDE analysiert die WSDL-Datei, wenn er einen Webdienst-Client aus einem Webdienst oder einer WSDL-Datei generiert.Sie müssen die IDE-Konfigurationsdatei (netbeans.conf) ändern, um den folgenden Schalter zu netbeans_default_options hinzuzufügen.Sie müssen die IDE neu starten, damit die Änderung wirksam wird.

-J-Djavax.xml.accessExternalSchema=all

Bei der Bereitstellung auf GlassFish müssen Sie den Zugriff auf ein externes Schema aktivieren, um einen Testclient für einen Webdienst zu generieren.Um den Zugriff zu ermöglichen, müssen Sie die Konfigurationsdatei des GlassFish-Servers (GLASSFISH_INSTALL/glassfish/domains/domain1/config/domain.xml) ändern und das folgende JVM-Optionselement hinzufügen.Sie müssen den Server neu starten, damit die Änderung wirksam wird.

</java-config>
  ...
  <jvm-options>-Djavax.xml.accessExternalSchema=all</jvm-options>
</java-config>

Wenn Sie Ant verwenden, können Sie Ihren Java-Aufrufen einen JV-Marg hinzufügen:

<jvmarg value="-Djavax.xml.accessExternalSchema=all" />

Eine sehr einfache portable Lösung wäre, die folgende Codezeile irgendwo in einem entscheidenden Teil Ihres Codes zu platzieren, von dem Sie sicher sind, dass er ausgeführt wird (z. B. direkt in der Hauptmethode):

System.setProperty("javax.xml.accessExternalDTD", "all");

Dadurch wird die erforderliche Systemeigenschaft programmgesteuert festgelegt, ohne dass knifflige Maven-pom.xml-Änderungen vorgenommen werden müssen (was bei mir aus irgendeinem Grund nicht funktioniert hat).

Ich habe es gerade versucht, wenn Sie es verwenden SoapUI (5.4.x) und nutzen Apache CXF Tool zum Generieren von Java-Code, put javax.xml.accessExternalSchema = all In YOUR_JDK/jre/lib/jaxp.properties Datei funktioniert auch.

Eine weitere Alternative besteht darin, das Shell-Skript wsimport.sh zu aktualisieren, indem Sie Folgendes hinzufügen:

Die 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“ „$@“

Noch eine Referenz:Wenn Sie das verwenden maven-jaxb2-plugin, Vor Version 0.9.0 können Sie die beschriebene Problemumgehung verwenden zu diesem Thema, in dem sich dieses Verhalten auf das Plugin auswirkte.

NetBeans aktualisiert sein Tutorial für JDK8 und dieses Problem:

Erste Schritte mit JAX-WS-Webdiensten -> Aktivieren des Zugriffs auf externe Schemata

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 dann diese Zeile hinzu:

javax.xml.accessExternalSchema = all
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top