gpt4 book ai didi

java - 设置 Java XML-RPC Servlet

转载 作者:行者123 更新时间:2023-11-30 07:26:03 25 4
gpt4 key购买 nike

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

虽然每个人似乎都说 XML-RPC 是世界上最简单的东西,但我在实现它时遇到了困难。我对网络应用程序很陌生。查看 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() 函数。我需要在这个函数中添加一个参数吗?那么它会是哪种类型呢?

最佳答案

主要问题在于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 的项目中,它们提供的实现将不起作用。它甚至无法编译。

我在互联网上查找了最新的 org.apache.xmlrpc-implementation-with-servlets 教程,但没有结果。因此我决定使用旧的 helma-xmlrpc 并且一切顺利。有了 Helma,我在第一条消息中发布的代码现在可以编译并且是正确的。

至于监听器和MyProcessHandler类之间的联系,它的存在要归功于addHandler函数。声明处理程序后,当处理指令 server.execute(...) 时,所有带有 methodName(如“myProcess.myFunction”)的传入请求都会自动重定向到 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。

关于java - 设置 Java XML-RPC Servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36800227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com