Skip to content

Commit 7c9ae0c

Browse files
committed
SWS-772 - <sws:annotation-driven/> should register a SoapFaultAnnotationExceptionResolver
1 parent a19c411 commit 7c9ae0c

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

core/src/main/java/org/springframework/ws/config/AnnotationDrivenBeanDefinitionParser.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@
4040
import org.springframework.ws.server.endpoint.adapter.method.jaxb.XmlRootElementPayloadMethodProcessor;
4141
import org.springframework.ws.server.endpoint.mapping.PayloadRootAnnotationMethodEndpointMapping;
4242
import org.springframework.ws.soap.addressing.server.AnnotationActionEndpointMapping;
43+
import org.springframework.ws.soap.server.endpoint.SimpleSoapExceptionResolver;
44+
import org.springframework.ws.soap.server.endpoint.SoapFaultAnnotationExceptionResolver;
4345
import org.springframework.ws.soap.server.endpoint.adapter.method.SoapMethodArgumentResolver;
4446
import org.springframework.ws.soap.server.endpoint.mapping.SoapActionAnnotationMethodEndpointMapping;
4547

@@ -78,6 +80,8 @@ public BeanDefinition parse(Element element, ParserContext parserContext) {
7880

7981
registerEndpointAdapters(element, source, parserContext);
8082

83+
registerEndpointExceptionResolvers(source, parserContext);
84+
8185
parserContext.popAndRegisterContainingComponent();
8286

8387
return null;
@@ -178,6 +182,18 @@ private void registerEndpointAdapters(Element element, Object source, ParserCont
178182
parserContext.getReaderContext().registerWithGeneratedName(adapterDef);
179183
}
180184

185+
private void registerEndpointExceptionResolvers(Object source, ParserContext parserContext) {
186+
RootBeanDefinition annotationResolverDef =
187+
createBeanDefinition(SoapFaultAnnotationExceptionResolver.class, source);
188+
annotationResolverDef.getPropertyValues().add("order", 0);
189+
parserContext.getReaderContext().registerWithGeneratedName(annotationResolverDef);
190+
191+
RootBeanDefinition simpleResolverDef =
192+
createBeanDefinition(SimpleSoapExceptionResolver.class, source);
193+
simpleResolverDef.getPropertyValues().add("order", 1);
194+
parserContext.getReaderContext().registerWithGeneratedName(simpleResolverDef);
195+
}
196+
181197
private RuntimeBeanReference createBeanReference(Class<?> beanClass, Object source, ParserContext parserContext) {
182198
RootBeanDefinition beanDefinition = createBeanDefinition(beanClass, source);
183199
String beanName = parserContext.getReaderContext().registerWithGeneratedName(beanDefinition);

core/src/test/java/org/springframework/ws/config/AnnotationDrivenBeanDefinitionParserTest.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2005-2011 the original author or authors.
2+
* Copyright 2005-2012 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -23,6 +23,7 @@
2323
import org.springframework.context.ApplicationContext;
2424
import org.springframework.context.support.ClassPathXmlApplicationContext;
2525
import org.springframework.ws.server.EndpointAdapter;
26+
import org.springframework.ws.server.EndpointExceptionResolver;
2627
import org.springframework.ws.server.EndpointMapping;
2728
import org.springframework.ws.server.endpoint.adapter.DefaultMethodEndpointAdapter;
2829
import org.springframework.ws.server.endpoint.adapter.method.MessageContextMethodArgumentResolver;
@@ -39,6 +40,8 @@
3940
import org.springframework.ws.server.endpoint.adapter.method.jaxb.XmlRootElementPayloadMethodProcessor;
4041
import org.springframework.ws.server.endpoint.mapping.PayloadRootAnnotationMethodEndpointMapping;
4142
import org.springframework.ws.soap.addressing.server.AnnotationActionEndpointMapping;
43+
import org.springframework.ws.soap.server.endpoint.SimpleSoapExceptionResolver;
44+
import org.springframework.ws.soap.server.endpoint.SoapFaultAnnotationExceptionResolver;
4245
import org.springframework.ws.soap.server.endpoint.adapter.method.SoapMethodArgumentResolver;
4346
import org.springframework.ws.soap.server.endpoint.mapping.SoapActionAnnotationMethodEndpointMapping;
4447

@@ -102,6 +105,15 @@ public void endpointAdapters() {
102105
assertContainsInstanceOf(returnValueHandlers, XomPayloadMethodProcessor.class);
103106
}
104107

108+
@Test
109+
public void endpointExceptionResolver() {
110+
Map<String, EndpointExceptionResolver> result = applicationContext.getBeansOfType(EndpointExceptionResolver.class);
111+
assertEquals("invalid amount of endpoint exception resolvers found", 2, result.size());
112+
assertContainsInstanceOf(result.values(), SoapFaultAnnotationExceptionResolver.class);
113+
assertContainsInstanceOf(result.values(), SimpleSoapExceptionResolver.class);
114+
}
115+
116+
105117
private <T> void assertContainsInstanceOf(Collection<T> collection, Class<? extends T> clazz) {
106118
boolean found = false;
107119
for (T item : collection) {

0 commit comments

Comments
 (0)