Pregunta

Necesito consumir un servicio web en mi proyecto.Utilizo NetBeans, así que hice clic derecho en mi proyecto e intenté agregar un nuevo "Cliente de servicio web".La última vez que lo comprobé, esta era la forma de crear un cliente de servicio web.Pero resultó en un AssertionError, que decía:

java.lang.AssertionError:org.xml.sax.SAXParseException;ID del sistema:jar:archivo:/ruta/a/glassfish/modules/jaxb-osgi.jar!/com/sun/tools/xjc/reader/xmlschema/bindinfo/binding.xsd;número de línea:52;número de columna:88;referencia_esquema:No se pudo leer el documento de esquema 'xjc.xsd', porque el acceso al 'archivo' no está permitido debido a la restricción establecida por el accesoEsquemaExterno propiedad.

La plataforma Java predeterminada para NetBeans era JDK8 (la versión oficial de Oracle), por lo que cuando cambié mi archivo netbeans.conf e hice JDK7 (también de Oracle) como predeterminado, todo funcionó bien.Entonces creo que el problema está en JDK8.Aquí está mi java -version producción:

versión de java "1.8.0"
Entorno de ejecución Java(TM) SE (compilación 1.8.0-b132)
Máquina virtual de servidor Java HotSpot(TM) de 64 bits (compilación 25.0-b70, modo mixto)

Por ahora, mantendré JDK7 como mi plataforma Java predeterminada.Si hay una manera de hacer que JDK8 funcione, compártala.

¿Fue útil?

Solución

Bueno, encontré la solución.(Basado en http://docs.oracle.COM / JAVASE / 7 / DOCS / API / JAVAX / XML / XMLCONSTANTS.HTML # ACCESO_EXTERNAL_SCHEMA )

Crear un archivo llamado jaxp.properties (si no existe) bajo /path/to/jdk1.8.0/jre/lib y luego escribe esta línea en él:

javax.xml.accessExternalSchema = all

Eso es todo.Disfruta de JDK 8.

Otros consejos

No es una respuesta real, pero más como referencia.

Si está utilizando el complemento JAXWS MAVEN y obtiene el mismo mensaje de error, agregue la propiedad mencionada a la configuración del complemento:

...
<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>

I Ejecutar las compilaciones de hormigas dentro de Eclipse IDE (4.4, LUNA, en Windows 7 x64).En lugar de modificar el JRE LIB instalado o cualquier scripts de hormigas (tengo múltiples proyectos que incluyen XJC en sus compilaciones), prefiero cambiar la configuración de Eclipse "Configuraciones de herramientas externas" y agregar lo siguiente a los argumentos de VM para la configuración de ANT Build:

-Djavax.xml.accessExternalSchema=all

Las siguientes obras para WSIMPORT 2.2.9 incluidas en JDK 1.8.0_66:

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

En mi caso agregando:

javax.xml.accessExternalSchema = all

a jaxp.properties no funcionó, he agregado:

javax.xml.accessExternalDTD = all

Mi entorno es Linux Mint 17 y Java 8 Oracle. Lo pondré allí como una respuesta para las personas con el mismo problema.

He probado esto para la versión 2.4 de Artifact org.codehaus.mojo y eso funcionó ~

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

Aquí hay una sugerencia de sugerencia para los usuarios de Gradle sin derechos de administrador: agregue esta línea a su tarea JAXB:

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

se verá así:

jaxb {
    System.setProperty('javax.xml.accessExternalSchema', 'all')
    xsdDir = "${project.name}/xsd"
    xjc {
        taskClassname = "com.sun.tools.xjc.XJCTask"
        args = ["-npa", "-no-header"]
    }
}

Si está obteniendo este problema al convertir a WSDL a Jave con el CXF-Codegen-Plugin , puede resolverlo configurando el complemento a Fork y proporcione el "-djavax.xml.xml.xml.xml.xml.xml.xml.xml.xml.accessexternalschema= todos" JVMopción.

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

También recibí un tipo de error similar en Eclipse durante la prueba de un programa de servicio web en el servidor web 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.

Yo he añadido javax.xml.accessExternalSchema = All en jaxp.properties, pero no me funciona.

Sin embargo, encontré una solución a continuación que funciona para mí:Para GlassFish Server, necesito modificar el domain.xml del pez vidrio, camino:<path>/glassfish/domains/domain1 o domain2/config/domain.xml) y añadir, <jvm-options>-Djavax.xml.accessExternalSchema=all</jvm-options>bajo la <java-config> etiqueta

....

<java-config> ... <jvm-options>-Djavax.xml.accessExternalSchema=all</jvm-options> </java-config> ...y luego reinicie el servidor GlassFish

Cuando se usa Maven con Intellij IDE, puede agregar -Djavax.xml.accessExternalSchema=all a Maven Configuración en las opciones de JVM para Maven Build Tools Corredor Configuración

