Error de generación de cliente de servicio web con JDK8
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; systemId: 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; esquema_referencia: 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 la propiedad accessExternalSchema .
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
salida:
versión de java "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, mantendré JDK7 como mi plataforma Java predeterminada. Si hay una manera de hacer que JDK8 funcione, compártala.
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:
javax.xml.accessExternalSchema = all
Eso es todo. Disfruta del JDK 8.
No es una respuesta real, sino más bien una referencia.
Si está utilizando el complemento jaxws Maven y recibe 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>
Ejecuto compilaciones ant 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:
-Djavax.xml.accessExternalSchema=all
Lo siguiente funciona para wsimport 2.2.9 incluido en jdk 1.8.0_66:
wsimport -J-Djavax.xml.accessExternalSchema=all ....