设置Java XML-RPC Servlet

时间:2016-04-22 17:45:17

标签: java servlets xml-rpc

我必须创建一个Java webapp来监听传入的HTTP POST请求,然后检索请求体中包含的XML以便处理它。 我正在使用Maven 4,Hibernate 3和XML-RPC服务器。我使用Maven成功导入了XML-RPC jar文件。

虽然每个人似乎都说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 ();
    }
}

但是这不会编译,因为“execute”方法需要一个XmlRpcRequest参数。关于我做错了什么的暗示?

除此之外,我不明白我将如何从我的函数myProcess()获取请求的主体。我有一个MyProcessHandler类(它没有扩展任何类)实现myProcess()函数。我需要在此功能中添加参数吗?那么它会是哪种类型?

1 个答案:

答案 0 :(得分:1)

好吧,没有答案:( 但是我确实设法让它最终成功,所以我将为其他人分享我的解决方案。

主要问题在于XML-RPC版本:Apache首先制作了一个名为helma-xmlrpc的旧版本,然后通过对org.apache.xmlrpc进行深度更改对其进行重构。尽管Apache更新了其XML-RPC在线文档的某些部分,但其他一些部分仍然引用了helma-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函数,它存在。一旦声明了处理程序,所有带有methodName的传入请求就像' myProcess.myFunction'处理指令server.execute(...)时,会自动重定向到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。