首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置Java XML-RPC Servlet

设置Java XML-RPC Servlet
EN

Stack Overflow用户
提问于 2016-04-23 01:45:17
回答 2查看 1.1K关注 0票数 2

我必须创建一个Java webapp来侦听传入的HTTP POST请求,然后检索请求正文中包含的XML,以便对其进行处理。我使用的是Maven4、Hibernate 3和XML-RPC服务器。我使用Maven成功导入了XML-RPC jar文件。

虽然似乎每个人都说XML-RPC是世界上最简单的事情,但我很难实现它。我对webapps还是个新手。查看Apache XML-RPC教程,我知道我需要创建一个类,如下所示:

代码语言:javascript
复制
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()中获取请求的主体。我有一个实现myProcess()函数的MyProcessHandler类(它不扩展任何类)。是否需要在此函数中添加参数?那么它会是哪种类型呢?

EN

回答 2

Stack Overflow用户

发布于 2016-06-10 16:04:52

主要问题在于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函数。一旦声明了处理程序,当指令server.execute(...)时,所有带有methodName的传入请求都会自动重定向到MyProcessHandler.myFunction()。已被处理。

为此,myFunction()必须声明一个字符串输入参数。当调用myFunction()时,此参数包含请求的主体(由servlet中的request.getInputStream()提取)。myFunction()还必须返回一些内容,这些内容将被返回到servlet的byte[]结果变量中。

我很好地利用了下面的链接,非常完整,只处理helma-xmlrpc而不伪装使用org.apache.xmlrpc...:http://www.perfectxml.com/oreilly/chapter.asp?row_id=11

我希望这个答案足够清楚(我的英语口语不是很好……)它将帮助其他开发人员理解Apache XML-RPC。

票数 2
EN

Stack Overflow用户

发布于 2021-09-15 11:15:59

您可以使用XmlRpcServletServer (apache xml-rpc 3.1.3):

代码语言:javascript
复制
public class EmbeddedXmlRpc extends HttpServlet
{
  ...
  protected XmlRpcServletServer server = new XmlRpcServletServer();
  ...
  server.setHandlerMapping(phm);
  ...
  protected void processRequest(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException
  {
    server.execute(request, response);
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36800227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档