2012-02-02 11 views
12

Mi viene detto che Java 7 dovrebbe includere JAX-WS in modo tale che non abbia bisogno di librerie come quelle di Apache CXF. Tuttavia, il official docs dicono:Java 7 include un'implementazione JAX-WS o solo l'API?

Questa release contiene API Java per l'elaborazione XML (JAXP) 1.4.5, supporta Java Architecture for XML Binding (JAXB) 2.2.3, e supporta Java API per servizi Web XML (JAX-WS) 2.2.4.

Inoltre, la Eclipse page on JAX-WS parla di utilizzare implementazioni come Apache CXF, Metro Sole, o Apache Axis. E ogni esempio/tutorial che posso trovare su JAX-WS utilizza un set di librerie come CXF o Metro.

Ho un progetto in Eclipse che chiama "Endpoint.publish (...)" su una classe con un'annotazione javax.jws.WebService. Il file WSDL a cui si fa riferimento di seguito risiede all'esterno di Eclipse. Questo progetto gira (come una "Applicazione Java") bene con le librerie di Apache CXF include. Non appena rimuovo loro (ed Eclipse riferimenti a Apache CXF), si blocca con la seguente eccezione:

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) 

Quindi, o sto facendo qualcosa di sbagliato o Apache sta fornendo implementazioni di cose a cui il JDK se stesso solo ha API. Si prega di indicare quale è il caso, insieme al solito link a qualcosa di rilevante.

+1

Java 7 contiene un'implementazione JAX-WS ma è piuttosto limitata rispetto a CXF o Metro. –

risposta

9

Jdk 7 (come 6) include un'implementazione basata sulla metropolitana.

Come si può notare dall'eccezione, l'implementazione interna è in esecuzione "com.sun.xml.internal.ws.transport.http.server.EndpointImpl". Il problema sembra essere che non gli piace la tua WsdlLocation (credo che jaxws si aspetti una risorsa locale, ma tu gli abbia dato una risorsa http).

+0

Grazie per i dettagli. Hai ragione che oltrepasserò quell'eccezione se inserisco il file WSDL nel mio classpath. Sfortunatamente, sono tornato a un'eccezione con la quale ho avuto a che fare solo perché CXF utilizzava la sua libreria JAXB. La versione corrente di JAXB è la 2.2.4, che lancia una NullPointerException. Quando ho sostituito il jaxb-impl * .jar di CXF con la versione 2.2.3, l'ho risolto. Ma non riesco a trovare il sistema jaxb-impl, e mettere 2.2.3 sul classpath non risolve il problema. – kuloch

+1

@kuloch - è necessario utilizzare il meccanismo di override approvato per utilizzare un'implementazione jaxb o jaxws più recente, vedere http://docs.oracle.com/javase/6/docs/technotes/guides/standards/. consigli correlati qui http://weblogs.java.net/blog/ramapulavarthi/archive/2007/01/problems_using.html – jtahlborn

+0

Grazie. Ci siamo imbattuti in questo prima di vedere il tuo post, e il servizio è di nuovo in esecuzione - questa volta su (presumibilmente) Metro. – kuloch