相关疑难解决方法(0)

使用CXF拦截器处理错误 - 更改响应消息

我正在尝试处理来自我后端的错误.该handleMessage()如果发生错误,被称为而且内容XmlMessage的一个实例.我想将其更改为我自己的响应 - 只需设置响应代码并添加一些消息.

我没有找到任何适当的文件可以告诉我如何做到这一点......

这些示例适用于REST,但我也想在SOAP中管理这个问题.

拦截器

public class ErrorHandlerInterceptor extends AbstractPhaseInterceptor<Message> {

    public ErrorHandlerInterceptor() {
        super(Phase.POST_LOGICAL);
    }

    @Override
    public void handleMessage(Message message) throws Fault {
        Response response = Response
            .status(Response.Status.BAD_REQUEST)
            .entity("HOW TO GET A MESSAGE FROM AN EXCEPTION IN HERE???")
            .build();
        message.getExchange().put(Response.class, response);
    }

}
Run Code Online (Sandbox Code Playgroud)

的context.xml

<bean id="errorHandlerInterceptor"
    class="cz.cvut.fit.wst.server.interceptor.ErrorHandlerInterceptor" />

<jaxrs:server address="/rest/">
    <jaxrs:serviceBeans>
        <ref bean="restService" />
    </jaxrs:serviceBeans>
    <jaxrs:outFaultInterceptors>
        <ref bean="errorHandlerInterceptor" />
    </jaxrs:outFaultInterceptors>
</jaxrs:server>
Run Code Online (Sandbox Code Playgroud)

java rest error-handling soap cxf

7
推荐指数
2
解决办法
2万
查看次数

将异常从CXF拦截器传播到异常映射器

我有一个流程,在CXF客户端上我安装了拦截器,提供程序和异常映射器。就我而言,我正在通过拦截器捕获来自客户端的不良响应,然后我想中止cxf总线链并引发故障。不幸的是我做不到,因为在任何情况下都只记录从拦截器抛出的异常,但是主要错误(错误的json格式)会传播到异常映射器。我想避免使用异常映射器,但是我不知道怎么做。我正在使用WebClient来实现这样的拦截器:

@Component
public class MyInterceptor extends AbstractPhaseInterceptor<Message> {

    public MyInterceptor() {
        super(POST_STREAM);
    }

    @Override
    public void handleMessage(Message message) throws Fault {
        if (message != null) {
                //message.getExchange().setOneWay(true);
                //message.getExchange().put(Exception.class, new MyException());
                //message.getInterceptorChain().abort();
                //message.setContent(Exception.class, new MyException());
                //Endpoint ep = message.getExchange().get(Endpoint.class);
                //message.getInterceptorChain().abort();
                //if (ep.getInFaultObserver() != null) {
                //    ep.getInFaultObserver().onMessage(message);
                //}
                //throw new WebApplicationException( new MyException());

                //message.setContent(Response.class, response);
                throw new Fault(new MyException());
            }
        } 
Run Code Online (Sandbox Code Playgroud)

我读到我应该实现jaxrs-filter,因为拦截器抛出的异常不会传播到异常映射器。由于WebClient的实现,在Java中有什么方法可以做到吗?

S client = create(url, clazz, list(jsonProvider(), providers));
WebClient.getConfig(client).getInInterceptors().add(new MyInterceptor());
Run Code Online (Sandbox Code Playgroud)

我也尝试过在拦截器上使用不同的阶段,但是也没有用。

java web-services cxf jax-rs interceptor

4
推荐指数
1
解决办法
8399
查看次数

标签 统计

cxf ×2

java ×2

error-handling ×1

interceptor ×1

jax-rs ×1

rest ×1

soap ×1

web-services ×1