imToken v2.14.1版本的 MD5 值为:83050b2c91219b46832c8336279e7878
以下内容为反编译后的 DOMDeserializer.java 源代码,内容仅作参考
package com.fasterxml.jackson.databind.ext;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.deser.std.FromStringDeserializer;
import java.io.StringReader;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.xml.sax.InputSource;
public abstract class DOMDeserializer<T> extends FromStringDeserializer<T> {
private static final DocumentBuilderFactory DEFAULT_PARSER_FACTORY;
private static final long serialVersionUID = 1;
@Override
public abstract T _deserialize(String str, DeserializationContext deserializationContext);
static {
DocumentBuilderFactory newInstance = DocumentBuilderFactory.newInstance();
newInstance.setNamespaceAware(true);
newInstance.setExpandEntityReferences(false);
try {
newInstance.setFeature("http://javax.xml.XMLConstants/feature/secure-processing", true);
} catch (Error | ParserConfigurationException unused) {
}
DEFAULT_PARSER_FACTORY = newInstance;
}
protected DOMDeserializer(Class<T> cls) {
super(cls);
}
protected final Document parse(String str) throws IllegalArgumentException {
try {
return documentBuilder().parse(new InputSource(new StringReader(str)));
} catch (Exception e2) {
throw new IllegalArgumentException("Failed to parse JSON String as XML: " + e2.getMessage(), e2);
}
}
protected DocumentBuilder documentBuilder() throws ParserConfigurationException {
return DEFAULT_PARSER_FACTORY.newDocumentBuilder();
}
public static class NodeDeserializer extends DOMDeserializer<Node> {
private static final long serialVersionUID = 1;
public NodeDeserializer() {
super(Node.class);
}
@Override
public Node _deserialize(String str, DeserializationContext deserializationContext) throws IllegalArgumentException {
return parse(str);
}
}
public static class DocumentDeserializer extends DOMDeserializer<Document> {
private static final long serialVersionUID = 1;
public DocumentDeserializer() {
super(Document.class);
}
@Override
public Document _deserialize(String str, DeserializationContext deserializationContext) throws IllegalArgumentException {
return parse(str);
}
}
}