2012-01-17 67 views
1

我正在使用Redstone XML-RPC,但此问题适用于所有XML-RPC通信。如何处理XML-RPC中的错误响应?

考虑:

static interface Jira 
{ 
    public String login(String username, String password) throws XmlRpcFault; 
    public void logout(String loginToken) throws XmlRpcFault; 
    public Issue findIssue(int issueId) throws XmlRpcFault; 
} 

public static void main(String[] args) throws Exception 
{ 
    Jira jira = (Jira) XmlRpcProxy.createProxy("http://jira.atlassion.com/RPC2", new Class[] { Jira.class }); 
    String token = jira.login(args[ 0 ], args [ 1 ]); 
    jira.logout(token); 
} 

说我invokoe的findIssue远程过程。我是经过身份验证的用户。可能发生三件事:

1)发现问题对象,我有权使用它,远程序列化,并在本地非序列化。 2)发现问题对象,但我没有授权使用它。 3)找不到问题对象。

2和3是异常情况,但据我所知,XML-RPC不支持异常。如果只有1)和3)的情况,如果找不到它,我可能会返回一个空问题,但由于还有其他可能性,我需要一个更一般的解决方案。

谢谢!

回答

0

我还没有使用Redstone库,但是在查看Javadoc时,它确实有一个XmlRpcFault在客户端使用,当您调用返回错误代码的服务时,但我无法立即看到在服务器上完成它。

在Apache的XML-RPC的情况下,他们明确不支持它的服务器上,将始终返回0。这个库似乎已经非常相似做的事情,你可以采用的解决方法可能是相似的。

本质上,我抛出了一个自定义RuntimeException,然后在其他层捕获它。理想的情况是有可能赶上它在Servlet实现但对我来说,我不得不提高他们几个班的,因为他们使用赶上(例外),以正确地传播以外,所有的地方内部。