如何处理XML-RPC中的错误响应?

时间:2012-01-17 00:49:38

标签: java xml-rpc rpc

我正在使用Redstone 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 );
}

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

1)找到了Issue对象,我有权使用它,远程序列化,并在本地进行反序列化。 2)找到了Issue对象,但我没有授权使用它。 3)找不到Issue对象。

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

谢谢!

1 个答案:

答案 0 :(得分:0)

我还没有使用过Redstone库,但是看看Javadoc,当你调用一个返回错误代码的服务时,它确实有一个在客户端使用的XmlRpcFault,但我不能立即看到如何在服务器上进行。

对于Apache XML-RPC,他们明确地不支持它在服务器上并且总是返回0.这个库看起来做得非常相似,你可以采用的解决方法可能类似。

基本上我抛出了一个自定义的RuntimeException,然后在其他一层抓住了它。理想情况下,可以在servlet实现中捕获它,但在我的情况下,我必须增强其几个类以正确传播异常,因为它们在内部使用了catch(Exception)。