diff --git a/core/src/main/java/org/springframework/ws/config/AnnotationDrivenBeanDefinitionParser.java b/core/src/main/java/org/springframework/ws/config/AnnotationDrivenBeanDefinitionParser.java index 2d582798..73c86213 100644 --- a/core/src/main/java/org/springframework/ws/config/AnnotationDrivenBeanDefinitionParser.java +++ b/core/src/main/java/org/springframework/ws/config/AnnotationDrivenBeanDefinitionParser.java @@ -40,6 +40,8 @@ import org.springframework.ws.server.endpoint.adapter.method.jaxb.JaxbElementPay import org.springframework.ws.server.endpoint.adapter.method.jaxb.XmlRootElementPayloadMethodProcessor; import org.springframework.ws.server.endpoint.mapping.PayloadRootAnnotationMethodEndpointMapping; import org.springframework.ws.soap.addressing.server.AnnotationActionEndpointMapping; +import org.springframework.ws.soap.server.endpoint.SimpleSoapExceptionResolver; +import org.springframework.ws.soap.server.endpoint.SoapFaultAnnotationExceptionResolver; import org.springframework.ws.soap.server.endpoint.adapter.method.SoapMethodArgumentResolver; import org.springframework.ws.soap.server.endpoint.mapping.SoapActionAnnotationMethodEndpointMapping; @@ -78,6 +80,8 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser { registerEndpointAdapters(element, source, parserContext); + registerEndpointExceptionResolvers(source, parserContext); + parserContext.popAndRegisterContainingComponent(); return null; @@ -178,6 +182,18 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser { parserContext.getReaderContext().registerWithGeneratedName(adapterDef); } + private void registerEndpointExceptionResolvers(Object source, ParserContext parserContext) { + RootBeanDefinition annotationResolverDef = + createBeanDefinition(SoapFaultAnnotationExceptionResolver.class, source); + annotationResolverDef.getPropertyValues().add("order", 0); + parserContext.getReaderContext().registerWithGeneratedName(annotationResolverDef); + + RootBeanDefinition simpleResolverDef = + createBeanDefinition(SimpleSoapExceptionResolver.class, source); + simpleResolverDef.getPropertyValues().add("order", 1); + parserContext.getReaderContext().registerWithGeneratedName(simpleResolverDef); + } + private RuntimeBeanReference createBeanReference(Class beanClass, Object source, ParserContext parserContext) { RootBeanDefinition beanDefinition = createBeanDefinition(beanClass, source); String beanName = parserContext.getReaderContext().registerWithGeneratedName(beanDefinition); diff --git a/core/src/test/java/org/springframework/ws/config/AnnotationDrivenBeanDefinitionParserTest.java b/core/src/test/java/org/springframework/ws/config/AnnotationDrivenBeanDefinitionParserTest.java index 23c4c1a0..4b4eb618 100644 --- a/core/src/test/java/org/springframework/ws/config/AnnotationDrivenBeanDefinitionParserTest.java +++ b/core/src/test/java/org/springframework/ws/config/AnnotationDrivenBeanDefinitionParserTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2011 the original author or authors. + * Copyright 2005-2012 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,6 +23,7 @@ import java.util.Map; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.ws.server.EndpointAdapter; +import org.springframework.ws.server.EndpointExceptionResolver; import org.springframework.ws.server.EndpointMapping; import org.springframework.ws.server.endpoint.adapter.DefaultMethodEndpointAdapter; import org.springframework.ws.server.endpoint.adapter.method.MessageContextMethodArgumentResolver; @@ -39,6 +40,8 @@ import org.springframework.ws.server.endpoint.adapter.method.jaxb.JaxbElementPay import org.springframework.ws.server.endpoint.adapter.method.jaxb.XmlRootElementPayloadMethodProcessor; import org.springframework.ws.server.endpoint.mapping.PayloadRootAnnotationMethodEndpointMapping; import org.springframework.ws.soap.addressing.server.AnnotationActionEndpointMapping; +import org.springframework.ws.soap.server.endpoint.SimpleSoapExceptionResolver; +import org.springframework.ws.soap.server.endpoint.SoapFaultAnnotationExceptionResolver; import org.springframework.ws.soap.server.endpoint.adapter.method.SoapMethodArgumentResolver; import org.springframework.ws.soap.server.endpoint.mapping.SoapActionAnnotationMethodEndpointMapping; @@ -102,6 +105,15 @@ public class AnnotationDrivenBeanDefinitionParserTest { assertContainsInstanceOf(returnValueHandlers, XomPayloadMethodProcessor.class); } + @Test + public void endpointExceptionResolver() { + Map result = applicationContext.getBeansOfType(EndpointExceptionResolver.class); + assertEquals("invalid amount of endpoint exception resolvers found", 2, result.size()); + assertContainsInstanceOf(result.values(), SoapFaultAnnotationExceptionResolver.class); + assertContainsInstanceOf(result.values(), SimpleSoapExceptionResolver.class); + } + + private void assertContainsInstanceOf(Collection collection, Class clazz) { boolean found = false; for (T item : collection) {