• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.fasterxml.jackson.databind.ext;
2 
3 import java.io.IOException;
4 
5 import org.w3c.dom.Node;
6 import  org.w3c.dom.bootstrap.DOMImplementationRegistry;
7 import  org.w3c.dom.ls.DOMImplementationLS;
8 import  org.w3c.dom.ls.LSSerializer;
9 
10 import com.fasterxml.jackson.core.*;
11 import com.fasterxml.jackson.databind.JavaType;
12 import com.fasterxml.jackson.databind.JsonMappingException;
13 import com.fasterxml.jackson.databind.JsonNode;
14 import com.fasterxml.jackson.databind.SerializerProvider;
15 import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonFormatVisitorWrapper;
16 import com.fasterxml.jackson.databind.ser.std.StdSerializer;
17 
18 @SuppressWarnings("serial")
19 public class DOMSerializer extends StdSerializer<Node>
20 {
21     protected final DOMImplementationLS _domImpl;
22 
DOMSerializer()23     public DOMSerializer() {
24         super(Node.class);
25         DOMImplementationRegistry registry;
26         try {
27             registry = DOMImplementationRegistry.newInstance();
28         } catch (Exception e) {
29             throw new IllegalStateException("Could not instantiate DOMImplementationRegistry: "+e.getMessage(), e);
30         }
31         _domImpl = (DOMImplementationLS)registry.getDOMImplementation("LS");
32     }
33 
34     @Override
serialize(Node value, JsonGenerator jgen, SerializerProvider provider)35     public void serialize(Node value, JsonGenerator jgen, SerializerProvider provider)
36         throws IOException, JsonGenerationException
37     {
38         if (_domImpl == null) throw new IllegalStateException("Could not find DOM LS");
39         LSSerializer writer = _domImpl.createLSSerializer();
40         jgen.writeString(writer.writeToString(value));
41     }
42 
43 	@Override
getSchema(SerializerProvider provider, java.lang.reflect.Type typeHint)44     public JsonNode getSchema(SerializerProvider provider, java.lang.reflect.Type typeHint) {
45         // Well... it is serialized as String
46         return createSchemaNode("string", true);
47     }
48 
49     @Override
acceptJsonFormatVisitor(JsonFormatVisitorWrapper visitor, JavaType typeHint)50     public void acceptJsonFormatVisitor(JsonFormatVisitorWrapper visitor, JavaType typeHint) throws JsonMappingException {
51         if (visitor != null) visitor.expectAnyFormat(typeHint);
52     }
53 }
54