<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>flapjack/src/main/java/flapjack/model/FieldValueAccessor.java</filename>
    </added>
    <added>
      <filename>flapjack/src/main/java/flapjack/model/NullSafeValueFactory.java</filename>
    </added>
    <added>
      <filename>flapjack/src/test/java/flapjack/model/FieldValueAccessorTest.java</filename>
    </added>
    <added>
      <filename>flapjack/src/test/java/flapjack/model/NullSafeValueFactoryTest.java</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -17,15 +17,11 @@ import flapjack.layout.FieldDefinition;
 import flapjack.layout.NoOpPaddingDescriptor;
 import flapjack.layout.PaddingDescriptor;
 import flapjack.layout.RecordLayout;
-import flapjack.model.FieldByteMap;
-import flapjack.model.FieldMapping;
-import flapjack.model.ObjectMapping;
-import flapjack.model.ObjectMappingStore;
+import flapjack.model.*;
 import flapjack.util.TypeConverter;
 
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
-import java.lang.reflect.Field;
 import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -42,6 +38,7 @@ public class RecordBuilder {
     private ObjectMappingStore objectMappingStore;
     private TypeConverter typeConverter = new TypeConverter();
     private static final byte[] ZERO_BYTES = new byte[0];
+    private FieldValueAccessor accessor = new FieldValueAccessor();
 
     public void build(Object domainObject, RecordWriter writer) {
         build(Arrays.asList(new Object[]{domainObject}), writer);
@@ -71,7 +68,7 @@ public class RecordBuilder {
                         bytes = alreadyBuiltFields.get(fieldDefinition);
                     } else if (fieldMapping != null) {
                         List mappedFieldDefinitions = findFieldDefinitionsforMapping(fieldMapping, fieldDefinitions);
-                        Object fieldValue = getField(fieldMapping.getDomainFieldName(), domain);
+                        Object fieldValue = accessor.get(domain, fieldMapping.getDomainFieldName());
                         FieldByteMap byteMap = fieldMapping.getBinaryFieldFactory().build(fieldValue, typeConverter, mappedFieldDefinitions);
                         bytes = byteMap.get(fieldDefinition);
                         alreadyBuiltFields.putAll(byteMap);
@@ -163,20 +160,6 @@ public class RecordBuilder {
         return objectMapping;
     }
 
-    private Object getField(String fieldName, Object domain) {
-        // TODO - needs to be pulled out to another class!!
-        try {
-            Field field = domain.getClass().getDeclaredField(fieldName);
-            field.setAccessible(true);
-            return field.get(domain);
-        } catch (NoSuchFieldException e) {
-            // TODO - needs coverage
-        } catch (IllegalAccessException e) {
-            // TODO = needs coverage
-        }
-        return null;
-    }
-
     public void setBuilderRecordLayoutResolver(BuilderRecordLayoutResolver recordLayoutResolver) {
         this.builderRecordLayoutResolver = recordLayoutResolver;
     }</diff>
      <filename>flapjack/src/main/java/flapjack/builder/RecordBuilder.java</filename>
    </modified>
    <modified>
      <diff>@@ -33,6 +33,7 @@ public class BeanPathObjectMapper implements ObjectMapper {
     private TypeConverter typeConverter = new TypeConverter();
     private boolean ignoreUnmappedFields;
     private ObjectMappingStore objectMappingStore;
+    private FieldValueAccessor accessor = new FieldValueAccessor();
 
 
     public void mapOnTo(Object parsedFields, Object domain) throws ObjectMappingException {
@@ -51,7 +52,7 @@ public class BeanPathObjectMapper implements ObjectMapper {
                 DomainFieldFactory domainFieldFactory = fieldMapping.getDomainFieldFactory();
                 ListMap recordData = grabRecordDataForField(fields, fieldMapping.getRecordFields());
                 verifyAllRecordFieldsHaveData(recordData, beanPath, domainClass);
-                ClassUtil.setBean(domain, beanPath, domainFieldFactory.build(recordData, field.getType(), typeConverter));
+                accessor.set(domainFieldFactory.build(recordData, field.getType(), typeConverter), domain, beanPath);
                 alreadyMappedFields.addAll(fieldMapping.getRecordFields());
             }
         }</diff>
      <filename>flapjack/src/main/java/flapjack/model/BeanPathObjectMapper.java</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>7e5594afbeed008b8da67f28f32ce91559b2212d</id>
    </parent>
  </parents>
  <author>
    <name>Dan Dudley</name>
    <email>born2snipe@gmail.com</email>
  </author>
  <url>http://github.com/born2snipe/flapjack/commit/e577e47be3181cead1d8075c17504a9d4a702e0f</url>
  <id>e577e47be3181cead1d8075c17504a9d4a702e0f</id>
  <committed-date>2009-10-29T19:05:06-07:00</committed-date>
  <authored-date>2009-10-29T19:05:06-07:00</authored-date>
  <message>updated to handle primitive types properly for 1.4 JDK when null values are encounter
slowly removing the need for the ClassUtil</message>
  <tree>a47d19e98c80287dca9ce1aae9a4a58ca1423d22</tree>
  <committer>
    <name>Dan Dudley</name>
    <email>born2snipe@gmail.com</email>
  </committer>
</commit>
