@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);
    }
Exemple #2
0
  protected T doDemarshall(final T impl, final EJValue o, final MarshallingSession ctx) {
    if (o.isObject() == null) return impl;

    Object demarshalledKey;
    final String assumedKeyType = ctx.getAssumedMapKeyType();
    final String assumedValueType = ctx.getAssumedMapValueType();

    // the assumed map k/v types can only be used once since they are not set for nested maps.
    ctx.setAssumedMapKeyType(null);
    ctx.setAssumedMapValueType(null);

    for (final String key : o.isObject().keySet()) {
      final EJValue ejValue = o.isObject().get(key);
      if (key.startsWith(SerializationParts.EMBEDDED_JSON)) {
        final EJValue ejKey =
            ParserFactory.get().parse(key.substring(SerializationParts.EMBEDDED_JSON.length()));
        demarshalledKey =
            ctx.getMarshallerInstance(ctx.determineTypeFor(null, ejKey)).demarshall(ejKey, ctx);

        final String valueType = ctx.determineTypeFor(null, ejValue);
        impl.put(demarshalledKey, ctx.getMarshallerInstance(valueType).demarshall(ejValue, ctx));
      } else {
        if (key.equals(SerializationParts.OBJECT_ID)) {
          continue;
        }

        if (assumedKeyType != null && assumedValueType != null) {
          if (key.equals(SerializationParts.NULL_VALUE)) {
            demarshalledKey = null;
          } else {
            demarshalledKey = convertKey(assumedKeyType, key, ctx);
          }

          final String valueType;
          if (ejValue.isObject() != null
              && ejValue.isObject().containsKey(SerializationParts.ENCODED_TYPE)) {
            valueType = ctx.determineTypeFor(null, ejValue);
          } else {
            valueType = assumedValueType;
          }
          final Object demarshalledValue =
              ctx.getMarshallerInstance(valueType).demarshall(ejValue, ctx);
          impl.put(demarshalledKey, demarshalledValue);
        } else {
          demarshalledKey = (key.equals(SerializationParts.NULL_VALUE)) ? null : key;
          impl.put(
              demarshalledKey,
              ctx.getMarshallerInstance(ctx.determineTypeFor(null, ejValue))
                  .demarshall(ejValue, ctx));
        }
      }
    }
    return impl;
  }
Exemple #3
0
 @Override
 public Float doNotNullDemarshall(final EJValue o, final MarshallingSession ctx) {
   if (o.isObject() != null) {
     EJValue numVal = o.isObject().get(SerializationParts.NUMERIC_VALUE);
     if (numVal.isString() != null) {
       return Float.parseFloat(numVal.isString().stringValue());
     }
     return numVal.isNumber().floatValue();
   } else if (o.isString() != null) {
     return Float.parseFloat(o.isString().stringValue());
   } else {
     return o.isNumber().floatValue();
   }
 }
Exemple #4
0
  @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);
   }
 }