java - 在 Spring-Boot 中为 soap webservice 抛出自定义异常?

标签 java spring web-services soap spring-boot

我正在使用 spring-boot 创建一个 soap webservice

默认情况下,我将每个 @WebMethod 代码包装在一个 try-catch 中,这样当任何 Exception 发生时,我可以将其转换为我自己的 @WebFault.

@Component
@WebService
public class MyService extends SpringBeanAutowiringSupport {

    @WebMethod
    public void test() {
        try {
            //connect to another soap service, which throws a java.net.SocketTimeoutException: Read timed out
        } catch (Exception e) {
            throw new MyException("my custom error msg");
        }
    }
}

@WebFault
public class MyException extends Exception {
    public MyException(String value) {  
        super(value);
    }
}

问题:如果例如 java.net.SocketTimeoutException 在 web 方法中发生,则调用 spring-boot ErrorPageFilter 而不是返回我的自定义 @WebFault:

但是为什么?我可以禁用它吗?如何返回我的错误故障消息?

[] 2014-09-08 09:20:51,251 ERROR org.springframework.boot.context.web.ErrorPageFilter: Forwarding to error page from request [/services/MyService] due to exception [null]
org.apache.catalina.connector.ClientAbortException
    at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:371) ~[catalina.jar:7.0.50]
    at org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:333) ~[catalina.jar:7.0.50]
    at org.apache.catalina.connector.Response.flushBuffer(Response.java:570) ~[catalina.jar:7.0.50]
    at org.apache.catalina.connector.ResponseFacade.flushBuffer(ResponseFacade.java:307) ~[catalina.jar:7.0.50]
    at org.springframework.boot.context.web.ErrorPageFilter.doFilter(ErrorPageFilter.java:115) [spring-boot-1.1.6.RELEASE.jar:1.1.6.RELEASE]
    at org.springframework.boot.context.web.ErrorPageFilter.access$000(ErrorPageFilter.java:58) [spring-boot-1.1.6.RELEASE.jar:1.1.6.RELEASE]
    at org.springframework.boot.context.web.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:87) [spring-boot-1.1.6.RELEASE.jar:1.1.6.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.0.6.RELEASE.jar:4.0.6.RELEASE]
    at org.springframework.boot.context.web.ErrorPageFilter.doFilter(ErrorPageFilter.java:100) [spring-boot-1.1.6.RELEASE.jar:1.1.6.RELEASE]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) [catalina.jar:7.0.50]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) [catalina.jar:7.0.50]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) [catalina.jar:7.0.50]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) [catalina.jar:7.0.50]
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) [catalina.jar:7.0.50]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) [catalina.jar:7.0.50]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) [catalina.jar:7.0.50]
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) [catalina.jar:7.0.50]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) [catalina.jar:7.0.50]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:409) [catalina.jar:7.0.50]
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1044) [tomcat-coyote.jar:7.0.50]
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607) [tomcat-coyote.jar:7.0.50]
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315) [tomcat-coyote.jar:7.0.50]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [?:1.7.0_51]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [?:1.7.0_51]
    at java.lang.Thread.run(Thread.java:744) [?:1.7.0_51]

最佳答案

尝试禁用 Spring 的默认错误处理

@EnableAutoConfiguration(exclude={ErrorMvcAutoConfiguration.class})

关于java - 在 Spring-Boot 中为 soap webservice 抛出自定义异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25719317/

相关文章:

android - 在android中将图像和视频发送到服务器

Java Web Service(SOAP) 消息格式通用(名称/值属性)节点与特定节点

java - 由于软件包损坏,无法在 Ubuntu 中安装 java

java - 我该如何解决有关 TestNG 和 Spring Boot 的问题

java - 如何修复缓慢的gradle干净版本

java - 我可以使用 Flex 中的远程对象来轮询服务器上的 Java 类(Blazeds)吗?我想将实时信息返回到我的数据网格中

java - 我们可以使用泛型来只允许特定类型而不是任何类型 <T> 吗?

java - JUnit 5 测试

java - 初始化 Intent 时出错

java - spring mvc Controller 类不工作