2012-02-02 7 views
12

Me dijeron que se supone que Java 7 incluye JAX-WS de modo que no necesito bibliotecas como las de Apache CXF. Sin embargo, el official docs dicen:¿Java 7 incluye una implementación de JAX-WS o solo la API?

Este comunicado contiene API Java para Procesamiento de XML (JAXP) 1.4.5, apoya jaxb (JAXB) 2.2.3, y apoya API de Java para servicios web XML (JAX-WS) 2.2.4.

Además, el Eclipse page on JAX-WS habla de utilizar implementaciones como Apache CXF, Sun Metro o Apache Axis. Y cada ejemplo/tutorial que puedo encontrar en JAX-WS usa una biblioteca configurada como CXF o Metro.

Tengo un proyecto en Eclipse que llama "Endpoint.publish (...)" en una clase con una anotación javax.jws.WebService. El archivo WSDL al que se hace referencia a continuación reside fuera de Eclipse. Este proyecto se ejecuta (como una "Aplicación Java") bien con las bibliotecas Apache CXF incluye. Tan pronto como me los quito (Eclipse y referencias a Apache CXF), se estrella con la siguiente excepción:

com.sun.xml.internal.ws.server.ServerRtException: [failed to localize] cannot.load.wsdl(http://localhost:8081/wsdl/csw.wsdl) 
    at com.sun.xml.internal.ws.transport.http.server.EndpointImpl.getPrimaryWsdl(EndpointImpl.java:313) 

Así que, o estoy haciendo algo mal o Apache es el suministro de implementaciones de cosas a las que el propio sólo de JDK tiene API. Por favor, indique cuál es el caso, junto con el enlace habitual a algo relevante.

+1

Java 7 contiene una implementación de JAX-WS, pero es bastante limitada en comparación con CXF o Metro. –

Respuesta

9

Jdk 7 (como 6) incluye una implementación basada en el metro.

Como puede ver en su excepción, la implementación interna se ejecuta "com.sun.xml.internal.ws.transport.http.server.EndpointImpl". El problema parece ser que no le gusta su WsdlLocation (creo que jaxws está esperando un recurso local, pero le ha dado un recurso http).

+0

Gracias por los detalles. Tiene razón en que supero esa excepción si pongo el archivo WSDL en mi classpath. Desafortunadamente, ahora vuelvo a una excepción con la que solo me he enfrentado anteriormente porque CXF estaba usando su propia biblioteca JAXB. La versión actual de JAXB es 2.2.4, que arroja una NullPointerException. Cuando reemplacé jaxb-impl * .jar de CXF con la versión 2.2.3, eso lo solucionó. Pero no puedo encontrar el sistema jaxb-impl, y poner 2.2.3 en el classpath no lo soluciona. – kuloch

+1

@kuloch: necesita utilizar el mecanismo de anulación endosada para usar una implementación jaxb o jaxws más nueva, consulte http://docs.oracle.com/javase/6/docs/technotes/guides/standards/. consejos relacionados aquí http://weblogs.java.net/blog/ramapulavarthi/archive/2007/01/problems_using.html – jtahlborn

+0

Gracias. Nos dimos cuenta de eso antes de ver tu publicación, y el servicio se está ejecutando nuevamente, esta vez en (presumiblemente) Metro. – kuloch

Cuestiones relacionadas