Я занимаюсь разработкой веб-сервисов с использованием подхода Java-first с JAX-WS.Я пытаюсь выяснить, как предоставить подробную информацию об ошибке клиенту веб-службы.В идеале я хотел бы бросить экземпляр класса ниже, когда есть ошибки проверки:
public class ValidationException extends Exception {
private Errors errors;
public ValidationException(Errors errors) {
this.errors = errors;
}
public Errors getErrors() {
this.errors;
}
}
Объект Errors
(аналогичный Интерфейс ошибок Spring ) инкапсулирует:
- поля, в которых есть ошибка
- характер каждой ошибки (нарушено уникальное ограничение, превышен допустимый диапазон и т. Д.)
ValidationException
выбрасываетсяоперациями моей конечной точки службы, которые выполняют проверку, например
public class MyEndpoint {
public void doSomething(ValidateableInput input) throws ValidationException {
// implementation omitted
}
}
Клиент получает доступ к службе, используя код, сгенерированный wsimport .Однако этот код не генерирует экземпляр моего класса ValidationException
, а вместо этого генерирует экземпляр класса исключения, сгенерированного wsimport
(этот класс также называется ValidationException
, но находится в другом пакете).Клиентский ValidationException
не содержит объект Errors
, поэтому подробная информация о причине ошибки теряется.
В контексте SOAP / JAX-WS экземпляр ValidationException
, выданныйсервис должен быть переведен в ошибку SOAP .Я прочитал эту статью о сбоях в JAX-WS, в которой показано, как использовать компонент Fault Bean для инкапсуляции дополнительной информации о вашем исключении.Однако компонент Fault Bean, по-видимому, ограничен:
Java-классом, у которого есть конструктор без аргументов, поле String сообщения и метод получения и установки для него.Это будет ваш носитель для этого элемента soap: fault detail.
, поэтому он предоставляет только одну строку для инкапсуляции информации о причине (ах) ошибки.
Подводя итог: возможно ли предоставить подробную информацию об ошибке в коде клиента, сгенерированном для службы JAX-WS