2012-02-02 6 views
12

Java 7にJAX-WSが含まれていると言われています。Apache CXFのようなライブラリは必要ありません。しかし、official docsは言う:Java 7にはJAX-WS実装またはAPIだけが含まれていますか?

このリリースでは、XML処理(JAXP)1.4.5用のJava APIが含まれている、 は、XMLバインディング(JAXB)2.2.3用のJavaアーキテクチャーをサポートし、XML Webサービスのための のJava APIをサポートしています(JAX-WS)2.2.4。

また、Eclipse page on JAX-WSは、Apache CXF、Sun Metro、Apache Axisなどの実装を使用しています。また、JAX-WSで見つかるすべてのサンプル/チュートリアルでは、CXFやMetroのようなライブラリセットを使用しています。

私はEclipseで、javax.jws.WebServiceアノテーションを持つクラスで "Endpoint.publish(...)"を呼び出すプロジェクトを持っています。以下で参照されるWSDLファイルは、Eclipseの外部にあります。このプロジェクトは、Apache CXFライブラリに含まれている(「Javaアプリケーション」として)正常に動作します。すぐに私はそれらを削除(およびApache CXFへの参照をエクリプス)として、それが次の例外でクラッシュ:

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) 

をだから、どちらか、私は何か間違ったことをやっているか、Apacheは、物事の実装を供給されているJDK自体のみAPIを持っています。関連するものへの通常のリンクと一緒に、どちらのケースかを指摘してください。

+1

Java 7にはJAX-WS実装が含まれていますが、CXFやMetroに比べてかなり制限されています。 –

答えて

9

Jdk 7(6と同様)は、メトロベースの実装を含みます。

例外からわかるように、内部実装では「com.sun.xml.internal.ws.transport.http.server.EndpointImpl」が実行されています。問題はあなたのWsdlLocationが好きではないようです(私はjaxwsがローカルリソースを期待していると思いますが、あなたはそれにhttpリソースを与えています)。

+0

詳細をお寄せいただきありがとうございます。あなたがクラスパスにWSDLファイルを置くと、私はその例外を越えてしまいます。残念ながら、私はCXFが独自のJAXBライブラリを使用していたため、以前は扱っていなかった例外に戻っています。 JAXBの現在のバージョンは2.2.4で、NullPointerExceptionをスローします。私がCXFのjaxb-impl * .jarを2.2.3に置き換えたら、それが修正されました。しかし、私はシステムjaxb-implを見つけることができず、2.2.3をクラスパスに置いてもそれを修正することはできません。 – kuloch

+1

@kuloch - より新しいjaxbまたはjaxws実装を使用するには、承認されたオーバーライドメカニズムを使用する必要があります(http://docs.oracle.com/javase/6/docs/technotes/guides/standards/を参照)。関連するアドバイスはこちらhttp://weblogs.java.net/blog/ramapulavarthi/archive/2007/01/problems_using.html – jtahlborn

+0

ありがとうございました。私はあなたの記事を見て、サービスが再び実行されている - 私は(おそらく)メトロのこの時間を実行する前に、それを見つけた。 – kuloch

関連する問題