Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过@WebFault注释映射JAX-RS中的自定义异常_Java_Json_Cxf_Jax Rs - Fatal编程技术网

Java 通过@WebFault注释映射JAX-RS中的自定义异常

Java 通过@WebFault注释映射JAX-RS中的自定义异常,java,json,cxf,jax-rs,Java,Json,Cxf,Jax Rs,我正在开发一个带有JAX-RS的客户机-服务器应用程序/ApacheCXF,JSON 我希望apachecxf在两端透明地处理我的异常:这意味着将异常转换为bean,用Jackson序列化程序(JSON)序列化它,然后在客户端进行转换 我看到了一些关于这个主题的令人困惑的帖子/答案,并想到了使用@WebFault注释: @WebFault(name=CODE, faultBean="foo.bar.FaultBean") public class DuplicateRuleNameFault e

我正在开发一个带有JAX-RS的客户机-服务器应用程序/ApacheCXFJSON

我希望apachecxf在两端透明地处理我的异常:这意味着将异常转换为bean,用Jackson序列化程序(JSON)序列化它,然后在客户端进行转换

我看到了一些关于这个主题的令人困惑的帖子/答案,并想到了使用@WebFault注释:

@WebFault(name=CODE, faultBean="foo.bar.FaultBean")
public class DuplicateRuleNameFault extends Exception {
   static final public String CODE = "DUPLICATE_RULE_NAME";
   private FaultBean faultBean;

   public DuplicateRuleNameFault(String msg) {
     super(msg);
     this.faultBean = new FaultBean(msg);
   }
   public DuplicateRuleNameFault() {
   }
   public FaultBean getFaultBean() {
     return faultBean;
   }
   public void setFaultBean(FaultBean faultBean) {
     this.faultBean = faultBean;
   }
}
没有成功。。。目前,CXF似乎乐于忽略异常上的注释,并将其作为未知异常处理:500状态错误,服务器端未生成响应正文

在Spring上下文的“”服务器元素中是否有特定的配置?我已经让Spring扫描了我的Exception/FaultBean类(顺便问一下,是否需要它?)

如果你能给我举一些工作实例,我将不胜感激。
谢谢。

一种方法是使用javax.ws.rs.core.Response对象,如下所示:

@得到

@路径(“/”)

公众回应getBlah()

{

试试看{
返回Response.status(Response.status.OK)
.entity().build();
}
捕获(最终重复规则名称错误e){
返回Response.status(Response.status.BAD_请求)
.entity(e.getFaultBean().getMsg()).build();
}

}

一种方法是使用javax.ws.rs.core.Response对象,如下所示:

@得到

@路径(“/”)

公众回应getBlah()

{

试试看{
返回Response.status(Response.status.OK)
.entity().build();
}
捕获(最终重复规则名称错误e){
返回Response.status(Response.status.BAD_请求)
.entity(e.getFaultBean().getMsg()).build();
}

}
@WebFault的
不是JAX-RS规范的一部分。您将需要阅读规范的详细说明,其中描述了您可以通过不同的方式完成您正在尝试的工作

选项1

设计要抛出的资源类。将这些异常的
response
属性设置为有效的JAX-RS响应,其中包含要发送到客户端的故障bean

选项2

定义异常映射提供程序。您可以创建这些异常的层次结构来处理应用程序将抛出的所有常见异常。或者,您可以使用嵌入的bean和异常处理程序创建顶级异常。然后从顶层导出几个特定的异常

public abstract class MyApplicationException<T> extends Exception {
    private T faultBean;

    // Constructors, setters/getters
}

@Provider
public class MyApplicationExceptionHandler implements ExceptionMapper<MyApplicationException<?>> {
    // Implementation
}
公共抽象类MyApplicationException扩展异常{
私人菜豆;
//构造函数、setter/getter
}
@提供者

公共类MyApplicationExceptionHandler实现ExceptionMapper
@WebFault的
不属于JAX-RS规范的一部分。您将需要阅读规范的详细说明,其中描述了您可以通过不同的方式完成您正在尝试的工作

选项1

设计要抛出的资源类。将这些异常的
response
属性设置为有效的JAX-RS响应,其中包含要发送到客户端的故障bean

选项2

定义异常映射提供程序。您可以创建这些异常的层次结构来处理应用程序将抛出的所有常见异常。或者,您可以使用嵌入的bean和异常处理程序创建顶级异常。然后从顶层导出几个特定的异常

public abstract class MyApplicationException<T> extends Exception {
    private T faultBean;

    // Constructors, setters/getters
}

@Provider
public class MyApplicationExceptionHandler implements ExceptionMapper<MyApplicationException<?>> {
    // Implementation
}
公共抽象类MyApplicationException扩展异常{
私人菜豆;
//构造函数、setter/getter
}
@提供者

公共类MyApplicationExceptionHandler实现ExceptionAppersure,但这样我还必须在客户端手动处理异常的解析。我想利用JAX-RS和CXF的优势,wihch允许通过在一行代码中包装服务定义来动态实例化客户机。当然,这样我还必须在客户端手动处理异常解析。我想利用JAX-RS和CXF的优势,wihch允许通过在一行代码中包装服务定义来动态实例化客户机。谢谢。我真的是这样做的,在SS上有一个ExceptionMaopper,在客户端有一个ResponseExceptionMapper。谢谢。我真的是这样做的,在SS上有一个ExceptionMaopper,在客户端有一个ResponseExceptionMapper。你能分享一下你是如何解决这个问题的吗。。。我面临着同样的问题:(我们已经切换到“功能异常”:我们在服务器端有一个异常映射器,它在异常的基础上构建自定义JSON。然后,在客户端,我使用一个inInterceptor来解组JSON,并抛出一个异常,它是否与一个错误相关。你能分享一下你是如何解决这个问题的吗…我面临着同样的问题:(我们已经切换到“功能异常”):我们在服务器端有一个异常映射器,它在异常的基础上构建自定义JSON。然后,在客户端,我使用一个inInterceptor来解组JSON并抛出一个异常,如果它与错误相关。