【问题标题】:SoapFaultMappingExceptionResolver never gets hit with regular java exceptionSoapFaultMappingExceptionResolver 永远不会受到常规 java 异常的影响
【发布时间】:2013-03-19 21:26:42
【问题描述】:

谁能告诉我为什么我不能用我的解析器捕获一个常规的 Java 异常,以便我可以在响应被发回之前对其进行转换?它永远不会被断点击中。如果不可能,我该怎么办?

SoapFaultMappingExceptionResolver

public class LisSoapFaultTranslatorExceptionResolver extends SoapFaultMappingExceptionResolver {

    @Override
    protected void customizeFault(Object endpoint, Exception ex, SoapFault fault) {

        SoapFaultDetail detail = fault.addFaultDetail();
    }
}

豆子

<sws:annotation-driven />
<bean class="org.springframework.ws.server.endpoint.mapping.PayloadRootAnnotationMethodEndpointMapping" />
<bean id="exceptionResolver"
            class="com.openclass.adapter.ws.resolvers.LisSoapFaultTranslatorExceptionResolver">
            <property name="defaultFault" value="RECEIVER,Server error">
            </property>
            <property name="exceptionMappings">
                <value>java.lang.Exception=SERVER,FaultMsg</value>
        </property>
    </bean>

Soap 错误响应

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
   <SOAP-ENV:Header/>
   <SOAP-ENV:Body>
      <SOAP-ENV:Fault>
         <faultcode>SOAP-ENV:Server</faultcode>
         <faultstring xml:lang="en">java.lang.NullPointerException</faultstring>
      </SOAP-ENV:Fault>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

网络服务

@PayloadRoot(localPart="readCourseSectionRequest", namespace="http://www.imsglobal.org/services/lis/cmsv1p0/wsdl11/sync/imscms_v1p0")
    @ResponsePayload
    public ReadCourseSectionResponse readCourseSection(@RequestPayload ReadCourseSectionRequest request, MessageContext messageContext) {

            // Throws error since courseService is null
        ReadCourseSectionResponse openClassResponse = courseService.readCourseSection(request);

        return new ReadCourseSectionResponse();
    }

【问题讨论】:

    标签: java spring exception soap spring-ws


    【解决方案1】:

    我通过添加来让它工作

    <property name="order" value="1"></property>
    

    <bean id="exceptionResolver" class="com.openclass.adapter.ws.resolvers.LisSoapFaultTranslatorExceptionResolver">
    

    【讨论】:

    • ahaaaa,当我从事 Spring WS 项目时,我记得我遇到了同样的问题。这就是我使用带注释的异常(@SoapFault)的原因。很高兴你得到它
    【解决方案2】:

    我认为你应该在你的异常解析器中覆盖方法 getFaultDefinition,像这样(假设你的解析器正在扩展 AbstractSoapFaultDefinitionExceptionResolver):

    @Override
    protected SoapFaultDefinition getFaultDefinition(Object endpoint, Exception ex) {
        if(ex instanceof LoginException){
            SoapFaultDefinition result = new SoapFaultDefinition();
            result.setFaultCode(QName.valueOf("SERVER"));
            return result;
        }
        return null;
    }
    

    如果您希望您的错误消息(异常)更加自定义,您应该将其注释为:

    @SoapFault(faultCode = FaultCode.SERVER)
    public class LoginException extends Exception{}
    

    【讨论】:

      【解决方案3】:

      我遇到了类似的问题。我解决了它用“soapFaultAnnotationExceptionResolver”替换bean名称/id“exceptionResolver”。

      见:Adding detail in a WS SoapFault : my custom ExceptionResolver is not used

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-06
        • 2011-05-18
        • 2014-11-06
        • 2014-04-13
        • 2019-06-11
        • 2020-01-01
        • 1970-01-01
        • 2018-11-04
        相关资源
        最近更新 更多