如何在XML-RPC [Java]中发送和接收自定义数据类型

时间:2014-05-11 10:00:47

标签: java apache xml-rpc

我正在尝试通过http://ws.apache.org/xmlrpc/types.html上的文档来学习XML-RPC协议的基础知识并使用Apache xml-rpc library实施示例服务。

到目前为止,我已经成功设置了一个Calculator服务,它接收两个整数并返回整数的总和作为响应。我可以使用Dynamic Proxy客户端来调用此服务。服务和客户端类都在我的机器上的同一个eclipse项目中。

但是当我尝试返回自己的自定义数据类型时,问题就出现了。这是类的样子。

主要计算器类

public class CalculatorImpl implements Calculator {
 @Override
 public int sum(int num1, int num2) {
    return num1 + num2;
 }
 @Override
 public CalculatorResponse getResponse(int num1, int num2) {
    return new CalculatorResponse(num1, num2);
 }
}

服务类

public static void main(String[] args) throws Exception {
    XmlRpcServlet servlet = new XmlRpcServlet();

    ServletWebServer webServer = new ServletWebServer(servlet, port);
    XmlRpcServerConfigImpl serverConfig =
            (XmlRpcServerConfigImpl) webServer.getXmlRpcServer().getConfig();
    serverConfig.setEnabledForExtensions(true);
    serverConfig.setEnabledForExceptions(true);
    webServer.start();
}

动态代理客户端

public CalculatorServiceDynamicProxyClient() throws Exception {
    BasicConfigurator.configure();

    XmlRpcClientConfigImpl clientConfig = new XmlRpcClientConfigImpl();
    clientConfig.setServerURL(new URL(SERVICE_STRING_ENDPOINT));
    clientConfig.setEnabledForExtensions(true);
    clientConfig.setEnabledForExceptions(true);

    XmlRpcClient client = new XmlRpcClient();
    client.setConfig(clientConfig);
    client.setTransportFactory(new XmlRpcCommonsTransportFactory(client));

    clientFactory = new ClientFactory(client);
}

public int getSum(int num1, int num2) throws XmlRpcException {
    Calculator cal = (Calculator) clientFactory.newInstance(Calculator.class);
    return cal.sum(num1, num2);
}

public CalculatorResponse getResponse(int num1, int num2) {
    Calculator cal = (Calculator) clientFactory.newInstance(Calculator.class);
    return cal.getResponse(num1, num2);
}

public static void main(String[] args) throws Exception {
    CalculatorServiceDynamicProxyClient client = new CalculatorServiceDynamicProxyClient();
    System.out.println(client.getSum(4, 5)); //works
    System.out.println(client.getResponse(4, 5)); //throws exception
}

CalculatorResponse对象只保存两个整数并实现Serializable

错误:org.apache.xmlrpc.client.XmlRpcClientException: to parse server's response: Premature end of file.

我正在使用3.1.3xmlrpc-serverxmlrpc-client jar。

任何建议都会有所帮助。

由于

0 个答案:

没有答案