Ошибка генерации клиента WebService с помощью JDK8

Мне нужно использовать веб-сервис в моем проекте. Я использую NetBeans, поэтому я щелкнул правой кнопкой мыши по моему проекту и попытался добавить нового «клиента веб-службы». В прошлый раз, когда я проверил, это был способ создания клиента веб-сервиса. Но это привело к AssertionError, сказав:

java.lang.AssertionError: org.xml.sax.SAXParseException; systemId: jar: файл: /path/to/glassfish/modules/jaxb-osgi.jar! /com/sun/tools/xjc/reader/xmlschema/bindinfo/binding.xsd; lineNumber: 52; columnNumber: 88; schema_reference: Не удалось прочитать документ схемы « xjc.xsd », поскольку доступ к «файлу» запрещен из-за ограничения, установленного свойством accessExternalSchema .

Платформа Java для NetBeans по умолчанию была JDK8 (официальная версия Oracle), поэтому, когда я изменил файл netbeans.conf и сделал JDK7 (также из Oracle, как), я по умолчанию работал нормально. Поэтому я думаю, что проблема связана с JDK8. Вот мой выход java -version :

java-версия “1.8.0”
Java (TM) SE Runtime Environment (assembly 1.8.0-b132)
Java HotSpot (TM) 64-разрядная серверная VM (assembly 25.0-b70, смешанный режим)

