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, diciendo:
java.lang.AssertionError: org.xml.sax.SAXParseException; systemId: jar: file: /path/to/glassfish/modules/jaxb-osgi.jar! /com/sun/tools/xjc/reader/xmlschema/bindinfo/binding.xsd; número de línea: 52; columnNumber: 88; schema_reference: no se pudo leer el documento de esquema ' xjc.xsd ' porque el acceso a 'archivo' no está permitido debido a la restricción establecida por la propiedad accessExternalSchema .
La plataforma Java predeterminada para NetBeans era JDK8 (versión oficial de Oracle), así que cuando cambié mi archivo netbeans.conf e hice JDK7 (de Oracle, también) como mi predeterminado, todo funcionó bien. Así que creo que el problema es con JDK8. Aquí está mi java -version
salida:
Java versión "1.8.0"
Java (TM) SE Runtime Environment (compilación 1.8.0-b132)
Java HotSpot (TM) VM de servidor de 64 bits (compilación 25.0-b70, modo mixto)
Por ahora, mantengo JDK7 como mi plataforma Java predeterminada. Si hay una manera de hacer que JDK8 funcione, por favor comparta.
Respuestas:
Bueno, encontré la solución. (basado en http://docs.oracle.com/javase/7/docs/api/javax/xml/XMLConstants.html#ACCESS_EXTERNAL_SCHEMA )
Cree un archivo llamado
jaxp.properties
(si no existe) debajo/path/to/jdk1.8.0/jre/lib
y luego escriba esta línea en él:Eso es todo. Disfruta JDK 8.
fuente
/path/to/jdk1.8.0/lib
no debajo deljre
directorio adicional .No es una respuesta real, sino más como una 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:
fuente
accessExternalSchema=all
valor se establece de forma predeterminada si utiliza versiones posteriores (como 0.12.3) delorg.jvnet.jaxb2.maven2:maven-jaxb2-plugin
complemento.Ejecuto construcciones de hormigas dentro de Eclipse IDE (4.4, Luna, en Windows 7 x64). En lugar de modificar la biblioteca JRE instalada o cualquier script ant (tengo varios 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 compilación Ant:
fuente
Lo siguiente funciona para wsimport 2.2.9 incluido en jdk 1.8.0_66:
fuente
wsimport
directamente.En mi caso agregando:
a jaxp.properties no funcionó, debo agregar:
Mi entorno es linux mint 17 y java 8 oracle. Lo pondré allí como respuesta para las personas con el mismo problema.
fuente
Probé esto para la versión 2.4 del artefacto org.codehaus.mojo y funcionó ~
fuente
-Djavax.xml.accessExternalSchema=all
que están configurados en su declaración de complemento. Se discute en Netbeans Bug 244891Aquí hay una pista Sugerencia para usuarios de gradle sin derechos de administrador: agregue esta línea a su tarea jaxb:
se verá así:
fuente
Si tiene este problema al convertir wsdl a jave con el plugin cxf-codegen-plugin , puede resolverlo configurando el plugin en fork y proporcionando la opción JVM adicional "-Djavax.xml.accessExternalSchema = all".
fuente
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.
He añadido
javax.xml.accessExternalSchema = All
en eljaxp.properties
, pero el trabajo doesnot para mí.Sin embargo, encontré una solución aquí debajo que funciona para mí: para GlassFish Server, necesito modificar
domain.xml
GlassFish, ruta:<path>/glassfish/domains/domain1
odomain2/config/domain.xml
) y agregar,<jvm-options>-Djavax.xml.accessExternalSchema=all</jvm-options>
debajo de la<java-config>
etiqueta<java-config> ... <jvm-options>-Djavax.xml.accessExternalSchema=all</jvm-options> </java-config>
... y luego reinicie el servidor GlassFishfuente
Habilitación del acceso al esquema externo
Debe 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 desde un servicio web o un archivo WSDL, debe modificar el archivo de configuración IDE (netbeans.conf) para agregar el siguiente modificador a netbeans_default_options.
Para obtener más información sobre cómo localizar y modificar el archivo de configuración netbeans.conf, consulte las Preguntas frecuentes sobre Netbeans Conf. Configurar el servidor GlassFish
Si está implementando en GlassFish Server, debe modificar el archivo de configuración de GlassFish Server (domain.xml) para permitir que el servidor acceda a 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 GlassFish (GLASSFISH_INSTALL / glassfish / domains / domain1 / config / domain.xml) y agregue el siguiente elemento de opción JVM (en negrita). Deberá reiniciar el servidor para que el cambio surta efecto.
fuente
Al usar Maven con IntelliJ IDE, puede agregar
-Djavax.xml.accessExternalSchema=all
a la configuración de Maven en Opciones de JVM para la configuración de Maven Build Tools Runnerfuente
Esto funciona en jdk1.8.0_65
fuente
Para aquellos que usan la tarea ANT
wsimport
, una forma de pasar la opción sugerida por @CMFly y especificada en la documentación es la siguiente:fuente
Ahora está arreglado en la versión 2.5 (lanzada en julio / 17). https://github.com/mojohaus/jaxws-maven-plugin/issues/8 .
Para las versiones 2.4.x hay una solución alternativa (como se describe en https://github.com/mojohaus/jaxws-maven-plugin/issues/4 ):
fuente
Lo usé con un proyecto regular de Maven , y lo resolví con esta configuración de dependencia de complemento para ejecutar el
xjc plugin
:fuente
jaxws-maven-plugin
a 2.5 como se especifica en otras respuestas mojohaus.org/jaxws-maven-plugin/usage.html Pero aún así, la mejor respuesta en mi caso, ¡gracias!Cree un archivo llamado
jaxp.properties
(si no existe) debajo de la ruta a su "versión JDK / jre / lib" y luego agregue esta línea:fuente
Otra solución para abordar: wiki.netbeans.org
El asistente de Cliente de servicio web en el IDE analiza el archivo WSDL al generar un cliente de servicio web a partir de un servicio web o archivo WSDL. Debe modificar el archivo de configuración IDE (netbeans.conf) para agregar el siguiente modificador a netbeans_default_options. Deberá reiniciar el IDE para que el cambio surta efecto.
Al implementar en 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 GlassFish (GLASSFISH_INSTALL / glassfish / domains / domain1 / config / domain.xml) y agregar el siguiente elemento de opción JVM. Deberá reiniciar el servidor para que el cambio surta efecto.
fuente
Si está utilizando hormiga, puede agregar un jvmarg a sus llamadas de Java:
fuente
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, directamente en el método principal):
Esto establece la propiedad del sistema necesaria mediante programación, sin tener que hacer cambios difíciles de maven pom.xml (que por alguna razón no funcionó para mí).
fuente
Acabo de probar que si usa
SoapUI (5.4.x)
y usa laApache CXF
herramienta para generar código java, ponerjavax.xml.accessExternalSchema = all
en elYOUR_JDK/jre/lib/jaxp.properties
archivo también funciona.fuente
Otra alternativa es actualizar el script de shell wsimport.sh agregando lo siguiente:
El wsimport.sh se encuentra en este directorio:
jaxws-ri.2.2.28 / bin
exec "$ JAVA" $ WSIMPORT_OPTS -Djavax.xml.accessExternalSchema = all -jar "$ JAXWS_HOME / lib / jaxws-tools.jar" "$ @"
fuente
Otra referencia: si está utilizando la
maven-jaxb2-plugin
versión anterior a la 0.9.0, puede usar la solución descrita en este problema , en la que este comportamiento afectó al complemento.fuente
NetBeans actualiza su tutorial para JDK8 y este número:
Introducción a los servicios web JAX-WS -> Habilitación del acceso al esquema externo
fuente