(Win64) サーバーを 8.5.3FP2 から FP3 にアップグレードしたときに、Domino Web サービス プロバイダーが壊れました。それに関する情報をXPage フォーラムに書きました。
Axis ベースのレガシーと戦う代わりに、Java 1.6 に付属する JAX WS を使用したいと思います。この非常に単純な例を試してみることにしました。Designer Eclipse の Java プロジェクトにコードをコピーして貼り付けて実行すると、ローカル マシンで Web サービスが起動して実行されました。Web サービスは応答し、WSDL を返しました。
次に、コード/Java 要素としてサーバー上の NSF にコードをコピーして貼り付け、次のように変更しました。
public static void main(String[] args)
に
public HelloWorldPublisher()
XPage で SSJS からこのコンストラクターを呼び出しました。このエラーが発生しました:
スレッド「メイン」の例外 com.sun.xml.internal.ws.model.RuntimeModelerException : パッケージを持たないクラスで @WebService.targetNamespace を指定する必要があります。クラス: HelloWorldImpl
クラスはパッケージでした。Domino サーバー JVM のコマンドラインでも実行すると、同じエラーが発生しました。グーグルの後、私はこれを追加しました
@WebService(targetNamespace="http://mycompany.net/dev/ph")
HelloWorldと_
@WebService(endpointInterface="com.mkyong.ws.HelloWorld", targetNamespace="http://mycompany.net/dev/ph", portName="HelloWorldPort", name="HelloWorld", serviceName="HelloWorldService")
NSF の HelloWorldImpl に追加して実行します。その後、Web サービスは稼働しているように見えました。
次に、サーバーが遅かったので起動しましたが、その後 WSDL が表示されませんでした。コードを何度も実行し、HTTP を再起動して、@WebService
属性を削除しようとしました。また、サーバーでコマンドラインを使用してコードを再度実行しようとしましたが、常に上記の@WebService.targetNamespaceエラーが発生します。理由はわかりません。
これで、常に Domino コンソールに次のように表示されます。
java.lang.NoClassDefFoundError: com.sun.xml.internal.ws.api.streaming.XMLStreamWriterFactory (初期化失敗) java.lang.J9VMInternals.initialize(J9VMInternals.java:140) com.sun.xml.internal.ws.server.SDDocumentImpl.writeTo(SDDocumentImpl.java:266) com.sun.xml.internal.ws.transport .http.HttpAdapter.publishWSDL(HttpAdapter.java:538) at com.sun.xml.internal.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:230) at com.sun.xml.internal.ws.transport .http.server.WSHttpHandler.handleExchange(WSHttpHandler.java:107) com.sun.xml.internal.ws.transport.http.server.WSHttpHandler.handle(WSHttpHandler.java:92) com.sun.net.httpserver で.Filter$Chain.doFilter(Filter.java:77)、sun.net.httpserver.AuthFilter.doFilter(AuthFilter.java:77) com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:80) ) com.sun.net.httpserver の sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(ServerImpl.java:569) にあります。Filter$Chain.doFilter(Filter.java:77) で sun.net.httpserver.ServerImpl$Exchange.run(ServerImpl.java:541) で java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:897) でjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:919) で java.lang.Thread.run(Thread.java:738) で
サーバー上のこの URL にアクセスする場合:
http://localhost:9999/ws/hello?wsdl
これはJVM httpサーバーを使用していると思うので、Dominoログに何かが記録されることに少し驚いています。最初に機能した理由がわかりませんが、今ではこのクラスが見つかりません。
JAX WS エンドポイントをドミノ サーバーに公開するにはどうすればよいですか?
編集
ここから JAX WS jar をダウンロードしました。
それらを\jvm\lib\extフォルダーに配置しました。WSDL URL が再び機能し始めました! また、エンドポイント URL にはいくつかの情報が含まれています。この機能は JVM 1.6 に含まれているはずなので、なぜこれをしなければならなかったのかわかりません。次に、エンドポイント コードで Domino オブジェクトを使用してみます。
JAX WS で Domino http サーバーを使用することは可能ですか?
ありがとう、
- パヌ