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.util.StringUtils;
24 import org.springframework.ws.context.MessageContext;
25 import org.springframework.ws.server.EndpointMapping;
26 import org.springframework.ws.server.endpoint.annotation.PayloadRoot;
27 import org.springframework.ws.server.endpoint.support.PayloadRootUtils;
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 public class PayloadRootAnnotationMethodEndpointMapping extends AbstractAnnotationMethodEndpointMapping {
49
50 private static TransformerFactory transformerFactory;
51
52 static {
53 transformerFactory = TransformerFactory.newInstance();
54 }
55
56 protected String getLookupKeyForMessage(MessageContext messageContext) throws Exception {
57 QName qName =
58 PayloadRootUtils.getPayloadRootQName(messageContext.getRequest().getPayloadSource(), transformerFactory)
59 ;
60 return qName != null ? qName.toString() : null;
61 }
62
63 protected String getLookupKeyForMethod(Method method) {
64 PayloadRoot annotation = method.getAnnotation(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.toString();
74 }
75 else {
76 return null;
77 }
78 }
79
80 }