XML-RPC – 在Java中从服务器到客户端抛出异常
发布时间:2020-12-16 23:02:25 所属栏目:百科 来源:网络整理
导读:这是我第一次在这里发帖,在搜索过程中找不到我的问题的答案,所以让我看看我是否可以正确解释自己. 我使用XML-RPC作为大型项目的一部分,但我将提供一个简化的代码,在其中我获得相同的结果. 如果我不抛出异常,连接工作正常.我的问题是从服务器到客户端抛出异常
这是我第一次在这里发帖,在搜索过程中找不到我的问题的答案,所以让我看看我是否可以正确解释自己.
我使用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(); } } 解决方法
我发现通过在客户端和服务器上使用apache xml-rpc实现,可以从服务器抛出自定义异常并在客户端上接收它们.只需要将某些内容添加到服务器和客户端配置中.
服务器: 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); serverConfig.setEnabledForExtensions(true); //Add this line server.start(); 客户: XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl(); try { config.setServerURL(new URL("http://localhost:80")); config.setEnabledForExceptions(true); config.setEnabledForExtensions(true); //Add this line XmlRpcClient client = new XmlRpcClient(); client.setConfig(config); Object[] params = new Object[] { new Integer(11),}; Integer result = (Integer) client.execute(config,"test.sum",params); System.out.println("Results " + result); } catch (XmlRpcException exception) { System.out.println(exception.getMessage()); Throwable cause = exception.getCause(); if(cause != null) { if(cause instanceof MyException) { System.out.println(((MyException)cause).getMessage()); } else { System.out.println("Cause not instance of Exception."); } } else { System.out.println("Cause was null."); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); 然后一切都按预期工作. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |