Java Apache CXF JAX-WS返回错误,无日志记录异常

Java Apache CXF JAX-WS返回错误,无日志记录异常,java,web-services,soap,cxf,jax-ws,Java,Web Services,Soap,Cxf,Jax Ws,我试图用ApacheCXF返回错误SOAP消息,但我能找到它的唯一方法是自定义异常(@WebFault)。例如(这是我的@WebService方法): BadCredentialsException此处由@WebFault和扩展异常注释(带有2个必需的构造函数和getFaultInfo()方法) 问题:当异常抛出时,服务器将异常的堆栈跟踪打印到日志中,但我不需要这样做,这种情况(错误登录或pwd)对于垃圾我的服务器日志来说太低了,我只需要将错误作为SOAP消息返回,不需要抛出真正的异常 我该怎么

我试图用ApacheCXF返回错误SOAP消息,但我能找到它的唯一方法是自定义异常(
@WebFault
)。例如(这是我的
@WebService
方法):

BadCredentialsException
此处由
@WebFault
扩展异常
注释(带有2个必需的构造函数和
getFaultInfo()
方法)

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


我该怎么做?谢谢。

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

@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
INFO应用程序{http:}NotificationListener{http://}Notify已引发异常,正在解除:NotificationFailedException:奇怪错误

如果我没记错,cxf会抛出异常作为警告,您使用的是哪个日志框架?@KarthikPrasad,我使用的是JBoss Wildfly服务器,默认情况下使用的是log4j。在我的例子中,cxf将异常作为[ERROR]抛出,之后它将用相同的文本打印[INFO]消息(但已经没有stacktrace)。现在我刚刚创建了带有
writeablestacktrace=false
的异常,看起来更好了,但仍然得到了重复的消息([ERROR]+[INFO])。
INFO    Application {http:<url>}NotificationListener#{http://<url>}Notify has thrown exception, unwinding now: NotificationFailedException: Strange Error