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

Java 如何处理XML-RPC中的错误响应?,java,xml-rpc,rpc,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 issue

我使用的是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) 找到问题对象后,我有权使用它,远程序列化,本地取消序列化。 2) 已找到Issue对象,但我没有使用它的权限。 3) 找不到问题对象

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


谢谢

我还没有使用Redstone库,但看看Javadoc,当调用返回错误代码的服务时,它确实有一个XmlRpcFault可在客户端使用,但我无法立即看到如何在服务器上执行

在Apache XML-RPC的情况下,它们在服务器上明确不支持它,并且总是返回0。这个库似乎做了非常相似的事情,您可以采用的解决方法可能也很相似

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