@Override public String determineTypeFor(String formatType, Object o) { EJValue jsonValue = (EJValue) o; if (jsonValue.isObject() != null) { EJObject jsonObject = jsonValue.isObject(); if (jsonObject.containsKey(SerializationParts.ENCODED_TYPE)) { return jsonObject.get(SerializationParts.ENCODED_TYPE).isString().stringValue(); } else { return Map.class.getName(); } } else if (jsonValue.isString() != null) { return String.class.getName(); } else if (jsonValue.isNumber() != null) { return Double.class.getName(); } else if (jsonValue.isBoolean() != null) { return Boolean.class.getName(); } else if (jsonValue.isArray() != null) { return List.class.getName(); } else if (jsonValue.isNull()) { return null; } throw new RuntimeException( "unknown type: cannot reverse map value to concrete Java type: " + o); }
@Override public Date doNotNullDemarshall(final EJValue o, final MarshallingSession ctx) { if (o.isObject() != null) { EJValue qualifiedValue = o.isObject().get(SerializationParts.QUALIFIED_VALUE); if (!qualifiedValue.isNull() && qualifiedValue.isString() != null) { return new Date(Long.parseLong(qualifiedValue.isString().stringValue())); } EJValue numericValue = o.isObject().get(SerializationParts.NUMERIC_VALUE); if (!numericValue.isNull() && numericValue.isNumber() != null) { return new Date(new Double(numericValue.isNumber().doubleValue()).longValue()); } if (!numericValue.isNull() && numericValue.isString() != null) { return new Date(Long.parseLong(numericValue.isString().stringValue())); } } return null; }
public Enum demarshall(EJValue a0, MarshallingSession a1) { try { if (a0.isNull()) { return null; } return Enum.valueOf( enumType, a0.isObject().get(SerializationParts.ENUM_STRING_VALUE).isString().stringValue()); } catch (Throwable t) { t.printStackTrace(); throw new RuntimeException("error demarshalling enum: " + enumType.getName(), t); } }