2016-04-22 77 views
1

我必須製作一個Java webapp來偵聽傳入的HTTP POST請求,然後檢索包含在請求正文中的XML以便處理它。 我正在使用Maven 4,Hibernate 3和XML-RPC服務器。我使用Maven成功導入了XML-RPC jar文件。設置Java XML-RPC Servlet

儘管每個人似乎都說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的第一創建了一個名爲helma-xmlrpc的舊版本,然後將其重構爲org.apache.xmlrpc。儘管Apache更新了XML-RPC聯機文檔的某些部分,但其他一些部分仍然在每個頁面上引用helma-xmlrpc而沒有提示使用版本 此外,Apache說,使用helma-xmlrpc的項目只需要更新它們的導入,以便使用新版本org.apache.xmlrpc,對代碼沒有影響 - 這是完全錯誤的,有些方法甚至是有些班級消失了,或者簽名改變了,有些類已經被放入子目錄中,所以導入不再起作用。

好的。所以一旦我明白了這一點,我也明白,大多數處理Apache XML-RPC的Internet教程都使用舊的helma-xmlrpc版本,但將其導入顯示爲org.apache.xmlrpc。因此,如果將它們粘貼到使用org.apache.xmlrpc的自己的項目中,它們的實現將不起作用。它甚至沒有編譯。 我通過Internet查看了最新的org.apache.xmlrpc-implementation-with-servlets教程,但沒有結果。因此我決定使用舊的helma-xmlrpc,並且一切順利。隨着赫爾馬,我發佈在我的第一條消息中的代碼現在編譯並且是正確的。

至於監聽器和MyProcessHandler類之間的鏈接,由於使用了addHandler函數,所以它存在。一旦處理程序被聲明,當處理指令server.execute(...)時,帶有methodName類似'myProcess.myFunction'的所有傳入請求都會自動重定向到MyProcessHandler.myFunction()。 對於這個工作,myFunction()必須聲明一個String輸入參數。當調用myFunction()時,此參數包含請求的主體(由servlet中的request.getInputStream()提取)。 myFunction()還必須返回一些內容,這些內容將返回到servlet的byte []結果變量中。

我取得了良好的使用下面的鏈接,非常完整,只是沒有藉口利用org.apache.xmlrpc的helma-XMLRPC的治療的......:http://www.perfectxml.com/oreilly/chapter.asp?row_id=11

我希望這個答案是非常明顯的(我講英語並不完美...),這將有助於其他開發人員理解Apache XML-RPC。