#web-services #cxf
#веб-службы #cxf
Вопрос:
Я разработал веб-сервис с использованием Apache CXF, который будет запущен в производство очень скоро. Меня беспокоит обработка исключений в этом, я не уверен, правильно ли то, что я следовал, или нет.
У меня есть метод, показанный ниже, который я предоставил i как веб-сервис
import javax.jws.WebService;
@WebService
public interface TataWebService {
public String distragery()throws Exception;
}
public String distrager throws Exception {
int a = 30;
strategyData = "currentlyhadcoced" ;
if(a==30) {
throw new IncorrectProjectIdsException("The Value of a is 30");
}
return strategyData;
}
И способ, которым я определил пользовательское исключение, заключается в следующем
@WebFault(name = "IncorrectProjectIdsDetails")
public class IncorrectProjectIdsException extends Exception {
private java.lang.String incorrectProjectIdsDetails;
public IncorrectProjectIdsException (String message) {
super(message);
}
public java.lang.String getFaultInfo() {
return this.incorrectProjectIdsDetails;
}
}
Пожалуйста, скажите мне, правильно ли это, относительно объявления throws внутри сигнатуры метода или shuld, которое мы обрабатываем любым другим способом??
Большое вам спасибо
Ответ №1:
Вы должны добавить Exception
в свой интерфейс определенный подкласс of, который снабжен @WebService
комментариями, чтобы механизм JAX-WS знал, что нужно публиковать информацию о возможных ошибках. Это потому, что эта информация обнаруживается статически путем проверки объявлений, а не путем динамического обнаружения исключений, которые фактически генерируются.
Если вы застряли с API более низкого уровня, который может выдавать что угодно (это случается; действительно, это случается часто), тогда вам следует обернуть это исключение более низкого уровня. Вот простой способ сделать это:
@WebFault(name = "ImplementationFault")
public class ImplementationException extends Exception {
public ImplementationException(Exception cause) {
super(cause.getMessage(), cause);
}
}
Который вы бы использовали таким образом в своем веб-методе:
public String fooMethod(String example) throws ImplementationException {
try {
return doRealThingWith(example);
} catch (Exception e) {
throw new ImplementationException(e);
}
}
(Существуют и другие способы сопоставления исключений, но они намного сложнее. Перенос, по крайней мере, прост.)
Комментарии:
1. Большое вам спасибо, но что делать, если метод выдает исключение, например IOException или какое-либо проверенное исключение. (Таким образом, метод должен выдавать бизнес, а также все эти проверенные исключения)??
2. Для этого работает описанный выше метод; вот почему я его включил. (Чего вы не можете сделать, так это превратить an
IOException
в ошибку напрямую, без большого количества хитростей. Я думаю. Я просто использую описанную выше технику, иногда во многих слоях.)