这是我第一次在这里张贴和搜索过程中我找不到答案,我的问题所以让我们看看我是否能正确地解释一下。XML-RPC - 引发异常从服务器到客户端在Java中
我使用XML-RPC将一个大项目的一部分,但我将提供一个简化的代码,其中我获得相同的结果。
的连接可以正常使用,如果我不抛出异常。我的问题是抛出从服务器到客户端的异常。我在客户端得到XmlRpcException,但其原因始终是null。看起来传输中丢失了异常。任何想法为什么?
我的服务器:
public class JavaServer {
public Integer sum(int x, int y) throws Exception {
throw new MineException("ABABBABA");
}
public static void main (String [] args) {
try {
System.out.println("Attempting to start XML-RPC Server...");
WebServer server = new WebServer(80);
XmlRpcServer xmlRpcServer = server.getXmlRpcServer();
PropertyHandlerMapping phm = new PropertyHandlerMapping();
phm.addHandler("test", JavaServer.class);
xmlRpcServer.setHandlerMapping(phm);
XmlRpcServerConfigImpl serverConfig = (XmlRpcServerConfigImpl) xmlRpcServer.getConfig();
serverConfig.setEnabledForExceptions(true);
server.start();
System.out.println("Started successfully.");
System.out.println("Accepting requests. (Halt program to stop.)");
} catch (Exception exception) {
System.err.println("JavaServer: " + exception);
}}}
我的客户:
public static void main(String[] args) {
XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
try {
config.setServerURL(new URL("http://localhost:80"));
XmlRpcClient client = new XmlRpcClient();
client.setConfig(config);
Object[] params = new Object[] { new Integer(38), new Integer(3), };
Integer result = (Integer) client.execute("test.sum", params);
System.out.println("Results " + result);
} catch (XmlRpcException exception) {
Throwable cause = exception.getCause();
if(cause != null) {
if(cause instanceof MineException) {
System.out.println(((MineException)cause).getMessage());
}
else { System.out.println("Cause not instance of Exception"); }
}
else { System.out.println("Cause was null"); }
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
自定义异常不是xml-rpc标准的一部分。这就是为什么apache的实现提供这种可能性作为实际协议的扩展。因此,您必须在apache xml-rpc中启用扩展,并且它仅适用于使用它的客户端和服务器。 – Otto 2011-06-04 20:47:41
您好奥托,感谢您的评论和是的,的确,我发现通过启用扩展我可以做我想做的。 – Augusto 2011-06-09 15:58:11