Java メソッドを Web サービスとして公開する本当に簡単な方法を知っている人はいますか? Tomcat や Jetty、その他のコンテナー フレームワークを使用することによるオーバーヘッドは本当に必要ありません。
シナリオ: ローカル LAN 上の他のマシンからアクセスしたいサービス タイプのアプリケーションに Java メソッドのセットがあります。
Java メソッドを Web サービスとして公開する本当に簡単な方法を知っている人はいますか? Tomcat や Jetty、その他のコンテナー フレームワークを使用することによるオーバーヘッドは本当に必要ありません。
シナリオ: ローカル LAN 上の他のマシンからアクセスしたいサービス タイプのアプリケーションに Java メソッドのセットがあります。
まあ、Tomcat や Jetty は、一部のメソッドだけを Web サービスとして公開するのにはやり過ぎかもしれません。しかし一方で、それほど複雑ではなく、彼らが仕事をするので、なぜですか?
少し前に同様の問題があり、Tomcat を Axis2 と一緒に使用しました。Tomcat をダウンロードして解凍し、Axis2 WAR をデプロイするだけです。Web サービスを公開するには、いくつかのアプローチがあります。
通常どおりアプリケーションをビルドし、Web サービス クラスとメソッドに javax.jws.* の適切な注釈を付けます。すべてを瓶に詰めます。jar ファイルの META-INF ディレクトリに service.xml を作成し、これを入れます。
<service name="name of the service" scope="<one of request, session or application>">
<description>
optional description of your service
</description>
<messageReceivers>
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
</messageReceivers>
<parameter name="ServiceClass" locked="false">put here the fully qualified name of your service class (e.g. x.y.z.FooService)</parameter>
</service>
.jar の名前を .aar に変更し、/webapps/axis2/WEB-INF/services/ ディレクトリに配置します。tomcat を起動すると、サービスがデプロイされます。axis2 ページ ( http://localhost:8080/axis2/ ) にアクセスして、実行されているかどうかを確認できます。そこには、デプロイされているサービスとエクスポートされているメソッドが表示されます。また、サービスに接続するための WSDL URL を取得することもできます。
Axis2 の使用について詳しくは、http: //ws.apache.org/axis2/1_4_1/contents.html を参照してください。ここで説明したアプローチは、ドキュメントではこれとまったく同じではありませんが、非常にうまく機能します。
更新: Web サービスを提供したいだけで、Tomcat の他の機能 (単純な古い Web ページ、jsps、その他のものの提供など) を本当に必要としない場合は、Axis2 スタンドアロン サーバーを使用することもできます。しかし、セットアップ部分を除いて、私が説明したことは何も変わりません。
これについてもう少し詳細なバージョンを書きました。これはhttp://www.slashslash.de/lang/en/2008/10/java-webservices-mit-apache-tomcat-und-axis2/にあります。 (URL のドイツ語にイライラさせないでください。英語で書かれています)
Web サービスは HTTP に依存しています。tomcat や Jetty は必要ないかもしれません。その場合、HTTP を自分で実装する必要があります。
うーん。RMIだけを使用しないのはなぜですか?
Jetty はかなり軽量です。それ以外の場合は、XML-RPC が唯一の賢明なオプションだと思います。
サイモンが説明したものよりも簡単な解決策は、すでにそれを行うツールを使用することです。Eclipse を使用する場合は、http: //ws.apache.org/axis2/tools/1_2/eclipse/servicearchiver-plugin.html を使用できます。
aar ファイルを生成します。