【问题标题】:How to implement introspection in Apache XML-RPC server applications?如何在 Apache XML-RPC 服务器应用程序中实现自省?
【发布时间】:2011-09-01 17:52:24
【问题描述】:

我们有一个 Java 服务器后端,它使用 Apache XML-RPC 使其服务可用于 PHP 应用程序(别问我,我刚到时它已经这样构建了),并希望它遵守 @ 987654322@。理论上,Apache XML-RPC 对此有支持,但example given on their page:

public class MyXmlRpcServlet extends XmlRpcServlet {
    protected XmlRpcHandlerMapping newXmlRpcHandlerMapping()
        throws XmlRpcException {
        PropertyHandlerMapping mapping =
            (PropertyHandlerMapping) newXmlRpcHandlerMapping();
        XmlRpcSystemImpl.addSystemHandler(mapping);
    }
}

不会编译。它显然缺少return 语句,我试图返回创建的“映射”,但是在第一次请求时服务器(递归?)重复调用newXmlRpcHandlerMapping(),直到抛出java.lang.StackOverflowError

问题是:有谁知道如何在这样的应用程序中添加自省功能?修复这个例子,或者提供一个工作的例子都很棒。 真的不需要是那个规范(任何可以让我们生成方法及其参数列表的东西都很好),但它似乎是一个很酷的标准(否则非-XML-RPC 的酷世界。:-) )

谢谢!

【问题讨论】:

    标签: java xml-rpc introspection


    【解决方案1】:

    感谢同事的提示,我得到了答案:被覆盖的方法正在调用自身,而不是超类的版本。这是固定的代码:

    public class MyXmlRpcServlet extends XmlRpcServlet {
        @Override
        protected XmlRpcHandlerMapping newXmlRpcHandlerMapping()
            throws XmlRpcException {
            PropertyHandlerMapping mapping = (PropertyHandlerMapping) super
                .newXmlRpcHandlerMapping();
            XmlRpcSystemImpl.addSystemHandler(mapping);
            return mapping;
    }
    }
    

    一旦你添加了它并将你的 web.xml 中的 XmlRpcServlet 替换为这个版本,你就可以调用自省方法了!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-21
      • 1970-01-01
      • 2015-11-17
      • 2011-01-24
      • 2014-03-11
      • 1970-01-01
      • 1970-01-01
      • 2011-07-29
      相关资源
      最近更新 更多