1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springframework.ws.config;
18
19 import java.util.Collection;
20 import java.util.List;
21 import java.util.Map;
22
23 import org.springframework.context.ApplicationContext;
24 import org.springframework.context.support.ClassPathXmlApplicationContext;
25 import org.springframework.ws.server.EndpointAdapter;
26 import org.springframework.ws.server.EndpointExceptionResolver;
27 import org.springframework.ws.server.EndpointMapping;
28 import org.springframework.ws.server.endpoint.adapter.DefaultMethodEndpointAdapter;
29 import org.springframework.ws.server.endpoint.adapter.method.MessageContextMethodArgumentResolver;
30 import org.springframework.ws.server.endpoint.adapter.method.MethodArgumentResolver;
31 import org.springframework.ws.server.endpoint.adapter.method.MethodReturnValueHandler;
32 import org.springframework.ws.server.endpoint.adapter.method.SourcePayloadMethodProcessor;
33 import org.springframework.ws.server.endpoint.adapter.method.StaxPayloadMethodArgumentResolver;
34 import org.springframework.ws.server.endpoint.adapter.method.XPathParamMethodArgumentResolver;
35 import org.springframework.ws.server.endpoint.adapter.method.dom.Dom4jPayloadMethodProcessor;
36 import org.springframework.ws.server.endpoint.adapter.method.dom.DomPayloadMethodProcessor;
37 import org.springframework.ws.server.endpoint.adapter.method.dom.JDomPayloadMethodProcessor;
38 import org.springframework.ws.server.endpoint.adapter.method.dom.XomPayloadMethodProcessor;
39 import org.springframework.ws.server.endpoint.adapter.method.jaxb.JaxbElementPayloadMethodProcessor;
40 import org.springframework.ws.server.endpoint.adapter.method.jaxb.XmlRootElementPayloadMethodProcessor;
41 import org.springframework.ws.server.endpoint.mapping.PayloadRootAnnotationMethodEndpointMapping;
42 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;
45 import org.springframework.ws.soap.server.endpoint.adapter.method.SoapHeaderElementMethodArgumentResolver;
46 import org.springframework.ws.soap.server.endpoint.adapter.method.SoapMethodArgumentResolver;
47 import org.springframework.ws.soap.server.endpoint.mapping.SoapActionAnnotationMethodEndpointMapping;
48
49 import org.junit.Before;
50 import org.junit.Test;
51
52 import static org.junit.Assert.assertEquals;
53 import static org.junit.Assert.assertTrue;
54
55
56
57
58 public class AnnotationDrivenBeanDefinitionParserTest {
59
60 private ApplicationContext applicationContext;
61
62 @Before
63 public void setUp() throws Exception {
64 applicationContext =
65 new ClassPathXmlApplicationContext("annotationDrivenBeanDefinitionParserTest.xml", getClass());
66 }
67
68 @Test
69 public void endpointMappings() {
70 Map<String, EndpointMapping> result = applicationContext.getBeansOfType(EndpointMapping.class);
71 assertEquals("invalid amount of endpoint mappings found", 3, result.size());
72 assertContainsInstanceOf(result.values(), PayloadRootAnnotationMethodEndpointMapping.class);
73 assertContainsInstanceOf(result.values(), SoapActionAnnotationMethodEndpointMapping.class);
74 assertContainsInstanceOf(result.values(), AnnotationActionEndpointMapping.class);
75 }
76
77 @Test
78 public void endpointAdapters() {
79 Map<String, EndpointAdapter> result =
80 applicationContext.getBeansOfType(EndpointAdapter.class);
81 assertEquals("invalid amount of endpoint mappings found", 1, result.size());
82 DefaultMethodEndpointAdapter endpointAdapter = (DefaultMethodEndpointAdapter) result.values().iterator().next();
83
84 List<MethodArgumentResolver> argumentResolvers = endpointAdapter.getMethodArgumentResolvers();
85 assertTrue("No argumentResolvers created", !argumentResolvers.isEmpty());
86 assertContainsInstanceOf(argumentResolvers, MessageContextMethodArgumentResolver.class);
87 assertContainsInstanceOf(argumentResolvers, XPathParamMethodArgumentResolver.class);
88 assertContainsInstanceOf(argumentResolvers, SoapMethodArgumentResolver.class);
89 assertContainsInstanceOf(argumentResolvers, SoapHeaderElementMethodArgumentResolver.class);
90 assertContainsInstanceOf(argumentResolvers, DomPayloadMethodProcessor.class);
91 assertContainsInstanceOf(argumentResolvers, SourcePayloadMethodProcessor.class);
92 assertContainsInstanceOf(argumentResolvers, Dom4jPayloadMethodProcessor.class);
93 assertContainsInstanceOf(argumentResolvers, XmlRootElementPayloadMethodProcessor.class);
94 assertContainsInstanceOf(argumentResolvers, JaxbElementPayloadMethodProcessor.class);
95 assertContainsInstanceOf(argumentResolvers, JDomPayloadMethodProcessor.class);
96 assertContainsInstanceOf(argumentResolvers, StaxPayloadMethodArgumentResolver.class);
97 assertContainsInstanceOf(argumentResolvers, XomPayloadMethodProcessor.class);
98
99 List<MethodReturnValueHandler> returnValueHandlers = endpointAdapter.getMethodReturnValueHandlers();
100 assertTrue("No returnValueHandlers created", !returnValueHandlers.isEmpty());
101 assertContainsInstanceOf(returnValueHandlers, DomPayloadMethodProcessor.class);
102 assertContainsInstanceOf(returnValueHandlers, SourcePayloadMethodProcessor.class);
103 assertContainsInstanceOf(returnValueHandlers, Dom4jPayloadMethodProcessor.class);
104 assertContainsInstanceOf(returnValueHandlers, XmlRootElementPayloadMethodProcessor.class);
105 assertContainsInstanceOf(returnValueHandlers, JaxbElementPayloadMethodProcessor.class);
106 assertContainsInstanceOf(returnValueHandlers, JDomPayloadMethodProcessor.class);
107 assertContainsInstanceOf(returnValueHandlers, XomPayloadMethodProcessor.class);
108 }
109
110 @Test
111 public void endpointExceptionResolver() {
112 Map<String, EndpointExceptionResolver> result = applicationContext.getBeansOfType(EndpointExceptionResolver.class);
113 assertEquals("invalid amount of endpoint exception resolvers found", 2, result.size());
114 assertContainsInstanceOf(result.values(), SoapFaultAnnotationExceptionResolver.class);
115 assertContainsInstanceOf(result.values(), SimpleSoapExceptionResolver.class);
116 }
117
118
119 private <T> void assertContainsInstanceOf(Collection<T> collection, Class<? extends T> clazz) {
120 boolean found = false;
121 for (T item : collection) {
122 if (item.getClass().equals(clazz)) {
123 found = true;
124 break;
125 }
126 }
127 assertTrue("No [" + clazz.getName() + "] instance found", found);
128 }
129
130 }