SoapFaultMappingExceptionResolver nigdy nie zostanie trafiony zwykłym wyjątkiem java
Czy ktoś może mi powiedzieć, dlaczego nie mogę złapać regularnego wyjątku Java za pomocą mojego resolvera, aby móc go przekształcić, zanim odpowiedź zostanie wysłana? Nigdy nie trafia w punkt przerwania. Jeśli nie jest to możliwe, jak mogę?
SoapFaultMappingExceptionResolver
public class LisSoapFaultTranslatorExceptionResolver extends SoapFaultMappingExceptionResolver {
@Override
protected void customizeFault(Object endpoint, Exception ex, SoapFault fault) {
SoapFaultDetail detail = fault.addFaultDetail();
}
}
Fasola
<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>
Odpowiedź mydła z błędem
<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>
Serwis internetowy
@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();
}