Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在XML-RPC[Java]中发送和接收自定义数据类型_Java_Apache_Xml Rpc - Fatal编程技术网

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

如何在XML-RPC[Java]中发送和接收自定义数据类型,java,apache,xml-rpc,Java,Apache,Xml Rpc,我试图学习XML-RPC协议的基础知识,并通过下面的文档,使用apachexmlrpc库实现示例服务 到目前为止,我已经成功地建立了一个计算器服务,它接收两个整数并返回整数的总和作为响应。我可以使用动态代理客户端调用此服务。在我的机器上,服务类和客户端类都在同一个eclipse项目中 但当我试图返回自己的自定义数据类型时,问题就来了。下面是类的外观 主要计算器类 public class CalculatorImpl implements Calculator { @Override pub

我试图学习
XML-RPC
协议的基础知识,并通过下面的文档,使用
apachexmlrpc库
实现示例服务

到目前为止,我已经成功地建立了一个计算器服务,它接收两个整数并返回整数的总和作为响应。我可以使用
动态代理
客户端调用此服务。在我的机器上,服务类和客户端类都在同一个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 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:解析服务器的响应:文件过早结束。

我正在使用
3.1.3
版本的
xmlrpc服务器
xmlrpc客户端
jar

任何建议都会有帮助


谢谢

您不使用jax-ws有什么原因吗?jax-ws和xml-rpc不是完全不同吗?一个用于Soap,另一个用于xml rpc?