Пока что я держу JDK7 в качестве платформы Java по умолчанию. Если есть способ сделать работу JDK8, пожалуйста, поделитесь ею.

    Ну, я нашел решение. (на основе http://docs.oracle.com/javase/7/docs/api/javax/xml/XMLConstants.html#ACCESS_EXTERNAL_SCHEMA )

    Создайте файл с именем jaxp.properties (если он не существует) в /path/to/jdk1.8.0/jre/lib а затем напишите в нем /path/to/jdk1.8.0/jre/lib строку:

     javax.xml.accessExternalSchema = all 

    Это все. Наслаждайтесь JDK 8.

    Не настоящий ответ, а больше как ссылка.

    Если вы используете плагин Maven jaxws и получаете одно и то же сообщение об ошибке, добавьте указанное свойство в конфигурацию плагина:

     ...  org.jvnet.jax-ws-commons jaxws-maven-plugin 2.3    -Djavax.xml.accessExternalSchema=all    

    Я запускаю сборки Ant в Eclipse IDE (4.4, Luna, в Windows 7 x64). Вместо того, чтобы модифицировать установленные JRE lib или любые скрипты ant (у меня есть несколько проектов, которые include XJC в их assemblyх), я предпочитаю изменять настройки Eclipse «Настройки внешних инструментов» и добавлять следующие аргументы VM для конфигурации сборки Ant:

     -Djavax.xml.accessExternalSchema=all 

    Следующие работы для wsimport 2.2.9 включены в jdk 1.8.0_66:

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

    В моем случае добавление:

     javax.xml.accessExternalSchema = all 

    to jaxp.properties не работает, я должен добавить:

     javax.xml.accessExternalDTD = all 

    Моя среда – это linux mint 17 и java 8 oracle. Я поставлю его там как ответ для людей с одинаковой проблемой.

    Я протестировал это для версии 2.4 артефакта org.codehaus.mojo, и это сработало ~

       org.codehaus.mojo jaxws-maven-plugin 2.4.1    wsimport   path/to/dir/wsdl  wsimport-web-service generate-sources     javax.xml webservices-api ${webservices-api-version}     -Djavax.xml.accessExternalSchema=all  generated-sources/jaxws-wsimport true true true /    

    Вот подсказка Подсказка для пользователей gradleиентов без прав администратора: добавьте эту строку в свою 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"] } } 

    Я также получал аналогичную ошибку в Eclipse во время тестирования программы webservice на веб-сервере 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. 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 Server мне нужно изменить domain.xml GlassFish, путь: /glassfish/domains/domain1 или domain2/config/domain.xml ) и добавить , -Djavax.xml.accessExternalSchema=all в

     .... 

    ... -Djavax.xml.accessExternalSchema=all … а затем перезапустите сервер GlassFish

    Если вы столкнулись с этой проблемой при преобразовании wsdl в jave с помощью cxf-codegen-plugin , вы можете решить эту проблему, настроив плагин на fork и предоставив дополнительную опцию «-Djavax.xml.accessExternalSchema = all» JVM.

       org.apache.cxf cxf-codegen-plugin ${cxf.version}   generate-sources generate-sources  always  -Djavax.xml.accessExternalSchema=all  

    При использовании Maven с IntelliJ IDE вы можете добавить -Djavax.xml.accessExternalSchema=all в настройку Maven в настройках JVM для конфигурации Runner Maven Build Tools

    Для тех, кто использует задачу ANT wsimport , способ передачи опции, предложенный @CMFly и указанный в документации, следующий:

      fork="true" >   

    Включение доступа к внешней схеме

    Вам нужно включить IDE и GlassFish Server для доступа к внешней схеме для анализа WSDL-файла веб-службы. Чтобы включить доступ, вам необходимо изменить файлы конфигурации IDE и GlassFish Server. Дополнительные сведения см. В разделе «Вопросы и ответы». Как включить парсинг WSDL с внешней схемой? Настройка среды IDE

    Чтобы создать клиент веб-службы в среде IDE из веб-службы или файла WSDL, вам необходимо изменить файл конфигурации IDE (netbeans.conf), чтобы добавить следующий переключатель в netbeans_default_options.

     -J-Djavax.xml.accessExternalSchema=all 

    Дополнительные сведения о поиске и изменении файла конфигурации netbeans.conf см. В разделе FAQ Netbeans Conf. Настройка сервера GlassFish

    Если вы развертываете сервер GlassFish, вам необходимо изменить файл конфигурации GlassFish Server (domain.xml), чтобы сервер мог получить доступ к внешним схемам для анализа файла wsdl и создания тестового клиента. Чтобы включить доступ к внешним схемам, откройте файл конфигурации GlassFish (GLASSFISH_INSTALL / glassfish / domains / domain1 / config / domain.xml) и добавьте следующий элемент опции JVM (выделен жирным шрифтом). Чтобы изменения вступили в силу, вам необходимо перезапустить сервер.

      ... -Djavax.xml.accessExternalSchema=all  

    Это работает на jdk1.8.0_65

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

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

    Мастер-клиент веб-службы в среде IDE анализирует файл WSDL при создании клиента веб-службы из веб-службы или WSDL-файла. Вам необходимо изменить файл конфигурации IDE (netbeans.conf), чтобы добавить следующий переключатель в netbeans_default_options. Вам нужно будет перезапустить среду IDE, чтобы изменения вступили в силу.

     -J-Djavax.xml.accessExternalSchema=all 

    При развертывании в GlassFish вам необходимо включить доступ к внешней схеме для создания тестового клиента для веб-службы. Чтобы включить доступ, вам необходимо изменить файл конфигурации GlassFish Server (GLASSFISH_INSTALL / glassfish / domains / domain1 / config / domain.xml) и добавить следующий элемент опции JVM. Чтобы изменения вступили в силу, вам необходимо перезапустить сервер.

      ... -Djavax.xml.accessExternalSchema=all  

    Я использовал его с регулярным проектом maven и решил его решить с помощью этой конфигурации зависимостей плагина для запуска xjc plugin :

        org.codehaus.mojo properties-maven-plugin 1.0-alpha-2   set-additional-system-properties  set-system-properties       javax.xml.accessExternalSchema all   javax.xml.accessExternalDTD all     

    Теперь он исправлен в версии 2.5 (выпущен в jul / 17). https://github.com/mojohaus/jaxws-maven-plugin/issues/8 .

    Для версий 2.4.x существует обходное решение (как описано в https://github.com/mojohaus/jaxws-maven-plugin/issues/4 ):

       org.codehaus.mojo jaxws-maven-plugin 2.4.1   com.sun.xml.ws jaxws-tools 2.2.10    

    Если вы используете ant, вы можете добавить jvmarg в свои java-вызовы:

      

    Другой альтернативой является обновление сценария оболочки wsimport.sh путем добавления следующего:

    Wsimport.sh находится в этом каталоге:

    JAXWS-ri.2.2.28 / бен

    exec “$ JAVA” $ WSIMPORT_OPTS -Djavax.xml.accessExternalSchema = all -jar “$ JAXWS_HOME / lib / jaxws-tools.jar” “$ @”

    Другая ссылка: если вы используете maven-jaxb2-plugin до версии 0.9.0, вы можете использовать обходной путь, описанный в этой проблеме , в котором это поведение повлияло на плагин.

    NetBeans обновляет свой учебник для JDK8 и этот выпуск:

    Начало работы с веб-службами JAX-WS -> Включение доступа к внешней схеме

    Очень простым переносным решением было бы разместить следующую строку кода где-то в ключевой части вашего кода, часть которой вы уверены, что она будет запущена (например, прямо в основном методе):

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

    Это задает необходимое системное свойство программно, без необходимости делать сложные изменения maven pom.xml (которые по какой-то причине не работали для меня).

    Давайте будем гением компьютера.