| Dave,     The change looks 
good.     The addition of the new protected 
method should have minimal impact on the other 46 existing clients of 
ObjectBuilder in foundation.     The overridden implementation 
in OX that returns an XMLRecord instance of AbstractRecord looks fine as long as 
the session parameter and session.getSessionName() can be assumed to be 
!null.       thank you     /michael   
  All,
 I'm a proposing a slight change to 
  ObjectBuilder to resolve the above-mentioned issue.  
  On (or near, depending on the build) line 1783 in the 
  extractPrimaryKeyFromObject(Object, AbstractSession, boolean) method in 
  ObjectBuilder the code is:
 
 
    I am proposing it be changed 
  to:AbstractRecord databaseRow 
    = createRecord(size, session);  
 
    Where createRecordForPKExtraction() 
  would be:AbstractRecord databaseRow 
    = createRecordForPKExtraction(size, session);  
 /**
 * Create a new row/record for the object 
  builder. This allows subclasses to
 * define 
  different record types.  This will typically be called when a
 * record will be used for temporarily holding on 
  to primary key fields.
 */
 protected AbstractRecord createRecordForPKExtraction(int size, AbstractSession 
  session) {
 return 
  createRecord(size, session);
 }
 
 This will 
  allow us (in XMLObjectBuilder) to return the correct record type for primary 
  key extraction purposes.  Please let me know if you have any issues or 
  concerns with these changes.  For reference, here is the bug 
  description:
 
 The TCK test 
    DefineTypesTest.testDynamicTypesGroup1() involves a schema where a complex 
    type contains an unbounded element of type xsd:ID.  A null pointer 
    exception occurs upon load 
    operation:
 java.lang.NullPointerException
 at 
    org.eclipse.persistence.internal.sessions.AbstractRecord.put(AbstractRecord.java:593)
 at 
    org.eclipse.persistence.oxm.mappings.XMLCompositeDirectCollectionMapping.writeFromObjectIntoRow(XMLCompositeDirectCollectionMapping.java:342)
 at 
    org.eclipse.persistence.internal.descriptors.ObjectBuilder.extractPrimaryKeyFromObject(ObjectBuilder.java:1780)
 at 
    org.eclipse.persistence.internal.descriptors.ObjectBuilder.extractPrimaryKeyFromObject(ObjectBuilder.java:1731)
 at 
    org.eclipse.persistence.internal.oxm.XMLObjectBuilder.extractPrimaryKeyFromObject(XMLObjectBuilder.java:444)
 at 
    org.eclipse.persistence.oxm.record.UnmarshalRecord.endDocument(UnmarshalRecord.java:481)
 ...
 
 This occurs because we are returning the wrong record type for 
    this mapping (composite direct collection) during primary key 
    extraction.  The code in ObjectBuilder simply calls createRecord(size, 
    session) which in XMLObjectBuilder returns an UnmarshalRecord.  In this 
    case, however, we need a DOMRecord such that the code can perform get and 
    put operations (which are not supported in unmarshal 
  record).
 
 
 --  
   David 
  McCann | Principal Software Engineer | TopLink Product
 Oracle 
  Corporation Canada
 45 O'Connor Street, Suite 400
 Ottawa, Ontario K1P 
  1A4
 Canada
 613.288.4636
 613.238.2818 
(fax)
 |