gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 18:03:56 25 4
gpt4 key购买 nike

我正在尝试使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com