2012-02-02 8 views
12

Powiedziano mi, że Java 7 ma zawierać JAX-WS tak, że nie potrzebuję bibliotek takich jak te w Apache CXF. Jednak official docs powiedzieć:Czy Java 7 zawiera implementację JAX-WS lub tylko interfejs API?

Niniejsza informacja prasowa zawiera Java API dla XML Processing (JAXP) 1.4.5, obsługuje Java Architecture for XML Binding (JAXB 2.2.3) i obsługuje Java API for XML Web Services (JAX-WS) 2.2.4.

Co więcej, Eclipse page on JAX-WS mówi o użyciu takich implementacji, jak Apache CXF, Sun Metro lub Apache Axis. I każdy przykład/samouczek jaki mogę znaleźć na JAX-WS używa zestawu bibliotek jak CXF lub Metro.

Mam projekt w Eclipse, który nazywa "Endpoint.publish (...)" na klasie z adnotacją javax.jws.WebService. Plik WSDL wymieniony poniżej znajduje się poza środowiskiem Eclipse. Ten projekt działa (jako "aplikacja Java") w porządku z bibliotekami Apache CXF zawiera. Jak tylko je usunąć (i Eclipse odniesień do CXF Apache), to wywala się z następującym wyjątkiem:

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) 

Więc albo robię coś źle lub Apache dostarcza implementacje rzeczy, do których sama tylko JDK ma interfejsy API. Proszę wskazać, co się dzieje, wraz ze zwykłym odnośnikiem do czegoś istotnego.

+1

Java 7 zawiera implementację JAX-WS, ale jest dość ograniczona w porównaniu z CXF lub Metro. –

Odpowiedz

9

Jdk 7 (podobnie jak 6) zawiera implementację opartą na metrze.

Jak widać z Twojego wyjątku, wewnętrzna implementacja uruchamia "com.sun.xml.internal.ws.transport.http.server.EndpointImpl". Problem wydaje się, że nie podoba się WsdlLocation (wierzę, że jaxws oczekuje zasobów lokalnych, ale dałeś mu zasobu http).

+0

Dzięki za szczegóły. Masz rację, że pomijam ten wyjątek, jeśli umieściłem plik WSDL w mojej ścieżce klas. Niestety, powróciłem do wyjątku, z którym miałem do czynienia tylko dlatego, że CXF korzystał z własnej biblioteki JAXB. Obecna wersja JAXB to 2.2.4, która generuje wyjątek NullPointerException. Kiedy wymieniłem jaxb-impl * .jar CXF na wersję 2.2.3, to to naprawiło. Ale nie mogę znaleźć systemu jaxb-impl, a umieszczenie 2.2.3 na ścieżce klas nie rozwiązuje go. – kuloch

+1

@kuloch - aby użyć nowszej implementacji jaxb lub jaxws, należy użyć zatwierdzonego mechanizmu zastępowania, zobacz http://docs.oracle.com/javase/6/docs/technotes/guides/standards/. powiązane porady tutaj http://weblogs.java.net/blog/ramapulavarthi/archive/2007/01/problems_using.html – jtahlborn

+0

Dzięki. Natknęliśmy się na to, zanim zobaczyłem twój post, a usługa znowu działa - tym razem na (prawdopodobnie) w Metro. – kuloch