Обработка исключений внутри веб-сервисов Apache CXF - PullRequest
1 голос
/ 03 ноября 2011

Я разработал веб-сервис с использованием Apache CXF, который скоро будет в производстве.Я обеспокоен обработкой исключений в этом, я не уверен, является ли то, что я следовал, правильным или нет.

У меня есть метод, показанный ниже, который я представил как веб-сервис

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 Ответ

6 голосов
/ 03 ноября 2011

Вы должны добавить конкретный подкласс Exception в свой интерфейс, который помечен @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);
    }
}

(Существуют и другие способы отображения исключений, но они намного сложнее. Обертывание по крайней мере легко.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...