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.TransformerException;
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.dom4j.Document;
27 import org.dom4j.Element;
28 import org.dom4j.io.DOMReader;
29 import org.dom4j.io.DocumentResult;
30 import org.dom4j.io.DocumentSource;
31
32
33
34
35
36
37
38
39
40 public class Dom4jPayloadMethodProcessor 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)
49 throws TransformerException {
50 if (requestPayload instanceof DOMSource) {
51 org.w3c.dom.Node node = ((DOMSource) requestPayload).getNode();
52 if (node.getNodeType() == org.w3c.dom.Node.DOCUMENT_NODE) {
53 DOMReader domReader = new DOMReader();
54 Document document = domReader.read((org.w3c.dom.Document) node);
55 return document.getRootElement();
56 }
57 }
58
59 DocumentResult dom4jResult = new DocumentResult();
60 transform(requestPayload, dom4jResult);
61 return dom4jResult.getDocument().getRootElement();
62 }
63
64 @Override
65 protected boolean supportsResponsePayloadReturnType(MethodParameter returnType) {
66 return supports(returnType);
67 }
68
69 @Override
70 protected Source createResponsePayload(MethodParameter returnType, Object returnValue) {
71 Element returnedElement = (Element) returnValue;
72 return new DocumentSource(returnedElement);
73 }
74
75 private boolean supports(MethodParameter parameter) {
76 return Element.class.equals(parameter.getParameterType());
77 }
78
79 }