Błąd generowania klienta WebService z jdk8

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ługi internetowej". Ostatnio jak sprawdzałem, to był sposób na stworzenie klienta usługi internetowej. Wynikało to jednak z twierdzenia:

Java.lang.AssertionError: org.xml.sax.SAXParseException; systemId: jar: file: / path/to/glassfish/modules / jaxb-osgi.słoik!/ com / sun / tools/xjc/reader/xmlschema/bindinfo / binding.xsd; numer linen: 52; columnNumber: 88; schema_reference: Failed to read schema document ' xjc.xsd', ponieważ dostęp do plików nie jest dozwolony z powodu ograniczeń ustawionych przez właściwość accessExternalSchema .

Domyślną platformą Javy dla NetBeans był JDK8 (oficjalna wersja Oracle), więc kiedy zmieniłem netbeans.plik conf i wykonane JDK7 (z Oracle, jak również) jako domyślne, wszystko działało dobrze. Więc myślę, że problem jest z JDK8. Oto moje java -version wyjście:

Java Wersja "1.8.0"
Java (TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot (TM) 64-Bit Server VM (build 25.0-B70, mixed mode)

Na razie zachowuję JDK7 jako domyślną platformę Java. Jeśli jest jakiś sposób, aby jdk8 działał, podziel się.

Author: Antti Haapala, 2014-04-11

23 answers

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) w /path/to/jdk1.8.0/jre/lib, a następnie napisz w nim tę linię:

javax.xml.accessExternalSchema = all
To wszystko. Ciesz się JDK 8.
 410
Author: a.b,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-11 12:36:27

Nie jest to prawdziwa odpowiedź, ale raczej punkt odniesienia.

Jeśli używasz wtyczki jaxws Maven i otrzymasz ten sam komunikat o błędzie, dodaj wspomnianą właściwość do konfiguracji wtyczki:

...
<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>
 122
Author: jassuncao,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-17 11:20:01

Uruchamiam Ant buildy w Eclipse IDE (4.4, Luna, Na Windows 7 x64). Zamiast modyfikować zainstalowane JRE lib lub jakiekolwiek Skrypty ant (mam wiele projektów, które zawierają XJC w swoich kompilacjach), wolę zmienić ustawienia Eclipse "External Tools Configurations" i dodać do argumentów VM dla konfiguracji Ant build:

-Djavax.xml.accessExternalSchema=all
 38
Author: gb96,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-15 02:43:53

Następujące prace dla wsimport 2.2.9 zawarte w jdk 1.8.0_66:

wsimport -J-Djavax.xml.accessExternalSchema=all ....
 33
Author: tanderson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-22 22:31:56

W moim przypadku dodanie:

javax.xml.accessExternalSchema = all
Do jaxp.właściwości nie działają, muszę dodać:
javax.xml.accessExternalDTD = all
Moje środowisko to linux mint 17 i java 8 oracle. Umieszczę to tam jako odpowiedź dla ludzi z tym samym problemem.
 22
Author: moretti.fabio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-28 19:14:42

Przetestowałem to dla wersji 2.4 artifact org.codehaus.mojo i to zadziałało ~

<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>
 17
Author: Mehdi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-27 16:51:24

Oto podpowiedź Podpowiedź dla użytkowników gradle bez uprawnień admina: dodaj tę linię do zadania jaxb:

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

Będzie to wyglądało tak:

jaxb {
    System.setProperty('javax.xml.accessExternalSchema', 'all')
    xsdDir = "${project.name}/xsd"
    xjc {
        taskClassname = "com.sun.tools.xjc.XJCTask"
        args = ["-npa", "-no-header"]
    }
}
 15
Author: Java_Waldi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-07 13:29:44

Jeśli pojawi się ten problem podczas konwersji wsdl do jave za pomocą CXF-codegen-plugin, możesz go rozwiązać, konfigurując wtyczkę do fork i dostarczając dodatkowe "-Djavax.xml.accessExternalSchema=all " opcja JVM.

        <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>
 13
Author: pjklauser,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-20 19:32:14

Otrzymywał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 w jaxp.properties, ale nie działa na mnie.

Jednak znalazłem rozwiązanie tutaj poniżej, które działa dla mnie: Dla serwera GlassFish, muszę zmodyfikować domain.xml z GlassFish, Ścieżka: <path>/glassfish/domains/domain1 lub domain2/config/domain.xml) i dodać, <jvm-options>-Djavax.xml.accessExternalSchema=all</jvm-options> pod znacznikiem <java-config>

....

<java-config> ... <jvm-options>-Djavax.xml.accessExternalSchema=all</jvm-options> </java-config> ...a następnie uruchom ponownie serwer GlassFish

 10
Author: Debashish,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-02 15:33:56

Umożliwienie dostępu do zewnętrznego schematu

Musisz włączyć IDE i serwer GlassFish, aby uzyskać dostęp do zewnętrznego schematu do analizy pliku WSDL usługi internetowej. Aby włączyć dostęp, należy zmodyfikować pliki konfiguracyjne IDE i serwera GlassFish. Aby uzyskać więcej informacji, zobacz FAQ Jak włączyć parsowanie WSDL za pomocą zewnętrznego schematu? Konfiguracja IDE

Aby wygenerować klienta usługi web w IDE z pliku Web service lub WSDL należy zmodyfikować Plik konfiguracyjny IDE (netbeans.conf) aby dodać następujący przełącznik do netbeans_default_options.

-J-Djavax.xml.accessExternalSchema=all

