Библиотека XMLRPC Java Apache
Я использую свой XML-RPC-сервис, используя библиотеку Apache 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","[email protected]","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 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
Вот рабочий пример для ваших параметров, который может помочь вам
Класс обработчика:
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>[email protected]</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","[email protected]","22"};
String s =(String)client.execute("handler.execute", params);
System.out.println(s);
}
}