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.DOMSource;
21
22 import org.springframework.core.MethodParameter;
23 import org.springframework.ws.server.endpoint.adapter.method.AbstractPayloadSourceMethodProcessor;
24
25 import org.jdom2.Document;
26 import org.jdom2.Element;
27 import org.jdom2.input.DOMBuilder;
28 import org.jdom2.transform.JDOMResult;
29 import org.jdom2.transform.JDOMSource;
30 import org.w3c.dom.Node;
31
32
33
34
35
36
37
38
39
40 public class JDomPayloadMethodProcessor extends AbstractPayloadSourceMethodProcessor {
41
42 @Override
43 protected boolean supportsRequestPayloadParameter(MethodParameter parameter) {
44 return supports(parameter);
45 }
46
47 @Override
48 protected Element resolveRequestPayloadArgument(MethodParameter parameter, Source requestPayload) throws Exception {
49 if (requestPayload instanceof DOMSource) {
50 Node node = ((DOMSource) requestPayload).getNode();
51 DOMBuilder domBuilder = new DOMBuilder();
52 if (node.getNodeType() == Node.ELEMENT_NODE) {
53 return domBuilder.build((org.w3c.dom.Element) node);
54 }
55 else if (node.getNodeType() == Node.DOCUMENT_NODE) {
56 Document document = domBuilder.build((org.w3c.dom.Document) node);
57 return document.getRootElement();
58 }
59 }
60
61 JDOMResult jdomResult = new JDOMResult();
62 transform(requestPayload, jdomResult);
63 return jdomResult.getDocument().getRootElement();
64 }
65
66 @Override
67 protected boolean supportsResponsePayloadReturnType(MethodParameter returnType) {
68 return supports(returnType);
69 }
70
71 @Override
72 protected Source createResponsePayload(MethodParameter returnType, Object returnValue) {
73 Element returnedElement = (Element) returnValue;
74 return new JDOMSource(returnedElement);
75 }
76
77 private boolean supports(MethodParameter parameter) {
78 return Element.class.equals(parameter.getParameterType());
79 }
80
81 }