Marcus Christie created AIRAVATA-2751:
-----------------------------------------

             Summary: Dozer custom mapping to skip primitive fields that aren't 
set
                 Key: AIRAVATA-2751
                 URL: https://issues.apache.org/jira/browse/AIRAVATA-2751
             Project: Airavata
          Issue Type: Bug
            Reporter: Marcus Christie


I'm finding that primitive fields that aren't set on a thrift model, like 
{{long}}, are mapped into entities as a 0.  The Dozer mapping (see 
ObjectMapperSingleton) isn't calling {{isSet}} on the thrift models to make 
sure that they are mapped.

Here's some pseudo code that I think would do the trick, although I'm not sure 
if a CustomFieldMapper is the right way to customize this in Dozer (seemed like 
the best option given the research I did):
{code}
    public static ObjectMapperSingleton getInstance(){
        if(instance == null) {
            instance = new ObjectMapperSingleton();
            instance.setCustomFieldMapper(new CustomFieldMapper() {
                @Override
                public boolean mapField(Object source, Object destination, 
Object sourceFieldValue, ClassMap classMap, FieldMap fieldMap) {
                    if (source instanceof TBase) {
                        TBase thriftSource = (TBase) source;
                        // TODO: following doesn't work, needs reflection
                        srcField = 
thriftSource.getClass()._Fields.byName(fieldMap.getSrcFieldName());
                        if (!thriftSource.isSet(srcField)) {
                            // Just skipping mapping field if not set on Thrift 
source model
                            return true;
                        }

                    }
                    return false;
                }
            });
        }
        return instance;
    }
{code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to