当前位置: 首页 > 知识库问答 >
问题:

Apache的Java XMLRPC库

胡和煦
2023-03-14

我正在使用Apache XML-RPC库使用我的XML-RPC服务,但作为对XML-RPC的响应,XML-RPC具有垃圾字符,因此库无法解析结果

这里,是我的XML-RPC程序:

import java.net.URL;

import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;


public class XMLRpcExample {

    public static void main(String[] args) throws Exception{
        // TODO Auto-generated method stub

        XmlRpcClientConfigImpl cf = new XmlRpcClientConfigImpl();
        cf.setServerURL(new URL("/xmlrpc/object"));
        cf.setBasicUserName("admin");
        cf.setBasicPassword("m_demo");
        cf.setConnectionTimeout(60000);
        XmlRpcClient client = new XmlRpcClient();
        client.setConfig(cf);
        Object[] params = new Object[] {"dbname",1,"m_demo","res.partner","partner_sync_openerp","kapil5drd@bxiz","22"};
        String s =(String)client.execute("execute", params);
        System.out.println(s);
    }

}

但是我得到了一个错误的回应,看起来是这样的:

[Fatal Error] :16:16: An invalid XML character (Unicode: 0xc) was found in the element content of the document.
Exception in thread "main" org.apache.xmlrpc.client.XmlRpcClientException: Failed to parse server's response: An invalid XML character (Unicode: 0xc) was found in the element content of the document.
    at org.apache.xmlrpc.client.XmlRpcStreamTransport.readResponse(XmlRpcStreamTransport.java:202)
    at org.apache.xmlrpc.client.XmlRpcStreamTransport.sendRequest(XmlRpcStreamTransport.java:165)
    at org.apache.xmlrpc.client.XmlRpcHttpTransport.sendRequest(XmlRpcHttpTransport.java:125)
    at org.apache.xmlrpc.client.XmlRpcSunHttpTransport.sendRequest(XmlRpcSunHttpTransport.java:69)
    at org.apache.xmlrpc.client.XmlRpcClientWorker.execute(XmlRpcClientWorker.java:56)
    at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:167)
    at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:137)
    at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:126)
    at XMLRpcExample.main(XMLRpcExample.java:21)
Caused by: org.xml.sax.SAXParseException; lineNumber: 16; columnNumber: 16; An invalid XML character (Unicode: 0xc) was found in the element content of the document.
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1237)
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:551)
    at org.apache.xmlrpc.client.XmlRpcStreamTransport.readResponse(XmlRpcStreamTransport.java:200)
    ... 8 more

XML-RPC在响应中提供了一个垃圾字符。

并且库本身无法解析响应。

所以这意味着,Apache XML-RPC库是它自己无法解析响应的。

有人能帮我做我需要做的事吗?

我也试图通过互联网解决这个问题,但我无法解决它。

共有1个答案

丌官嘉良
2023-03-14

这是参数的工作示例,可以帮助您

处理程序类:

public class Handler {
    public String execute(String dbName, Integer i, String a, String b, String c, String d, String e){
        System.out.println("Got inputs: "+dbName+", "+i+", "+a+", "+b+", "+c+", "+d+", "+e);
        return "<?xml version=\"1.0\"> <test>testmail@testdomain.com</test>";
    }
}

可以使用phm添加更多这样的处理程序。addHandler(“handler”,handler.class) 到服务器代码。可以将更多方法添加到此类中,并可以从客户端调用这些方法。

XMLRPC服务器:

import org.apache.xmlrpc.server.PropertyHandlerMapping;
import org.apache.xmlrpc.server.XmlRpcServer;
import org.apache.xmlrpc.server.XmlRpcServerConfigImpl;
import org.apache.xmlrpc.webserver.WebServer;

public class Server {
    private static final int port = 8080;

