1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springframework.ws.server.endpoint.mapping;
18
19 import java.lang.reflect.Method;
20 import javax.xml.namespace.QName;
21 import javax.xml.transform.TransformerFactory;
22
23 import org.springframework.core.annotation.AnnotationUtils;
24 import org.springframework.util.StringUtils;
25 import org.springframework.ws.context.MessageContext;
26 import org.springframework.ws.server.EndpointMapping;
27 import org.springframework.ws.server.endpoint.annotation.PayloadRoot;
28 import org.springframework.ws.server.endpoint.support.PayloadRootUtils;
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 public class PayloadRootAnnotationMethodEndpointMapping extends AbstractAnnotationMethodEndpointMapping<QName> {
50
51 private static TransformerFactory transformerFactory;
52
53 static {
54 transformerFactory = TransformerFactory.newInstance();
55 }
56
57 @Override
58 protected QName getLookupKeyForMessage(MessageContext messageContext) throws Exception {
59 return PayloadRootUtils.getPayloadRootQName(messageContext.getRequest().getPayloadSource(), transformerFactory);
60 }
61
62 @Override
63 protected QName getLookupKeyForMethod(Method method) {
64 PayloadRoot annotation = AnnotationUtils.findAnnotation(method, PayloadRoot.class);
65 if (annotation != null) {
66 QName qname;
67 if (StringUtils.hasLength(annotation.localPart()) && StringUtils.hasLength(annotation.namespace())) {
68 qname = new QName(annotation.namespace(), annotation.localPart());
69 }
70 else {
71 qname = new QName(annotation.localPart());
72 }
73 return qname;
74 }
75 else {
76 return null;
77 }
78 }
79
80 }