|
1 | 1 | package com.fasterxml.jackson.databind.ext;
|
2 | 2 |
|
| 3 | +import java.io.IOException; |
| 4 | +import java.io.StringWriter; |
| 5 | + |
| 6 | +import javax.xml.XMLConstants; |
| 7 | +import javax.xml.transform.*; |
| 8 | +import javax.xml.transform.dom.DOMSource; |
| 9 | +import javax.xml.transform.stream.StreamResult; |
| 10 | + |
| 11 | +import org.w3c.dom.Node; |
| 12 | + |
3 | 13 | import com.fasterxml.jackson.core.JsonGenerator;
|
4 | 14 | import com.fasterxml.jackson.databind.JavaType;
|
5 | 15 | import com.fasterxml.jackson.databind.JsonMappingException;
|
6 | 16 | import com.fasterxml.jackson.databind.JsonNode;
|
7 | 17 | import com.fasterxml.jackson.databind.SerializerProvider;
|
8 | 18 | import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonFormatVisitorWrapper;
|
9 | 19 | import com.fasterxml.jackson.databind.ser.std.StdSerializer;
|
10 |
| -import org.w3c.dom.Node; |
11 | 20 |
|
12 |
| -import javax.xml.XMLConstants; |
13 |
| -import javax.xml.transform.*; |
14 |
| -import javax.xml.transform.dom.DOMSource; |
15 |
| -import javax.xml.transform.stream.StreamResult; |
16 |
| -import java.io.IOException; |
17 |
| -import java.io.StringWriter; |
18 | 21 | @SuppressWarnings("serial")
|
19 | 22 | public class DOMSerializer extends StdSerializer<Node>
|
20 | 23 | {
|
21 |
| - |
22 |
| - private final TransformerFactory transformerFactory; |
| 24 | + protected final TransformerFactory transformerFactory; |
23 | 25 |
|
24 | 26 | public DOMSerializer() {
|
25 | 27 | super(Node.class);
|
26 | 28 | try {
|
27 | 29 | transformerFactory = TransformerFactory.newInstance();
|
28 | 30 | transformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
|
29 | 31 | } catch (Exception e) {
|
30 |
| - throw new IllegalStateException("Could not instantiate TransformerFactory: "+e.getMessage(), e); |
| 32 | + throw new IllegalStateException("Could not instantiate `TransformerFactory`: "+e.getMessage(), e); |
31 | 33 | }
|
32 | 34 | }
|
33 |
| - |
| 35 | + |
34 | 36 | @Override
|
35 |
| - public void serialize(Node value, JsonGenerator jgen, SerializerProvider provider) |
| 37 | + public void serialize(Node value, JsonGenerator g, SerializerProvider provider) |
36 | 38 | throws IOException
|
37 | 39 | {
|
38 | 40 | try {
|
39 | 41 | Transformer transformer = transformerFactory.newTransformer();
|
40 | 42 | transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
|
41 | 43 | transformer.setOutputProperty(OutputKeys.INDENT, "no");
|
42 | 44 | StreamResult result = new StreamResult(new StringWriter());
|
43 |
| - DOMSource source = new DOMSource(value); |
44 |
| - transformer.transform(source, result); |
45 |
| - jgen.writeString(result.getWriter().toString()); |
| 45 | + transformer.transform(new DOMSource(value), result); |
| 46 | + g.writeString(result.getWriter().toString()); |
46 | 47 | } catch (TransformerConfigurationException e) {
|
47 |
| - throw new IllegalStateException("Could not create XML Transformer: "+e.getMessage(), e); |
| 48 | + throw new IllegalStateException("Could not create XML Transformer for writing DOM `Node` value: "+e.getMessage(), e); |
48 | 49 | } catch (TransformerException e) {
|
49 |
| - provider.reportMappingProblem(e,"XML Transformation failed: %s", e.getMessage()); |
| 50 | + provider.reportMappingProblem(e, "DOM `Node` value serialization failed: %s", e.getMessage()); |
50 | 51 | }
|
51 | 52 | }
|
52 | 53 |
|
53 |
| - @Override |
| 54 | + @Override |
54 | 55 | public JsonNode getSchema(SerializerProvider provider, java.lang.reflect.Type typeHint) {
|
55 | 56 | // Well... it is serialized as String
|
56 | 57 | return createSchemaNode("string", true);
|
|
0 commit comments