    public static void main(String[] args) throws Exception {
        WebServer webServer = new WebServer(port);
        XmlRpcServer xmlRpcServer = webServer.getXmlRpcServer();
        PropertyHandlerMapping phm = new PropertyHandlerMapping();
        phm.addHandler("handler",Handler.class);
        xmlRpcServer.setHandlerMapping(phm);
        XmlRpcServerConfigImpl serverConfig =
                (XmlRpcServerConfigImpl) xmlRpcServer.getConfig();
        serverConfig.setEnabledForExtensions(true);
        serverConfig.setContentLengthOptional(false);
        webServer.start();
    }
}

XMLRPC客户端:

import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;

import java.net.URL;

public class Client {
    public static void main(String args[])throws Exception{
        XmlRpcClientConfigImpl cf = new XmlRpcClientConfigImpl();
        cf.setServerURL(new URL("http://localhost:8080/xmlrpc/object"));
        cf.setBasicUserName("admin");
        cf.setBasicPassword("m_demo");
        cf.setConnectionTimeout(60000);
        XmlRpcClient client = new XmlRpcClient();
        client.setConfig(cf);
        Object[] params = new Object[] {"dbname",1,"m_demo","res.partner","partner_sync_openerp","kapil5drd@bxiz","22"};
        String s =(String)client.execute("handler.execute", params);
        System.out.println(s);
    }
}
 类似资料:
  • 在阅读了Apache Flume及其在处理客户端事件方面提供的好处之后,我决定是时候开始更详细地研究这个问题了。另一个很大的好处似乎是它可以处理Apache Avro对象:-)然而,我很难理解Avro模式是如何用来验证收到的Flume事件的。 为了帮助更详细地了解我的问题,我在下面提供了代码片段; 出于这篇文章的目的,我使用了一个示例模式,定义了一个包含2个字段的嵌套记录。 在我的Java项目中,

  • 我需要从某个来源读取数据流(在我的情况下是UDP流,但这无关紧要),转换每条记录并将其写入HDFS。 使用Flume或Flink有什么区别吗? 我知道我可以将 Flume 与自定义拦截器一起使用来转换每个事件。 但我是 Flink 的新手,所以对我来说,看起来 Flink 也会这样做。 选哪个比较好?性能有区别吗? 拜托,救命啊!

  • 是否有一个地方我们可以快速引用和查看Apache beam和运行时环境(Flink、Spark等)之间的版本兼容性。我正在艰难地学习它:(.不确定我的问题有多少是由版本错误造成的。 目前我正在使用Beam 2.4.0并查看flink runner pom(https://search.maven.org/#artifactdetails%7corg.apache.Beam%7cbeam-runne

  • 我正在尝试使用Apache Camel创建en RESTendpoint。我已经有了一个返回JSON内容的REST服务,我希望这个endpoint能得到它。我的问题是,我不知道构建Camel路由时发生了什么...目前,它什么也不做。这是我的代码: 我正在端口上的本地Tomcat上运行我的REST服务,我的完整URL是 /ContextServices/rest/ContextServices/do

  • Apache Spamassassin是一个集成到cPanel中的软件,有助于防止在您的邮箱中收到垃圾邮件。 它有助于防止您的邮箱被垃圾邮件淹没。 启用Apache Spamassassin后,它会按垃圾邮件分数对每封邮件进行评级。 您可以根据垃圾邮件分数选择要自动删除的垃圾邮件。 如果您选择垃圾邮件分数为5的自动垃圾邮件删除,则将自动删除所有垃圾邮件分数为5或更高的电子邮件。 启用或禁用Apac

  • 学习如何在Java编程中使用Tika。 以下是示例 - 如何使用java从PDF中提取内容。 如何使用java从ODF中提取内容。 如何使用java从Excel工作表中提取内容。 如何使用java从文本文档中提取内容。 如何使用java从XML文档中提取内容。 如何使用java从HTML文档中提取内容。 如何使用java从java .class文件中提取内容。