1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springframework.ws.test.support.matcher;
18
19 import javax.xml.transform.Source;
20 import javax.xml.transform.TransformerException;
21 import javax.xml.transform.dom.DOMResult;
22
23 import org.springframework.util.Assert;
24 import org.springframework.ws.WebServiceMessage;
25 import org.springframework.xml.transform.TransformerHelper;
26
27 import org.custommonkey.xmlunit.Diff;
28 import org.w3c.dom.Document;
29
30 import static org.springframework.ws.test.support.AssertionErrors.fail;
31
32
33
34
35
36
37
38
39 public class PayloadDiffMatcher extends DiffMatcher {
40
41 private final Source expected;
42
43 private final TransformerHelper transformerHelper = new TransformerHelper();
44
45 public PayloadDiffMatcher(Source expected) {
46 Assert.notNull(expected, "'expected' must not be null");
47 this.expected = expected;
48 }
49
50 @Override
51 protected final Diff createDiff(WebServiceMessage message) {
52 Source payload = message.getPayloadSource();
53 if (payload == null) {
54 fail("Request message does not contain payload");
55 }
56 return createDiff(payload);
57 }
58
59 protected Diff createDiff(Source payload) {
60 Document expectedDocument = createDocumentFromSource(expected);
61 Document actualDocument = createDocumentFromSource(payload);
62 return new Diff(expectedDocument, actualDocument);
63 }
64
65 private Document createDocumentFromSource(Source source) {
66 try {
67 DOMResult result = new DOMResult();
68 transformerHelper.transform(source, result);
69 return (Document) result.getNode();
70 }
71 catch (TransformerException ex) {
72 fail("Could not transform source to DOMResult" + ex.getMessage());
73 return null;
74 }
75 }
76 }