Вопрос

Мне нужно использовать веб-сервис в моем проекте.Я использую 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 с помощью CXF-CODEGEGEGEN-PLUCKIN , затем вы можете решить его, настроив плагин к вилке и предоставим дополнительные «-DJavax.xml.accessExternalschema= все» 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>
.

Я также получал ошибку аналогичного типа в 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>
.

Другое решение для адреса: wiki.netbeans.org

Мастер клиента веб-службы в 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
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top