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

Posted

技术标签:

【中文标题】如何处理 XML-RPC 中的错误响应?【英文标题】:How to handle error responses in XML-RPC? 【发布时间】:2012-01-17 00:49:37 【问题描述】:

我正在使用 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) 找到了问题对象,但我没有使用它的授权。 3) 未找到问题对象。

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

谢谢!

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

以上是关于如何处理 XML-RPC 中的错误响应?的主要内容,如果未能解决你的问题,请参考以下文章

如何处理进行中的请求以使用redux saga显示加载程序?

如何处理 react/redux 中的请求错误?

远程服务器无反应应如何处理

我应该如何处理响应式设计中的 DOM 更改? [复制]

我不知道如何处理不同的错误

Service Worker:如何处理 302 重定向响应