【发布时间】:2011-08-17 21:27:48
【问题描述】:
我正在使用带有 JAX-WS 的 Java 优先方法开发 Web 服务。我正在努力弄清楚如何向 Web 服务客户端提供详细的错误信息。理想情况下,当出现验证错误时,我想在下面抛出一个类的实例:
public class ValidationException extends Exception {
private Errors errors;
public ValidationException(Errors errors) {
this.errors = errors;
}
public Errors getErrors() {
this.errors;
}
}
Errors 对象(类似于Spring's Errors interface)封装:
- 错误的字段
- 每个错误的性质(违反唯一约束、超出允许范围等)
ValidationException 由我的服务端点执行验证的操作抛出,例如
public class MyEndpoint {
public void doSomething(ValidateableInput input) throws ValidationException {
// implementation omitted
}
}
客户端使用wsimport 生成的代码访问服务。然而,这段代码不会抛出我的ValidationException 类的实例,而是抛出由wsimport 生成的异常类的实例(这个类也被命名为ValidationException,但在不同的包中)。客户端的ValidationException 不包含Errors 对象,因此有关错误原因的详细信息会丢失。
在 SOAP/JAX-WS 的上下文中,服务抛出的ValidationException 实例必须转换为a SOAP fault。我已阅读 this article 关于 JAX-WS 中的故障,其中 demonstrates how to use a Fault Bean 封装了有关您的异常的更多详细信息。但是,Fault Bean 似乎仅限于:
一个 Java 类,它有一个无参数构造函数、一个消息字符串字段以及一个 getter 和 setter。这将是您的 soap:fault detail 元素的载体。
所以它只提供一个字符串来封装有关错误原因的信息。
总结一下:是否可以在为 JAX-WS 服务生成的客户端代码中提供详细的错误信息
【问题讨论】:
标签: exception soap exception-handling jax-ws