Categories:
Audio (13)
Biotech (29)
Bytecode (36)
Database (77)
Framework (7)
Game (7)
General (507)
Graphics (53)
I/O (35)
IDE (2)
JAR Tools (101)
JavaBeans (21)
JDBC (121)
JDK (426)
JSP (20)
Logging (108)
Mail (58)
Messaging (8)
Network (84)
PDF (97)
Report (7)
Scripting (84)
Security (32)
Server (121)
Servlet (26)
SOAP (24)
Testing (54)
Web (15)
XML (309)
Collections:
Other Resources:
Jackson Data Binding Source Code
Jackson is "the Java JSON library" or "the best JSON parser for Java". Or simply as "JSON for Java".
Jackson Databind Source Code files are provided in the source packge (jackson-databind-2.14.0-sources.jar). You can download it at Jackson Maven Website.
You can also browse Jackson Databind Source Code below:
✍: FYIcenter.com
⏎ com/fasterxml/jackson/databind/node/BaseJsonNode.java
package com.fasterxml.jackson.databind.node; import java.io.IOException; import com.fasterxml.jackson.core.*; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonSerializable; import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.jsontype.TypeSerializer; /** * Abstract base class common to all standard {@link JsonNode} * implementations. * The main addition here is that we declare that sub-classes must * implement {@link JsonSerializable}. * This simplifies object mapping aspects a bit, as no external serializers are needed. *<p> * Since 2.10, all implements have been {@link java.io.Serializable}. */ public abstract class BaseJsonNode extends JsonNode implements java.io.Serializable { private static final long serialVersionUID = 1L; // Simplest way is by using a helper Object writeReplace() { return NodeSerialization.from(this); } protected BaseJsonNode() { } /* /********************************************************** /* Basic definitions for non-container types /********************************************************** */ @Override public final JsonNode findPath(String fieldName) { JsonNode value = findValue(fieldName); if (value == null) { return MissingNode.getInstance(); } return value; } // Also, force (re)definition (2.7) @Override public abstract int hashCode(); /* /********************************************************************** /* Improved required-ness checks for standard JsonNode implementations /********************************************************************** */ @Override public JsonNode required(String fieldName) { return _reportRequiredViolation("Node of type `%s` has no fields", getClass().getSimpleName()); } @Override public JsonNode required(int index) { return _reportRequiredViolation("Node of type `%s` has no indexed values", getClass().getSimpleName()); } /* /********************************************************** /* Support for traversal-as-stream /********************************************************** */ @Override public JsonParser traverse() { return new TreeTraversingParser(this); } @Override public JsonParser traverse(ObjectCodec codec) { return new TreeTraversingParser(this, codec); } /** * Method that can be used for efficient type detection * when using stream abstraction for traversing nodes. * Will return the first {@link JsonToken} that equivalent * stream event would produce (for most nodes there is just * one token but for structured/container types multiple) */ @Override public abstract JsonToken asToken(); /** * Returns code that identifies type of underlying numeric * value, if (and only if) node is a number node. */ @Override public JsonParser.NumberType numberType() { // most types non-numeric, so: return null; } /* /********************************************************** /* Other traversal /********************************************************** */ @Override public ObjectNode withObject(JsonPointer ptr, OverwriteMode overwriteMode, boolean preferIndex) { // Degenerate case of using with "empty" path; ok if ObjectNode if (ptr.matches()) { if (this instanceof ObjectNode) { return (ObjectNode) this; } _reportWrongNodeType("Can only call `withObject()` with empty JSON Pointer on `ObjectNode`, not `%s`", getClass().getName()); } // Otherwise check recursively ObjectNode n = _withObject(ptr, ptr, overwriteMode, preferIndex); if (n == null) { _reportWrongNodeType("Cannot replace context node (of type `%s`) using `withObject()` with JSON Pointer '%s'", getClass().getName(), ptr); } return n; } protected ObjectNode _withObject(JsonPointer origPtr, JsonPointer currentPtr, OverwriteMode overwriteMode, boolean preferIndex) { // Three-part logic: // // 1) If we are at the end of JSON Pointer; if so, return // `this` if Object node, `null` if not (for caller to handle) // 2) If not at the end, if we can follow next segment, call recursively // handle non-null (existing Object node, return) // vs `null` (must replace; may not be allowed to) // 3) Can not follow the segment? Try constructing, adding path // // But the default implementation assumes non-container behavior so // it'll simply return `null` return null; } protected void _withXxxVerifyReplace(JsonPointer origPtr, JsonPointer currentPtr, OverwriteMode overwriteMode, boolean preferIndex, JsonNode toReplace) { if (!_withXxxMayReplace(toReplace, overwriteMode)) { _reportWrongNodeType( "Cannot replace `JsonNode` of type `%s` for property \"%s\" in JSON Pointer \"%s\" (mode `OverwriteMode.%s`)", toReplace.getClass().getName(), currentPtr.getMatchingProperty(), origPtr, overwriteMode); } } protected boolean _withXxxMayReplace(JsonNode node, OverwriteMode overwriteMode) { switch (overwriteMode) { case NONE: return false; case NULLS: return node.isNull(); case SCALARS: return !node.isContainerNode(); default: case ALL: return true; } } @Override public ArrayNode withArray(JsonPointer ptr, OverwriteMode overwriteMode, boolean preferIndex) { // Degenerate case of using with "empty" path; ok if ObjectNode if (ptr.matches()) { if (this instanceof ArrayNode) { return (ArrayNode) this; } _reportWrongNodeType("Can only call `withArray()` with empty JSON Pointer on `ArrayNode`, not `%s`", getClass().getName()); } // Otherwise check recursively ArrayNode n = _withArray(ptr, ptr, overwriteMode, preferIndex); if (n == null) { _reportWrongNodeType("Cannot replace context node (of type `%s`) using `withArray()` with JSON Pointer '%s'", getClass().getName(), ptr); } return n; } protected ArrayNode _withArray(JsonPointer origPtr, JsonPointer currentPtr, OverwriteMode overwriteMode, boolean preferIndex) { // Similar logic to "_withObject()" but the default implementation // used for non-container behavior so it'll simply return `null` return null; } /* /********************************************************** /* JsonSerializable /********************************************************** */ /** * Method called to serialize node instances using given generator. */ @Override public abstract void serialize(JsonGenerator g, SerializerProvider ctxt) throws IOException; /** * Type information is needed, even if JsonNode instances are "plain" JSON, * since they may be mixed with other types. */ @Override public abstract void serializeWithType(JsonGenerator g, SerializerProvider ctxt, TypeSerializer typeSer) throws IOException; /* /********************************************************** /* Standard method overrides /********************************************************** */ @Override public String toString() { return InternalNodeMapper.nodeToString(this); } @Override public String toPrettyString() { return InternalNodeMapper.nodeToPrettyString(this); } /* /********************************************************** /* Other helper methods for subtypes /********************************************************** */ /** * Helper method that throws {@link UnsupportedOperationException} as a result of * this node being of wrong type */ protected <T> T _reportWrongNodeType(String msgTemplate, Object...args) { throw new UnsupportedOperationException(String.format(msgTemplate, args)); } protected <T> T _reportWrongNodeOperation(String msgTemplate, Object...args) { throw new UnsupportedOperationException(String.format(msgTemplate, args)); } // @since 2.14 protected JsonPointer _jsonPointerIfValid(String exprOrProperty) { if (exprOrProperty.isEmpty() || exprOrProperty.charAt(0) == '/') { return JsonPointer.compile(exprOrProperty); } return null; } }
⏎ com/fasterxml/jackson/databind/node/BaseJsonNode.java
Or download all of them as a single archive file:
File name: jackson-databind-2.14.0-sources.jar File size: 1187952 bytes Release date: 2022-11-05 Download
⇒ Jackson Annotations Source Code
⇐ Download and Install Jackson Binary Package
2022-03-29, 109395👍, 0💬
Popular Posts:
JDK 11 jdk.xml.dom.jmod is the JMOD file for JDK 11 XML DOM module. JDK 11 XML DOM module compiled c...
MP3SPI is a Java Service Provider Interface that adds MP3 (MPEG 1/2/2.5 Layer 1/2/3) audio format su...
JRE 8 rt.jar is the JAR file for JRE 8 RT (Runtime) libraries. JRE (Java Runtime) 8 is the runtime e...
JRE 8 rt.jar is the JAR file for JRE 8 RT (Runtime) libraries. JRE (Java Runtime) 8 is the runtime e...
commons-lang-2.6.jar is the JAR file for Apache Commons Lang 2.6, which provides a host of helper ut...