2012-01-17 4 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); 
} 

Say I invokoe удаленную процедуру findIssue. Я являюсь аутентифицированным пользователем. Три вещи могут случиться:

1) Объект Issue найден, у меня есть разрешение на его использование, сериализован удаленно и неэтериализован локально. 2) Объект Issue найден, но у меня нет разрешения на его использование. 3) Объект Issue не найден.

2 и 3 являются ситуациями с исключениями, но насколько я могу судить, XML-RPC не поддерживает исключения. Если бы были только случаи 1) и 3), я мог бы вернуть пустую ошибку, если она не была найдена, но поскольку есть другие возможности, мне нужно более общее решение.

Спасибо!

ответ

0

Я еще не использовал библиотеку Redstone, но, глядя на Javadoc, у нее есть XmlRpcFault для использования на стороне клиента при вызове службы, которая возвращает код ошибки, но я не могу сразу увидеть, как сделать это на сервере.

В случае Apache XML-RPC они явно не поддерживали его на сервере и всегда возвращали 0. Эта библиотека, похоже, сделала что-то ужасно аналогично, и обходной путь, который вы можете использовать, вероятно, схож.

По существу, я выбрал пользовательское исключение RuntimeException, а затем поймал его на другом уровне. В идеальном случае можно было бы поймать его при реализации сервлета, но в моем случае мне пришлось усовершенствовать несколько своих классов, чтобы правильно распространять исключение, потому что они использовали внутреннее исключение catch (исключение).

Смежные вопросы