Aby dowiedzieć się więcej o lokalizacji i modyfikacji netbeans.plik konfiguracyjny conf, zobacz Netbeans CONF FAQ. Konfiguracja serwera GlassFish

Jeśli wdrażasz Serwer GlassFish, musisz zmodyfikować plik konfiguracyjny serwera GlassFish (domena.xml), aby umożliwić serwerowi dostęp do zewnętrznych schematów do analizy pliku wsdl i wygenerowania testowego klienta. Aby umożliwić dostęp do zewnętrznych schematów otwórz plik konfiguracyjny GlassFish (GLASSFISH_INSTALL/glassfish/domains/domain1/config/domain.xml) i dodać następujący element opcji JVM (pogrubiony). Aby zmiana weszła w życie, musisz ponownie uruchomić serwer.

</java-config>
  ...
  <jvm-options>-Djavax.xml.accessExternalSchema=all</jvm-options>
</java-config>
 8
Author: Ashwin Patil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-10 18:37:18

Utwórz plik o nazwie jaxp.properties (jeśli nie istnieje) w ścieżce do Twojej "JDK version/jre/lib", a następnie dodaj do niego następujący wiersz.

javax.xml.accessExternalSchema = all
 7
Author: Gayan Mettananda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-12-17 03:48:41

Podczas korzystania z Mavena z IntelliJ IDE możesz dodać -Djavax.xml.accessExternalSchema=all do Ustawienia Mavena pod opcjami JVM dla Maven Build Tools Runner configuration

 6
Author: Dexter Legaspi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-15 20:42:03

To działa na jdk1.8. 0_65

wsimport -J-Djavax.xml.accessExternalSchema=all -keep -verbose https://your webservice url?wsdl
 5
Author: Stephen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-25 08:10:58

Dla tych, którzy używają zadania ANT wsimport, sposób przekazania opcji sugerowany przez @ CMFly i określony w Dokumentacja jest następujący:

<wsimport
   <!-- ... -->
   fork="true"
  >
  <jvmarg value="-Djavax.xml.accessExternalSchema=all"/>
</wsimport>
 4
Author: Daniele Piccioni,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-09 14:00:40

Jest teraz naprawiony w wersji 2.5 (wydanej w lipcu/17). https://github.com/mojohaus/jaxws-maven-plugin/issues/8 .

Dla 2.4.wersje x istnieje obejście (opisane w 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>
 4
Author: DGardim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-21 17:45:33

Użyłem go ze zwykłym projektem maven i rozwiązałem go z tą konfiguracją zależności wtyczki do uruchomienia 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>
 3
Author: EliuX,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-16 15:30:31

Inne rozwiązanie dla adresu: wiki.netbeans.org

Kreator klienta usługi Web Service w IDE przetwarza plik WSDL podczas generowania klienta usługi web service z usługi web service lub pliku WSDL. Musisz zmodyfikować plik konfiguracyjny IDE (netbeans.conf) aby dodać następujący przełącznik do netbeans_default_options. Aby zmiana weszła w życie, konieczne będzie ponowne uruchomienie IDE.
-J-Djavax.xml.accessExternalSchema=all

Podczas wdrażania do GlassFish musisz włączyć dostęp do zewnętrznego schematu, aby wygenerowanie klienta testowego dla usługi internetowej. Aby włączyć dostęp, należy zmodyfikować plik konfiguracyjny serwera GlassFish (GLASSFISH_INSTALL/glassfish/domains/domain1/config / domain.xml) i dodać następujący element opcji JVM. Aby zmiana weszła w życie, musisz ponownie uruchomić serwer.

</java-config>
  ...
  <jvm-options>-Djavax.xml.accessExternalSchema=all</jvm-options>
</java-config>
 2
Author: Özgür Akıncı,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-23 14:45:25

Jeśli używasz ant możesz dodać jvmarg do swoich wywołań java:

<jvmarg value="-Djavax.xml.accessExternalSchema=all" />
 1
Author: CMfly,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-27 20:17:25

Bardzo prostym przenośnym rozwiązaniem byłoby umieszczenie poniższej linii kodu gdzieś w kluczowej części kodu, której część jest pewna, że zostanie uruchomiona (na przykład bezpośrednio w głównej metodzie):

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

Ustawia to wymaganą właściwość systemową programowo, bez konieczności wykonywania skomplikowanych maven pom.zmiany w xml (które z jakiegoś powodu nie działały dla mnie).

 1
Author: R Hoekstra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-07 19:25:11

Właśnie próbowałem, że jeśli używasz SoapUI (5.4.x) i używasz Apache CXF narzędzia do generowania kodu java, umieść javax.xml.accessExternalSchema = all w pliku YOUR_JDK/jre/lib/jaxp.properties również działa.

 1
Author: TGU,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-04-20 06:14:51

Inną alternatywą jest aktualizacja wsimport.sh skrypt powłoki dodając:

The 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 ""$@ "

 0
Author: Percy Williams,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-11 23:52:36

Inne odniesienie: Jeśli używasz maven-jaxb2-plugin, przed wersją 0.9.0, możesz użyć obejścia opisanego w tym problemie, w którym to zachowanie miało wpływ na wtyczkę.

 0
Author: Niel de Wet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-25 14:22:39

NetBeans aktualizuje swój samouczek dla JDK8 i ten problem:

Pierwsze kroki z JAX-WS Web Services - > Włączanie dostępu do zewnętrznego schematu

 0
Author: user3158918,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-15 17:48:55