Ошибка создания клиента WebService с JDK8
-
21-12-2019 - |
Вопрос
Мне нужно использовать веб-сервис в моем проекте.Я использую NetBeans, поэтому щелкнул правой кнопкой мыши свой проект и попытался добавить новый «Клиент веб-службы».Последний раз, когда я проверял, это был способ создания клиента веб-сервиса.Но это привело к ошибке AssertionError, в которой говорилось:
java.lang.AssertionError:org.xml.sax.SAXParseException;идентификатор системы:jar:file:/path/to/glassfish/modules/jaxb-osgi.jar!/com/sun/tools/xjc/reader/xmlschema/bindinfo/binding.xsd;номер строки:52;номер столбца:88;ссылка_схемы:Не удалось прочитать документ схемы 'xjc.xsd', потому что доступ к 'файлу' не разрешен из-за ограничения, установленного AccessExternalSchema свойство.
Платформой Java по умолчанию для NetBeans была JDK8 (официальная версия Oracle), поэтому, когда я изменил файл netbeans.conf и сделал JDK7 (также из Oracle) по умолчанию, все заработало нормально.Поэтому я думаю, что проблема в JDK8.Вот мой java -version
выход:
Java-версия "1.8.0"
Среда выполнения Java(TM) SE (сборка 1.8.0-b132)
64-битная серверная виртуальная машина Java HotSpot(TM) (сборка 25.0-b70, смешанный режим)
На данный момент я оставляю JDK7 в качестве платформы Java по умолчанию.Если есть способ заставить JDK8 работать, поделитесь.
Решение
Ну, я нашел решение.(На основе http://docs.orcle.com / javase / 7 / docs / api / javax / xml / xmlconstants.html # access_external_schema )
Создание файла с именем jaxp.properties
(если оно не существует) под /path/to/jdk1.8.0/jre/lib
, а затем напишите эту строку в нем:
javax.xml.accessExternalSchema = all
.
Это все.Наслаждайтесь JDK 8.
Другие советы
не фактический ответ, но более ссылка.
Если вы используете плагин Maven Jaxws, и вы получаете одно и то же сообщение об ошибке, добавьте упомянутое свойство на конфигурацию плагина:
...
<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>
. Я запускаю муравьев сборки в Eclipse IDE (4,4, луна, на Windows 7 x64).Вместо того, чтобы модифицировать установленные сценарии JRE lib или любых сценариев ant (у меня есть несколько проектов, которые включают XJC в их сборках), я предпочитаю изменять настройки Eclipse «Конфигурации внешних инструментов», и добавьте следующее в аргументы VM для конфигурации аргументов VM: .
-Djavax.xml.accessExternalSchema=all
. Следующие работы для WSIMPort 2.2.9 включены в JDK 1.8.0_66:
wsimport -J-Djavax.xml.accessExternalSchema=all ....
. В моем случае добавление:
javax.xml.accessExternalSchema = all
.
jaxp.properties не работал, я добавил:
javax.xml.accessExternalDTD = all
.
Моя среда - это Minux Mint 17 и Java 8 Oracle. Я поставлю его там как ответ на людей с такой же проблемой.
Я проверил это для версии 2.4 артефакта org.codehaus.mojo и что работал ~
<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>
. Вот намек на подсказку для пользователей Ridelle без права администратора: добавьте эту строку в свою задачу JAXB:
System.setProperty('javax.xml.accessExternalSchema', 'all')
.
Это будет выглядеть так:
jaxb {
System.setProperty('javax.xml.accessExternalSchema', 'all')
xsdDir = "${project.name}/xsd"
xjc {
taskClassname = "com.sun.tools.xjc.XJCTask"
args = ["-npa", "-no-header"]
}
}
. Если вы получаете эту проблему при преобразовании WSDL в Jave с помощью
<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>
. Я также получал ошибку аналогичного типа в Eclipse во время тестирования программы веб-сервиса на веб-сервере 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.
я добавил javax.xml.accessExternalSchema = All
в jaxp.properties
, но у меня не работает.
Однако я нашел решение ниже, которое работает для меня:Для сервера GlassFish мне нужно изменить domain.xml
стеклянной рыбы, тропинка:<path>/glassfish/domains/domain1
или domain2/config/domain.xml
) и добавить, <jvm-options>-Djavax.xml.accessExternalSchema=all</jvm-options>
под <java-config>
ярлык
....
<java-config>
...
<jvm-options>-Djavax.xml.accessExternalSchema=all</jvm-options>
</java-config>
...а затем перезапустите сервер GlassFish
При использовании Maven с Intellij IDE вы можете добавить -Djavax.xml.accessExternalSchema=all
в настройку Maven в параметрах JVM для Maven Build Tools Configner Конфигурация
<Сильные> Включение доступа к внешней схеме
Вам необходимо включить IDE и сервер Glassfish для доступа к внешней схеме для анализа файла WSDL веб-сервиса. Чтобы включить доступ, вам необходимо изменить файлы конфигурации IDE и сервера GlassFish. Для получения более подробной информации см. FAQ Как включить анализ WSDL с внешней схемой? Настройка IDE
Чтобы генерировать клиент веб-службы в IDE из веб-службы или файла WSDL, необходимо изменить файл конфигурации IDE (NetBeans.conf), чтобы добавить следующий переключатель на NetBeans_Default_Options.
-J-Djavax.xml.accessExternalSchema=all
.
Для получения дополнительной информации о размещении и модификации файла конфигурации NetBeans.Conf см. FAQ NetBeans Conf. Настройка сервера GlassFish
Если вы развертываете на сервере GlassFish, вам необходимо изменить файл конфигурации сервера GlassFish (domain.xml), чтобы позволить серверу получить доступ к внешним схемам для анализа файла WSDL и генерировать тестовый клиент. Чтобы включить доступ к внешним схемам, откройте файл конфигурации GlassFish (Glassfish_install / Glassfish / Domains / Domain1 / Config / domain.xml) и добавьте следующий элемент параметров JVM (жирный). Вам нужно будет перезапустить сервер для изменения в силу.
</java-config>
...
<jvm-options>-Djavax.xml.accessExternalSchema=all</jvm-options>
</java-config>
. Для тех, кто использует задачу ANT wsimport
, способ передачи параметра, предложенный @CMFly и указанный в документация следующее:
<wsimport
<!-- ... -->
fork="true"
>
<jvmarg value="-Djavax.xml.accessExternalSchema=all"/>
</wsimport>
Я использовал его с регулярным <прочным> проектом Maven и получил его решающуюся с помощью этой конфигурации зависимости плагинов для работы генеракодицетагкода:
<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>
. Это работает на JDK1.8.0_65
wsimport -J-Djavax.xml.accessExternalSchema=all -keep -verbose https://your webservice url?wsdl
. Теперь он фиксируется в версии 2.5 (выпущено в июле / 17). https://github.com/mojohaus/jaxws-maven-plugin/issues/8 .
Для версий 2.4.x происходит обходной путь (как уменьшается в 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>
.
Мастер клиента веб-службы в IDE разбрасывает файл WSDL при создании клиента веб-службы из веб-службы или файла WSDL.Вам необходимо изменить файл конфигурации IDE (NetBeans.conf), чтобы добавить следующий переключатель в NetBeans_Default_Options.Вам нужно будет перезапустить IDE для изменения в силу.
-J-Djavax.xml.accessExternalSchema=all
.
При развертывании Glassfish вам необходимо включить доступ к внешней схеме для создания тестового клиента для веб-сервиса.Чтобы включить доступ, вам необходимо изменить файл конфигурации сервера GlassFish (GlassFish_install / Glassfish / Domains / Domain1 / Config / domain.xml) и добавить следующий элемент параметров JVM.Вам нужно будет перезапустить сервер для изменения в силу.
</java-config>
...
<jvm-options>-Djavax.xml.accessExternalSchema=all</jvm-options>
</java-config>
. Если вы используете Ant, вы можете добавить JVMARG на ваши звонки Java:
<jvmarg value="-Djavax.xml.accessExternalSchema=all" />
. Очень простое портативное решение было, чтобы разместить следующую строку кода где-то в важном части вашего кода, часть которой вы уверены, что она будет запущена (например, вправо в основном методе): .
System.setProperty("javax.xml.accessExternalDTD", "all");
.
Это устанавливает необходимую систему свойства программно, без необходимости делать сложные изменения Maven Pom.xml (что по какой-то причине не работало для меня).
Я только что попробовал, если вы используете SoapUI (5.4.x)
и используете инструмент Apache CXF
для генерации кода Java, поставьте javax.xml.accessExternalSchema = all
в файле YOUR_JDK/jre/lib/jaxp.properties
.
Другая альтернатива - обновить сценарий оболочки wsimport.sh, добавив следующее:
WSIMPORT.SH находится в этом каталоге:
jaxws-Ri.2.2.28 / bin
exec "$ Java" $ wsimport_opts -djavax.xml.accessExternalschema= все -JAR "$ Jaxws_home / lib / jaxws-tools.jar" "$ @"
Еще одна ссылка:Если вы используете maven-jaxb2-plugin
, до версии 0.9.0 вы можете использовать описанный обходной путь по этому вопросу, в котором такое поведение повлияло на плагин.
NetBeans Обновление их учебника для JDK8 и этой проблемы:
Начало работы с веб-сервисами JAX-WS -> Включение доступа к внешнемуСхема
Создайте файл с именем jaxp.properties
(если оно не существует) Под путь к вашей «версии JDK / JRE / lib», а затем добавьте эту строку в нем:
javax.xml.accessExternalSchema = all
.