src/main/java/com/amazonaws/hal/client/HalJsonMapUnmarshaller.java
@Override
    public Map<String, Object> unmarshall(JsonUnmarshallerContext context)
            throws Exception {
        Map<String, Object> map = new HashMap<>();
        JsonToken token = context.getCurrentToken();

        while (token != null && token != JsonToken.END_OBJECT) {
            if (token == JsonToken.FIELD_NAME) {
                String property = context.readText();

                token = context.nextToken();
                if (token == JsonToken.START_OBJECT) {
                    context.nextToken();
                    map.put(property, HalJsonMapUnmarshaller.getInstance().unmarshall(context));
                } else if (token == JsonToken.START_ARRAY) {
                    context.nextToken();
                    map.put(property, HalJsonListUnmarshaller.getInstance().unmarshall(context));
                } else {
                    map.put(property, JsonUnmarshallerUtil.getObjectForToken(token, context));
                }
            }

            token = context.nextToken();
        }

        return map;
    }
@Override
    public Map<String, Object> unmarshall(JsonUnmarshallerContext context)
            throws Exception {
        Map<String, Object> map = new HashMap<>();
        JsonToken token = context.getCurrentToken();

        while (token != null && token != JsonToken.END_OBJECT) {
            if (token == JsonToken.FIELD_NAME) {
                String property = context.readText();

                token = context.nextToken();
                if (token == JsonToken.START_OBJECT) {
                    context.nextToken();
                    map.put(property, HalJsonMapUnmarshaller.getInstance().unmarshall(context));
                } else if (token == JsonToken.START_ARRAY) {
                    context.nextToken();
                    map.put(property, HalJsonListUnmarshaller.getInstance().unmarshall(context));
                } else {
                    map.put(property, JsonUnmarshallerUtil.getObjectForToken(token, context));
                }
            }

            token = context.nextToken();
        }

        return map;
    }
-------------------------------------------------------------