1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springframework.ws.server.endpoint.adapter.method.dom;
18
19 import javax.xml.transform.Source;
20 import javax.xml.transform.dom.DOMResult;
21 import javax.xml.transform.dom.DOMSource;
22
23 import org.springframework.core.MethodParameter;
24 import org.springframework.ws.server.endpoint.adapter.method.AbstractPayloadSourceMethodProcessor;
25
26 import org.w3c.dom.Document;
27 import org.w3c.dom.Element;
28 import org.w3c.dom.Node;
29
30
31
32
33
34
35
36
37
38 public class DomPayloadMethodProcessor extends AbstractPayloadSourceMethodProcessor {
39
40
41
42 @Override
43 protected boolean supportsRequestPayloadParameter(MethodParameter parameter) {
44 return supports(parameter);
45 }
46
47 @Override
48 protected Node resolveRequestPayloadArgument(MethodParameter parameter, Source requestPayload) throws Exception {
49 if (requestPayload instanceof DOMSource) {
50 return resolveArgumentDomSource(parameter, (DOMSource) requestPayload);
51 }
52 else {
53 DOMResult domResult = new DOMResult();
54 transform(requestPayload, domResult);
55 DOMSource domSource = new DOMSource(domResult.getNode());
56 return resolveArgumentDomSource(parameter, domSource);
57 }
58 }
59
60 private Node resolveArgumentDomSource(MethodParameter parameter, DOMSource requestSource) {
61 Class<?> parameterType = parameter.getParameterType();
62 Node requestNode = requestSource.getNode();
63 if (parameterType.isAssignableFrom(requestNode.getClass())) {
64 return requestNode;
65 }
66 else if (Element.class.equals(parameterType) && requestNode instanceof Document) {
67 Document document = (Document) requestNode;
68 return document.getDocumentElement();
69 }
70
71 throw new UnsupportedOperationException();
72 }
73
74
75
76 @Override
77 protected boolean supportsResponsePayloadReturnType(MethodParameter returnType) {
78 return supports(returnType);
79 }
80
81 @Override
82 protected DOMSource createResponsePayload(MethodParameter returnType, Object returnValue) {
83 Element returnedElement = (Element) returnValue;
84 return new DOMSource(returnedElement);
85 }
86
87 private boolean supports(MethodParameter parameter) {
88 return Element.class.equals(parameter.getParameterType());
89 }
90
91 }