@Test public void deserializeIsText() throws IOException { String text = "<binary>test"; when(node2.asText()).thenReturn(name); when(node.asText()).thenReturn(text); attr = deserializer.deserialize(jp, ct); assertEquals(attr.getName(), name); assertEquals(List.of(text).get(0), attr.getValue().get(0)); }
@Override public Attribute deserialize(final JsonParser jp, final DeserializationContext ctx) throws IOException { ObjectNode tree = jp.readValueAsTree(); String name = tree.get("name").asText(); List<Object> values = new ArrayList<>(); for (JsonNode node : tree.get("value")) { if (node.isNull()) { values.add(null); } else if (node.isObject()) { values.add(((ObjectNode) node).traverse(jp.getCodec()).readValueAs(GuardedString.class)); } else if (node.isBoolean()) { values.add(node.asBoolean()); } else if (node.isDouble()) { values.add(node.asDouble()); } else if (node.isLong()) { values.add(node.asLong()); } else if (node.isInt()) { values.add(node.asInt()); } else { String text = node.asText(); if (text.startsWith(AttributeSerializer.BYTE_ARRAY_PREFIX) && text.endsWith(AttributeSerializer.BYTE_ARRAY_SUFFIX)) { values.add(Base64.getDecoder().decode(StringUtils.substringBetween( text, AttributeSerializer.BYTE_ARRAY_PREFIX, AttributeSerializer.BYTE_ARRAY_SUFFIX))); } else { values.add(text); } } } if (Uid.NAME.equals(name)) { return new Uid(values.isEmpty() || values.get(0) == null ? null : values.get(0).toString()); } else { if (Name.NAME.equals(name)) { return new Name(values.isEmpty() || values.get(0) == null ? null : values.get(0).toString()); } else { return AttributeBuilder.build(name, values); } } }
AttributeDeserializer extends JsonDeserializer<Attribute> { @Override public Attribute deserialize(final JsonParser jp, final DeserializationContext ctx) throws IOException { ObjectNode tree = jp.readValueAsTree(); String name = tree.get("name").asText(); List<Object> values = new ArrayList<>(); for (JsonNode node : tree.get("value")) { if (node.isNull()) { values.add(null); } else if (node.isObject()) { values.add(((ObjectNode) node).traverse(jp.getCodec()).readValueAs(GuardedString.class)); } else if (node.isBoolean()) { values.add(node.asBoolean()); } else if (node.isDouble()) { values.add(node.asDouble()); } else if (node.isLong()) { values.add(node.asLong()); } else if (node.isInt()) { values.add(node.asInt()); } else { String text = node.asText(); if (text.startsWith(AttributeSerializer.BYTE_ARRAY_PREFIX) && text.endsWith(AttributeSerializer.BYTE_ARRAY_SUFFIX)) { values.add(Base64.getDecoder().decode(StringUtils.substringBetween( text, AttributeSerializer.BYTE_ARRAY_PREFIX, AttributeSerializer.BYTE_ARRAY_SUFFIX))); } else { values.add(text); } } } if (Uid.NAME.equals(name)) { return new Uid(values.isEmpty() || values.get(0) == null ? null : values.get(0).toString()); } else { if (Name.NAME.equals(name)) { return new Name(values.isEmpty() || values.get(0) == null ? null : values.get(0).toString()); } else { return AttributeBuilder.build(name, values); } } } }
AttributeDeserializer extends JsonDeserializer<Attribute> { @Override public Attribute deserialize(final JsonParser jp, final DeserializationContext ctx) throws IOException { ObjectNode tree = jp.readValueAsTree(); String name = tree.get("name").asText(); List<Object> values = new ArrayList<>(); for (JsonNode node : tree.get("value")) { if (node.isNull()) { values.add(null); } else if (node.isObject()) { values.add(((ObjectNode) node).traverse(jp.getCodec()).readValueAs(GuardedString.class)); } else if (node.isBoolean()) { values.add(node.asBoolean()); } else if (node.isDouble()) { values.add(node.asDouble()); } else if (node.isLong()) { values.add(node.asLong()); } else if (node.isInt()) { values.add(node.asInt()); } else { String text = node.asText(); if (text.startsWith(AttributeSerializer.BYTE_ARRAY_PREFIX) && text.endsWith(AttributeSerializer.BYTE_ARRAY_SUFFIX)) { values.add(Base64.getDecoder().decode(StringUtils.substringBetween( text, AttributeSerializer.BYTE_ARRAY_PREFIX, AttributeSerializer.BYTE_ARRAY_SUFFIX))); } else { values.add(text); } } } if (Uid.NAME.equals(name)) { return new Uid(values.isEmpty() || values.get(0) == null ? null : values.get(0).toString()); } else { if (Name.NAME.equals(name)) { return new Name(values.isEmpty() || values.get(0) == null ? null : values.get(0).toString()); } else { return AttributeBuilder.build(name, values); } } }  }
AttributeDeserializer extends JsonDeserializer<Attribute> { @Override public Attribute deserialize(final JsonParser jp, final DeserializationContext ctx) throws IOException { ObjectNode tree = jp.readValueAsTree(); String name = tree.get("name").asText(); List<Object> values = new ArrayList<>(); for (JsonNode node : tree.get("value")) { if (node.isNull()) { values.add(null); } else if (node.isObject()) { values.add(((ObjectNode) node).traverse(jp.getCodec()).readValueAs(GuardedString.class)); } else if (node.isBoolean()) { values.add(node.asBoolean()); } else if (node.isDouble()) { values.add(node.asDouble()); } else if (node.isLong()) { values.add(node.asLong()); } else if (node.isInt()) { values.add(node.asInt()); } else { String text = node.asText(); if (text.startsWith(AttributeSerializer.BYTE_ARRAY_PREFIX) && text.endsWith(AttributeSerializer.BYTE_ARRAY_SUFFIX)) { values.add(Base64.getDecoder().decode(StringUtils.substringBetween( text, AttributeSerializer.BYTE_ARRAY_PREFIX, AttributeSerializer.BYTE_ARRAY_SUFFIX))); } else { values.add(text); } } } if (Uid.NAME.equals(name)) { return new Uid(values.isEmpty() || values.get(0) == null ? null : values.get(0).toString()); } else { if (Name.NAME.equals(name)) { return new Name(values.isEmpty() || values.get(0) == null ? null : values.get(0).toString()); } else { return AttributeBuilder.build(name, values); } } }  @Override Attribute deserialize(final JsonParser jp, final DeserializationContext ctx); }
AttributeDeserializer extends JsonDeserializer<Attribute> { @Override public Attribute deserialize(final JsonParser jp, final DeserializationContext ctx) throws IOException { ObjectNode tree = jp.readValueAsTree(); String name = tree.get("name").asText(); List<Object> values = new ArrayList<>(); for (JsonNode node : tree.get("value")) { if (node.isNull()) { values.add(null); } else if (node.isObject()) { values.add(((ObjectNode) node).traverse(jp.getCodec()).readValueAs(GuardedString.class)); } else if (node.isBoolean()) { values.add(node.asBoolean()); } else if (node.isDouble()) { values.add(node.asDouble()); } else if (node.isLong()) { values.add(node.asLong()); } else if (node.isInt()) { values.add(node.asInt()); } else { String text = node.asText(); if (text.startsWith(AttributeSerializer.BYTE_ARRAY_PREFIX) && text.endsWith(AttributeSerializer.BYTE_ARRAY_SUFFIX)) { values.add(Base64.getDecoder().decode(StringUtils.substringBetween( text, AttributeSerializer.BYTE_ARRAY_PREFIX, AttributeSerializer.BYTE_ARRAY_SUFFIX))); } else { values.add(text); } } } if (Uid.NAME.equals(name)) { return new Uid(values.isEmpty() || values.get(0) == null ? null : values.get(0).toString()); } else { if (Name.NAME.equals(name)) { return new Name(values.isEmpty() || values.get(0) == null ? null : values.get(0).toString()); } else { return AttributeBuilder.build(name, values); } } }  @Override Attribute deserialize(final JsonParser jp, final DeserializationContext ctx);  }