下面列出了com.fasterxml.jackson.databind.DeserializationConfig#com.fasterxml.jackson.core.ObjectCodec 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Override
public T deserialize( JsonParser p, DeserializationContext ctxt ) throws IOException
{
final ObjectCodec oc = p.getCodec();
final JsonNode jsonNode;
if ( oc instanceof XmlMapper )
{
jsonNode = createJsonNode( p, ctxt );
return objectMapper.treeToValue( jsonNode, overrideClass );
}
else
{
jsonNode = oc.readTree( p );
// original object mapper must be used since it may have different serialization settings
return oc.treeToValue( jsonNode, overrideClass );
}
}
@Override
public TargetWrapperDescriptor deserialize( JsonParser parser, DeserializationContext context ) throws IOException {
ObjectCodec oc = parser.getCodec();
JsonNode node = oc.readTree( parser );
TargetWrapperDescriptor twd = new TargetWrapperDescriptor();
JsonNode n;
if(( n = node.get( DESC )) != null )
twd.setDescription( n.textValue());
if(( n = node.get( TARGET_HANDLER )) != null )
twd.setHandler( n.textValue());
if(( n = node.get( ID )) != null )
twd.setId( n.textValue());
if(( n = node.get( NAME )) != null )
twd.setName( n.textValue());
return twd;
}
@Override
public LogicalFilter4 deserialize( JsonParser jp, DeserializationContext ctxt ) throws IOException {
ObjectCodec objectCodec = jp.getCodec();
ObjectNode root = jp.readValueAsTree();
// We assume it is a LogicalFilter
Iterator<String> iter = root.fieldNames();
String key = iter.next();
JsonNode arrayNode = root.iterator().next();
if ( arrayNode == null || arrayNode.isMissingNode() || ! arrayNode.isArray() ) {
throw new RuntimeException( "Invalid format of LogicalFilter encountered." );
}
// pass in our objectCodec so that the subJsonParser knows about our configured Modules and Annotations
JsonParser subJsonParser = arrayNode.traverse( objectCodec );
List<QueryFilter4> childrenQueryFilters = subJsonParser.readValueAs( new TypeReference<List<QueryFilter4>>() {} );
return new LogicalFilter4( QueryParam.valueOf( key ), childrenQueryFilters );
}
@Override
public Ports deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
Ports out = new Ports();
ObjectCodec oc = jsonParser.getCodec();
JsonNode node = oc.readTree(jsonParser);
for (Iterator<Map.Entry<String, JsonNode>> it = node.fields(); it.hasNext();) {
Map.Entry<String, JsonNode> field = it.next();
if (!field.getValue().equals(NullNode.getInstance())) {
String hostIp = field.getValue().get(0).get("HostIp").textValue();
String hostPort = field.getValue().get(0).get("HostPort").textValue();
out.addPort(Port.makePort(field.getKey(), hostIp, hostPort));
}
}
return out;
}
@Override
public SourceForgeArticle deserialize(JsonParser parser,
DeserializationContext context) throws IOException,
JsonProcessingException {
ObjectCodec oc = parser.getCodec();
JsonNode node = oc.readTree(parser);
JsonNode attachmentsNode = node.path("attachments");
SourceForgeAttachment[] attachments = oc.treeToValue(attachmentsNode, SourceForgeAttachment[].class);
SourceForgeArticle article = new SourceForgeArticle();
article.setArticleNumber(articleNumber++);
article.setSubject(getText(node, "subject"));
article.setText(getText(node, "text"));
article.setUser(getText(node,"author"));
article.setAttachments(attachments);
article.setArticleId(getText(node, "slug"));
article.setDate(getDate(node, SourceForgeConstants.RESPONSE_DATE_FORMATTER, "timestamp"));
article.setUpdateDate(getDate(node, SourceForgeConstants.RESPONSE_DATE_FORMATTER, "last_edited"));
article.setReferences(new String[0]);
return article;
}
@Override
public JiraComment deserialize(JsonParser parser,
DeserializationContext context) throws IOException,
JsonProcessingException {
ObjectCodec oc = parser.getCodec();
JsonNode node = oc.readTree(parser);
JiraComment comment = new JiraComment();
comment.setCommentId(getText(node, "id"));
comment.setCreationTime(getDate(node, context, "created"));
comment.setCreator(getText(node, "author", "name"));
comment.setText(getText(node, "body"));
comment.setUpdateAuthor(getText(node, "updateAuthor", "name"));
comment.setUpdateDate(getDate(node, context, "updated"));
comment.setUrl(getText(node, "self"));
return comment;
}
@Override
public Component deserialize( JsonParser parser, DeserializationContext context ) throws IOException {
ObjectCodec oc = parser.getCodec();
JsonNode node = oc.readTree( parser );
Component component = new Component();
JsonNode n;
if(( n = node.get( NAME )) != null )
component.setName( n.textValue());
if(( n = node.get( COMP_INSTALLER )) != null )
component.setInstallerName( n.textValue());
return component;
}
@Override
public SourceForgeComment deserialize(JsonParser parser,
DeserializationContext context) throws IOException,
JsonProcessingException {
ObjectCodec oc = parser.getCodec();
JsonNode node = oc.readTree(parser);
JsonNode attachmentsNode = node.path("attachments");
SourceForgeAttachment[] attachments = oc.treeToValue(attachmentsNode, SourceForgeAttachment[].class);
SourceForgeComment comment = new SourceForgeComment();
comment.setSubject(getText(node, "subject"));
comment.setText(getText(node, "text"));
comment.setCreator(getText(node,"author"));
comment.setAttachments(attachments);
comment.setCommentId(getText(node, "slug"));
comment.setCreationTime(getDate(node, SourceForgeConstants.RESPONSE_DATE_FORMATTER, "timestamp"));
comment.setUpdateDate(getDate(node, SourceForgeConstants.RESPONSE_DATE_FORMATTER, "last_edited"));
return comment;
}
@Override
public Map<PublicKey, Integer> deserialize(JsonParser jsonParser, DeserializationContext deserializationContext)
throws IOException {
HashMap<PublicKey, Integer> result = new HashMap<>();
ObjectCodec codec = jsonParser.getCodec();
TreeNode rootNode = codec.readTree(jsonParser);
if (rootNode.isArray()) {
for (JsonNode node : (ArrayNode) rootNode) {
PublicKey publicKey = new PublicKey((node.get(0)).asText());
result.put(publicKey, (node.get(0)).asInt());
}
return result;
}
throw new IllegalArgumentException("JSON Node is not an array.");
}
@Override
public CoinbaseAddresses deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
final ObjectCodec oc = jp.getCodec();
final JsonNode node = oc.readTree(jp);
final JsonNode addressesArrayNode = node.path("addresses");
final List<CoinbaseAddress> addresses = new ArrayList<>();
for (JsonNode addressNode : addressesArrayNode) {
addresses.add(getAddressFromNode(addressNode));
}
final int totalCount = node.path("total_count").asInt();
final int numPages = node.path("num_pages").asInt();
final int currentPage = node.path("current_page").asInt();
return new CoinbaseAddresses(addresses, totalCount, numPages, currentPage);
}
@Override
public ExposedPorts deserialize(JsonParser jsonParser, DeserializationContext deserializationContext)
throws IOException {
List<ExposedPort> exposedPorts = new ArrayList<>();
ObjectCodec oc = jsonParser.getCodec();
JsonNode node = oc.readTree(jsonParser);
for (Iterator<Map.Entry<String, JsonNode>> it = node.fields(); it.hasNext(); ) {
Map.Entry<String, JsonNode> field = it.next();
if (!field.getValue().equals(NullNode.getInstance())) {
exposedPorts.add(ExposedPort.parse(field.getKey()));
}
}
return new ExposedPorts(exposedPorts.toArray(new ExposedPort[0]));
}
@Override
public CoinbasePrice deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
final ObjectCodec oc = jp.getCodec();
final JsonNode node = oc.readTree(jp);
final CoinbaseMoney subTotal =
CoinbaseMoneyDeserializer.getCoinbaseMoneyFromNode(node.path("subtotal"));
final JsonNode feesNode = node.path("fees");
final CoinbaseMoney coinbaseFee =
CoinbaseMoneyDeserializer.getCoinbaseMoneyFromNode(feesNode.path(0).path("coinbase"));
final CoinbaseMoney bankFee =
CoinbaseMoneyDeserializer.getCoinbaseMoneyFromNode(feesNode.path(1).path("bank"));
final CoinbaseMoney total =
CoinbaseMoneyDeserializer.getCoinbaseMoneyFromNode(node.path("total"));
return new CoinbasePrice(coinbaseFee, bankFee, total, subTotal);
}
@Override
public PublicKey deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
ObjectCodec oc = jp.getCodec();
JsonNode node = oc.readTree(jp);
byte[] pubKeyBytes;
try {
pubKeyBytes = HexUtils.toBytes(node.asText());
} catch (RuntimeException e) {
throw new JsonParseException("Failed to convert string '" + node.asText() + "' into an public key bytes",
JsonLocation.NA);
}
return new PublicKey(pubKeyBytes);
}
@Override
public OrderBookEntry deserialize(JsonParser jp, DeserializationContext ctx) throws IOException {
ObjectCodec oc = jp.getCodec();
JsonNode node = oc.readTree(jp);
final String price = node.get(0).asText();
final String qty = node.get(1).asText();
OrderBookEntry orderBookEntry = new OrderBookEntry();
orderBookEntry.setPrice(price);
orderBookEntry.setQuantity(qty);
return orderBookEntry;
}
/**
* Deserializes a FileServer YAML description of the type
*
* <pre>
* operation: all
* url: file:///tmp/workflows/scratch
* </pre>
*
* @param jp
* @param dc
* @return
* @throws IOException
* @throws JsonProcessingException
*/
@Override
public FileServer deserialize(JsonParser jp, DeserializationContext dc)
throws IOException, JsonProcessingException {
ObjectCodec oc = jp.getCodec();
JsonNode node = oc.readTree(jp);
FileServer fs = new FileServer();
for (Iterator<Map.Entry<String, JsonNode>> it = node.fields(); it.hasNext(); ) {
Map.Entry<String, JsonNode> e = it.next();
String key = e.getKey();
SiteCatalogKeywords reservedKey = SiteCatalogKeywords.getReservedKey(key);
if (reservedKey == null) {
this.complainForIllegalKey(
SiteCatalogKeywords.FILESERVERS.getReservedName(), key, node);
}
switch (reservedKey) {
case OPERATION:
fs.setSupportedOperation(node.get(key).asText());
break;
case URL:
String fullURL = node.get(key).asText();
PegasusURL url = new PegasusURL(fullURL);
fs.setURLPrefix(url.getURLPrefix());
fs.setProtocol(url.getProtocol());
fs.setMountPoint(url.getPath());
break;
default:
this.complainForUnsupportedKey(
SiteCatalogKeywords.FILESERVERS.getReservedName(), key, node);
}
}
return fs;
}
private BiFunction<JsonNode, Type, Object> makeDeserialiser(ObjectMapper mapper) {
final TypeFactory typeFactory = mapper.getTypeFactory();
return (node, type) -> {
JavaType javaType = typeFactory.constructType(type);
try {
final JsonParser jsonParser = mapper.treeAsTokens(node);
final ObjectCodec codec = jsonParser.getCodec();
return codec.readValue(jsonParser, javaType);
} catch (IOException e) {
throw new RuntimeException(e);
}
};
}
@Override
public ValueImpl deserialize(JsonParser jsonParser,
DeserializationContext ctxt) throws IOException {
ObjectCodec mapper = jsonParser.getCodec();
JsonNode root = mapper.readTree(jsonParser);
Class<? extends ValueImpl> valueClass = getValueClass(root, jsonParser);
return mapper.treeToValue(root, valueClass);
}
/**
* {@inheritDoc}
*/
@Override
public CertPath deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
ObjectCodec oc = p.getCodec();
ArrayNode node = oc.readTree(p);
List<Certificate> list = new ArrayList<>();
for (JsonNode item : node) {
X509Certificate certificate = oc.treeToValue(item, X509Certificate.class);
list.add(certificate);
}
return CertificateUtil.generateCertPath(list);
}
@Test
public void test_ctor_params_validation() {
// param validation
assertThat(
() -> new DiagnosticServiceDescriptor<>(null, objectMapper, noop, mbean),
is(throwing(instanceOf(NullPointerException.class))));
assertThat(
() -> new DiagnosticServiceDescriptor<>(Serializable.class, null, noop, mbean),
is(throwing(instanceOf(NullPointerException.class))));
assertThat(
() -> new DiagnosticServiceDescriptor<>(ObjectCodec.class, objectMapper, noop, mbean),
is(throwing(instanceOf(IllegalArgumentException.class)).andMessage(is(equalTo("Not an interface: " + ObjectCodec.class.getName())))));
}
@Override
public UActor deserialize(JsonParser parser, DeserializationContext context) throws IOException, JsonProcessingException {
ObjectCodec codec = parser.getCodec();
JsonNode node = codec.readTree(parser);
JsonNode typeNode = node.get("type");
String type = (typeNode != null && !typeNode.isNull()) ? node.get("type").asText() : null;
Class<? extends UActor> actorClass = classForType(type);
return objectMapper.treeToValue(node, actorClass);
}
@Override
public UBehavior deserialize(JsonParser parser, DeserializationContext context) throws IOException {
ObjectCodec codec = parser.getCodec();
JsonNode node = codec.readTree(parser);
JsonNode typeNode = node.get("type");
String type = (typeNode != null && !typeNode.isNull()) ? node.get("type").asText() : null;
Class<? extends UBehavior> behaviorClass = classForType(type);
return objectMapper.treeToValue(node, behaviorClass);
}
private Object fromComplex(final ObjectNode node, final ObjectCodec codec)
throws IOException, EdmPrimitiveTypeException {
final ComplexValue complexValue = new ComplexValue();
final Set<String> toRemove = new HashSet<>();
for (final Iterator<Map.Entry<String, JsonNode>> itor = node.fields(); itor.hasNext();) {
final Map.Entry<String, JsonNode> field = itor.next();
links(field, complexValue, toRemove, node, codec);
}
node.remove(toRemove);
populate(complexValue, complexValue.getValue(), node, codec);
return complexValue;
}
@Override
public EntityId deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
ObjectCodec oc = jsonParser.getCodec();
ObjectNode node = oc.readTree(jsonParser);
if (node.has("entityType") && node.has("id")) {
return EntityIdFactory.getByTypeAndId(node.get("entityType").asText(), node.get("id").asText());
} else {
throw new IOException("Missing entityType or id!");
}
}
@Override
public ExecutionContext deserialize(JsonParser jsonParser, DeserializationContext deserializationContext)
throws IOException, JsonProcessingException {
ObjectCodec oc = jsonParser.getCodec();
JsonNode node = oc.readTree(jsonParser);
final ExecutionContext executionContext = new ExecutionContext();
final boolean dirty = node.get("dirty").asBoolean();
for (JsonNode valueNode : node.get("values")) {
final JsonNode nodeValue = valueNode.fields().next().getValue();
final String nodeKey = valueNode.fields().next().getKey();
if (nodeValue.isNumber() && !nodeValue.isFloatingPointNumber() && nodeValue.canConvertToInt()) {
executionContext.putInt(nodeKey, nodeValue.asInt());
}
else if (nodeValue.isNumber() && !nodeValue.isFloatingPointNumber() && nodeValue.canConvertToLong()) {
executionContext.putLong(nodeKey, nodeValue.asLong());
}
else if (nodeValue.isFloatingPointNumber()) {
executionContext.putDouble(nodeKey, nodeValue.asDouble());
}
else if (nodeValue.isBoolean()) {
executionContext.putString(nodeKey, String.valueOf(nodeValue.asBoolean()));
}
else if (nodeValue.isTextual()) {
executionContext.putString(nodeKey, nodeValue.asText());
}
else {
executionContext.put(nodeKey, nodeValue.toString());
}
}
if (!dirty && executionContext.isDirty()) {
executionContext.clearDirtyFlag();
}
return executionContext;
}
@Override
public BusinessObject deserialize(JsonParser parser, DeserializationContext ctxt)
throws IOException {
ObjectCodec oc = parser.getCodec();
ObjectNode treeNode = oc.readTree(parser);
BusinessObject businessObject = new BusinessObject();
//Create first node
NodeBusinessObjectInput node = new NodeBusinessObjectInput(getValueIfExist(treeNode, NAME));
node.setMultiple(true);
node.setPageDataName(getValueIfExist(treeNode, VARIABLE_NAME));
parseNodeContractInput(childInput(treeNode), node);
businessObject.addInput(node);
return businessObject;
}
@Override
public Audience deserialize(JsonParser parser, DeserializationContext context) throws IOException {
ObjectCodec codec = parser.getCodec();
JsonNode node = codec.readTree(parser);
String id = node.get("id").textValue();
String name = node.get("name").textValue();
JsonNode conditionsJson = node.get("conditions");
conditionsJson = objectMapper.readTree(conditionsJson.textValue());
Condition conditions = ConditionJacksonDeserializer.<UserAttribute>parseCondition(UserAttribute.class, objectMapper, conditionsJson);
return new Audience(id, name, conditions);
}
@Override
public OrderBookEntry deserialize(JsonParser jp, DeserializationContext ctx) throws IOException {
ObjectCodec oc = jp.getCodec();
JsonNode node = oc.readTree(jp);
final String price = node.get(0).asText();
final String qty = node.get(1).asText();
OrderBookEntry orderBookEntry = new OrderBookEntry();
orderBookEntry.setPrice(price);
orderBookEntry.setQuantity(qty);
return orderBookEntry;
}
@Override
public Set<BitmexOrderFlags> deserialize(JsonParser jsonParser, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
ObjectCodec oc = jsonParser.getCodec();
JsonNode node = oc.readTree(jsonParser);
String orderFlagsString = node.textValue();
Set<BitmexOrderFlags> orderFlags = EnumSet.noneOf(BitmexOrderFlags.class);
if (!orderFlagsString.isEmpty()) {
for (String orderFlag : orderFlagsString.split(",")) orderFlags.add(fromString(orderFlag));
}
return orderFlags;
}
@Override
public VolumesFrom deserialize(JsonParser jsonParser, DeserializationContext deserializationContext)
throws IOException {
ObjectCodec oc = jsonParser.getCodec();
JsonNode node = oc.readTree(jsonParser);
return VolumesFrom.parse(node.asText());
}
@Override
public BitmexFee deserialize(JsonParser jsonParser, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
ObjectCodec oc = jsonParser.getCodec();
JsonNode node = oc.readTree(jsonParser);
BigDecimal volume = new BigDecimal(node.path(0).asText());
BigDecimal fee = new BigDecimal(node.path(1).asText());
return new BitmexFee(volume, fee);
}