wake-up-neo.com

Fehler bei der Generierung des Web Service Client mit JDK 8

Ich muss in meinem Projekt einen Webservice nutzen. Ich benutze NetBeans, also habe ich mit der rechten Maustaste auf mein Projekt geklickt und versucht, einen neuen "Web Service Client" hinzuzufügen. Beim letzten Mal habe ich einen Web-Service-Client erstellt. Es ergab sich jedoch ein AssertionError, der lautete:

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; Zeilennummer: 52; Spaltennummer: 88; schema_reference: Lesen des Schemadokuments ' xjc.xsd ' fehlgeschlagen, da der Dateizugriff aufgrund der durch die accessExternalSchema -Eigenschaft festgelegten Einschränkung nicht zulässig ist.

Die Standard-Java-Plattform für NetBeans war JDK8 (die offizielle Version von Oracle). Wenn ich also meine netbeans.conf-Datei änderte und JDK7 (ebenfalls von Oracle) als Standardeinstellung 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 es bitte mit.

201
Abdullah Battal

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 unter jaxp.properties eine Datei mit dem Namen /path/to/jdk1.8.0/jre/lib (falls diese nicht vorhanden ist) und schreiben Sie dann diese Zeile hinein:

javax.xml.accessExternalSchema = all

Das ist alles. Genießen Sie JDK 8.

361
Abdullah Battal

Keine tatsächliche Antwort, sondern mehr als Referenz.

Wenn Sie das jaxws Maven-Plugin verwenden und dieselbe Fehlermeldung erhalten, fügen Sie die erwähnte 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>
108
jassuncao

Ich führe Ant-Builds in Eclipse IDE (4.4, Luna, unter Windows 7 x64) aus. Anstatt die installierte JRE-Bibliothek oder Ant-Skripts zu ändern (ich habe mehrere Projekte, die XJC in ihren Builds enthalten), ziehe ich es vor, die Eclipse-Einstellungen "External Tools Configurations" zu ändern und den Argumenten VM des Ant Folgendes hinzuzufügen Build-Konfiguration:

-Djavax.xml.accessExternalSchema=all
28
gb96

Die folgenden Funktionen für wsimport 2.2.9 sind in jdk 1.8.0_66 enthalten:

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

Hier ein Hinweis Hinweis für 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"]
    }
}
14
Java_Waldi

In meinem Fall füge ich hinzu:

javax.xml.accessExternalSchema = all

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

javax.xml.accessExternalDTD = all

Meine Umgebung ist Linux Mint 17 und Java 8 Oracle.

14
moretti.fabio

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>
14
Mehdi

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 in fork konfigurieren und die zusätzliche Option "-Djavax.xml.accessExternalSchema = all" JVM angeben .

        <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>
11
pjklauser

Ich habe auch einen ähnlichen Fehler in Eclipse beim Testen eines Webservice-Programms auf Glassfish 4.0-Webserver erhalten: 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 javax.xml.accessExternalSchema = All in jaxp.properties hinzugefügt, funktioniert aber nicht für mich.

Ich habe hier jedoch eine Lösung gefunden, die für mich geeignet ist: Für GlassFish Server muss ich den domain.xml des GlassFish, -Pfads: <path>/glassfish/domains/domain1 oder domain2/config/domain.xml) ändern und unter dem <jvm-options>-Djavax.xml.accessExternalSchema=all</jvm-options>-Tag <Java-config> hinzufügen

....

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

10
Debashish

Zugriff auf externes Schema ermöglichen

Sie müssen IDE und den GlassFish-Server aktivieren, um auf ein externes Schema zugreifen zu können, um die WSDL-Datei des Webdienstes zu analysieren. Um den Zugriff zu ermöglichen, müssen Sie die Konfigurationsdateien von IDE und des GlassFish-Servers ändern. Weitere Informationen finden Sie unter FAQ. So aktivieren Sie das Analysieren von WSDL mit einem externen Schema? Konfigurieren der IDE

Um einen Web-Service-Client in der IDE aus einem Web-Service 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 Suchen und Ändern der Konfigurationsdatei netbeans.conf finden Sie unter Netbeans Conf FAQ . Konfigurieren des GlassFish-Servers

Bei der Bereitstellung auf dem GlassFish-Server müssen Sie die Konfigurationsdatei des GlassFish-Servers (domain.xml) ändern, damit der Server auf externe Schemas zugreifen kann, um die WSDL-Datei zu parsen und den Testclient zu generieren. Um den Zugriff auf externe Schemas 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>
5
Ashwin Patil

Für diejenigen, die die ANT-Task wsimport verwenden, besteht die folgende Möglichkeit, die von @CMFly vorgeschlagene und in der documentation angegebene Option zu übergeben:

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

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

4
Dexter Legaspi

Dies funktioniert an jdk1.8.0_65

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

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

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

    <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>
3
DGardim

Ich habe es mit einem regulären maven - Projekt verwendet und es wurde mit dieser Plugin-Abhängigkeitskonfiguration für die Ausführung des xjc plugin gelöst: 

     <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>
2
EliuX

Eine andere Lösung für die Adressierung: wiki.netbeans.org

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

-J-Djavax.xml.accessExternalSchema=all

Bei der Bereitstellung bei 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/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>
2

Wenn Sie ant verwenden, können Sie Ihren Java-Aufrufen einen Jvmarg hinzufügen:

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

Eine weitere Referenz: Wenn Sie den maven-jaxb2-plugin vor Version 0.9.0 verwenden, können Sie die beschriebene Problemumgehung in diesem Problem verwenden, bei der dieses Verhalten das Plugin beeinflusst hat.

0
Niel de Wet

NetBeans aktualisieren ihr Tutorial für JDK8 und diese Ausgabe:

Erste Schritte mit JAX-WS Web Services -> Zugriff auf externes Schema ermöglichen

0
user3158918

Eine andere Alternative ist das Aktualisieren des Shell-Skripts wsimport.sh, 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 = Alle-Jar "$ JAXWS_HOME/lib/jaxws-tools.jar" "$ @"

0
Percy Williams

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): 

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

Dadurch wird die benötigte Systemeigenschaft programmgesteuert festgelegt, ohne dass komplizierte Änderungen von maven pom.xml vorgenommen werden müssen (was aus irgendeinem Grund für mich nicht funktionierte). 

0
R Hoekstra

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

0
TGU