2016-04-22 10 views
1

受信HTTP POST要求をリッスンし、要求本体に含まれるXMLを取得して処理するJava Webアプリケーションを作成する必要があります。 Maven 4、Hibernate 3、およびXML-RPCサーバーを使用しています。 Mavenを使ってXML-RPC jarファイルを正常にインポートしました。Java XML-RPCサーブレットの設定

XML-RPCは地球上で最もシンプルなものだと言われていますが、実装には苦労しています。私はwebappsにはかなり新しいです。 は、Apache XML-RPCのチュートリアルを見て、私は私のようなクラスを作成する必要があります理解:

public class MyServer extends XmlRpcServlet { 
    private XmlRpcServer server = new XmlRpcServer(); 
    @Override 
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     server.addHandler("myProcess", new MyProcessHandler); 
     byte[] result = server.execute (request.getInputStream()); 
     response.setContentType ("text/xml"); 
     response.setContentLength (result.length()); 
     OutputStream out = response.getOutputStream(); 
     out.write (result); 
     out.flush(); 
    } 
} 

しかし、「実行」メソッドがXmlRpcRequestパラメータを想定しているため、それはコンパイルされません。私が間違っていることについてのヒントは?

これ以外に、私は自分の関数myProcess()からリクエストのボディを取得する方法を理解していません。私はMyProcessHandlerクラス(クラスを拡張しない)をmyProcess()関数を実装しています。この関数にパラメータを追加する必要はありますか?そういうタイプなのですか?

答えて

1

まあ、応答なし:( 私はそれが最終的に動作させるために管理しなかったしかし、私は他の人のために私の解決策を共有するつもりです

主な問題は、XML-RPCのバージョンである:Apacheの最初のApacheはXML-RPCのオンライン文書の一部を更新しましたが、他の部分ではまだ各ページにヒントを持たないhelma-xmlrpcを参照していますが、helma-xmlrpcという名前の古いバージョンを作成してからorg.apache.xmlrpcにリファクタリングしました。また、Apacheは、helma-xmlrpcを使用しているプロジェクトでは、新しいバージョンのorg.apache.xmlrpcを使用するためにインポートを更新するだけで、コードには何の影響もないと言われています。いくつかのクラスが消えたり、署名が変更されたりした場合、いくつかのクラスはサブディレクトリに置かれているので、インポートはもう機能しません。

大丈夫です。だから、わかったら、Apache XML-RPCを扱うインターネットチュートリアルのほとんどは古いhelma-xmlrpcバージョンを使用していますが、そのインポートはorg.apache.xmlrpcとして表示されることも理解しました。その結果、org.apache.xmlrpcを使用する独自のプロジェクトに貼り付けると、それらの実装は動作しません。それはコンパイルされません。 最新のorg.apache.xmlrpc-implementation-with-servletsチュートリアルをインターネットで検索しましたが、結果はありません。それで、私は古いhelma-xmlrpcを使うことに決めました。 Helmaを使うと、私の最初のメッセージに投稿したコードがコンパイルされて正しいのです。

リスナーとMyProcessHandlerクラス間のリンクは、addHandler関数のおかげで実現します。ハンドラが宣言されると、 'myProcess.myFunction'のようなmethodNameを持つすべての着信要求は、server.execute(...)命令が処理されるときにMyProcessHandler.myFunction()に自動的にリダイレクトされます。 これが機能するには、myFunction()は1つのString入力パラメーターを宣言する必要があります。 myFunction()が呼び出されると、このパラメータにはリクエストの本文が含まれます(サーブレットのrequest.getInputStream()によって抽出されます)。 myFunction()も何かを返す必要があり、サーブレットのbyte []結果変数に返されます。

私は...非常に完全かつ唯一org.apache.xmlrpcを使用しての無見せかけてhelma-XMLRPCの治療、下記のリンクをうまく利用して作られた:http://www.perfectxml.com/oreilly/chapter.asp?row_id=11

私はこの答えは(私の十分に明確であると思います英語圏では完璧ではありません...)、それは他の開発者がApache XML-RPCを理解するのに役立ちます。

関連する問題