java - Apache CXF JAX-WS 返回错误而不记录异常

标签 java web-services soap cxf jax-ws

我正在尝试使用 Apache CXF 返回故障 SOAP 消息,但我能找到的唯一方法是自定义异常 (@WebFault)。例如(这是我的@WebService的方法):

@Override
public String getAuthKey(String username, String password) throws BadCredeintialsException {        
    UserDetails ud = userDetailsService.loadUserByUsername(username);
    String pwd = passwordEncoder.encode(password);

    if (pwd.equals(ud.getPassword())) {
        return authKeyService.generateAuthKey(ud.getUsername()).getKey();
    }
    else {
        throw new BadCredeintialsException("Wrong username or password", new FaultInfoBean());
    }
}

BadCredeintialsException 此处由 @WebFaultextends Exception 注释(需要 2 个构造函数和 getFaultInfo()方法)。

问题:当异常抛出时,服务器将异常的堆栈跟踪打印到日志中,但我不需要这个,这种情况(错误的登录或密码)对于我的服务器日志来说太低了,我只需要将故障作为 SOAP 消息返回,不需要抛出真正的异常。

我该怎么做?谢谢。

最佳答案

我通过定义 FaultHandler 拦截器解决了这个问题,并将异常标记为已知的预期异常。在这种情况下,CXF 没有打印WARN 和异常跟踪。

@Override
public void handleFault(Message message) {

    FaultMode mode = message.get(FaultMode.class);
    Exception exception = message.getContent(Exception.class);

    if (exception != null && exception.getCause() != null) {
        if (mode != FaultMode.CHECKED_APPLICATION_FAULT) {
            if (exception.getCause() instanceof NotificationFailedException) {
                message.put(FaultMode.class, FaultMode.CHECKED_APPLICATION_FAULT);
            }
        }
    }
}

打印日志如下:

INFO    Application {http:<url>}NotificationListener#{http://<url>}Notify has thrown exception, unwinding now: NotificationFailedException: Strange Error

关于java - Apache CXF JAX-WS 返回错误而不记录异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30220693/

相关文章:

web-services - Spring WS 客户端——使用服务器和客户端证书进行身份验证

java - Mule-使用CXF组件时出错

java - 如何在循环内增加数组的大小

java - ListView - 其 View 在滚动期间失去值(value)

java - Java中变量或方法的最大名称长度

android - 如何将数据从 android 发送到 SQL Server 2008?

java - 使用 RESTEasy 在服务器端接受 XML

java - 如何在java中检查二维数组中是否存在一对值

Java Rest @GET 可以工作,但 @DELETE 和 @POST 路径不会被命中

iphone - 获取节点 :withName: method of soap is called more than 2 million times when parsing some big xml web service