habilitando el acceso al esquema externo

Necesita habilitar el IDE y el servidor GlassFish para acceder al esquema externo para analizar el archivo WSDL del servicio web. Para habilitar el acceso, debe modificar los archivos de configuración del IDE y el servidor GlassFish. Para obtener más detalles, consulte las Preguntas frecuentes ¿Cómo habilitar el análisis de WSDL con un esquema externo? Configurando el IDE

Para generar un cliente de servicio web en el IDE de un servicio web o un archivo WSDL, debe modificar el archivo de configuración IDE (NETBEANS.conf) para agregar el siguiente interruptor a netbeans_default_options.

-J-Djavax.xml.accessExternalSchema=all

Para obtener más información sobre la ubicación y modificación del archivo de configuración de NetBeanS.conf, consulte NetBeans Conf Preguntas frecuentes. Configuración del servidor de glassfish

Si está implementando en el servidor de GlassFish, debe modificar el archivo de configuración del servidor de GlassFish (Dominio.xml) para permitir que el servidor acceda a los esquemas externos para analizar el archivo WSDL y generar el cliente de prueba. Para habilitar el acceso a esquemas externos, abra el archivo de configuración de glassfish (glassfish_install / glassfish / dominios / dominio1 / config / dominio.xml) y agregue el siguiente elemento de opción JVM (en negrita). Tendrá que reiniciar el servidor para que el cambio surte efecto.

</java-config>
  ...
  <jvm-options>-Djavax.xml.accessExternalSchema=all</jvm-options>
</java-config>

Para aquellos que utilizan la tarea de hormigas wsimport, una forma de pasar la opción como sugerida por @cmfly y especificada en el documentación es lo siguiente:

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

Lo usé con un proyecto regular maven , y se resolvió con esta configuración de dependencia de complementos para ejecutar el código 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>

Esto funciona en jdk1.8.0_65

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

Ahora se arregla en la versión 2.5 (lanzada en jul / 17). https://github.com/mojohaus/jaxws-maven-plugin/issues/8 .

Para las versiones 2.4.x hay una solución alternativa (según lo disminuyó en 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>

Otra solución para tratar: wiki.netbeans.org

El asistente de cliente de servicio web en el IDE analiza el archivo WSDL al generar un cliente de servicio web desde un servicio web o un archivo WSDL.Debe modificar el archivo de configuración IDE (NETBEANS.CONF) para agregar el siguiente cambio a NetBeans_Default_Options.Tendrá que reiniciar el IDE para que el cambio tenga efecto.

-J-Djavax.xml.accessExternalSchema=all

Al desplegar a GlassFish, debe habilitar el acceso al esquema externo para generar un cliente de prueba para un servicio web.Para habilitar el acceso, debe modificar el archivo de configuración del servidor de GlassFish (glassfish_install / glassfish / dominios / dominio1 / config / dominio.xml) y agregue el siguiente elemento de opción JVM.Tendrá que reiniciar el servidor para que el cambio surte efecto.

</java-config>
  ...
  <jvm-options>-Djavax.xml.accessExternalSchema=all</jvm-options>
</java-config>

Si está utilizando HNT, puede agregar un JVMARG a sus llamadas Java:

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

Una solución portátil muy simple sería, colocar la siguiente línea de código en algún lugar de una parte crucial de su código, una parte de la cual está seguro de que se ejecutará (por ejemplo, justo en el método principal):

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

Esto establece la propiedad del sistema necesaria programáticamente, sin tener que hacer cambios en los cambios de Maven Pom.XML complicados (que, por alguna razón, no funcionó para mí).

Acabo de intentarlo si usas SoapUI (5.4.x) y use Apache CXF herramienta para generar código java, poner javax.xml.accessExternalSchema = all en YOUR_JDK/jre/lib/jaxp.properties El archivo también funciona.

Otra alternativa es actualizar el script WSIMPORT.SH SHELL agregando lo siguiente:

El wsimport.sh se encuentra en este directorio:

jaxws-ri.2.2.28 / bin

ejecut "$ java" $ wsimport_opts -djavax.xml.accessExterschema= todos -jar "$ JAXWS_HOME / LIB / JAXWS-TOOL TOOLS.JAR" "$ @"

Otra referencia: Si está utilizando el GeneracDicetAtGode, antes de la versión 0.9.0, puede usar la solución se describe en este número, en el que este comportamiento afectó al plugin.

NetBeans Actualice su tutorial para JDK8 y este problema:

Comenzando con los servicios web de JAX-WS -> Habilitar el acceso a lo externoEsquema

Crea un archivo llamado jaxp.properties (si no existe) en la ruta a su "versión JDK/jre/lib" y luego agregue esta línea:

javax.xml.accessExternalSchema = all
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top