Lines 160-165
Link Here
|
160 |
private boolean useXMLRoot; |
160 |
private boolean useXMLRoot; |
161 |
private boolean areOtherMappingInThisContext = true; |
161 |
private boolean areOtherMappingInThisContext = true; |
162 |
private XMLConverter converter; |
162 |
private XMLConverter converter; |
|
|
163 |
private UnmarshalKeepAsElementPolicy keepAsElementPolicy; |
163 |
|
164 |
|
164 |
public XMLAnyObjectMapping() { |
165 |
public XMLAnyObjectMapping() { |
165 |
useXMLRoot = false; |
166 |
useXMLRoot = false; |
Lines 301-310
Link Here
|
301 |
int i = 0; |
302 |
int i = 0; |
302 |
int length = unmappedChildren.size(); |
303 |
int length = unmappedChildren.size(); |
303 |
while (iter.hasNext()) { |
304 |
while (iter.hasNext()) { |
|
|
305 |
Object objectValue = null; |
304 |
org.w3c.dom.Node next = (Node) iter.next(); |
306 |
org.w3c.dom.Node next = (Node) iter.next(); |
305 |
if (next.getNodeType() == Node.TEXT_NODE) { |
307 |
if (next.getNodeType() == Node.TEXT_NODE) { |
306 |
if ((i == (length - 1)) || (next.getNodeValue().trim().length() > 0)) { |
308 |
if ((i == (length - 1)) || (next.getNodeValue().trim().length() > 0)) { |
307 |
Object objectValue = next.getNodeValue(); |
309 |
objectValue = next.getNodeValue(); |
308 |
if(getConverter() != null) { |
310 |
if(getConverter() != null) { |
309 |
objectValue = getConverter().convertDataValueToObjectValue(objectValue, session, record.getUnmarshaller()); |
311 |
objectValue = getConverter().convertDataValueToObjectValue(objectValue, session, record.getUnmarshaller()); |
310 |
} |
312 |
} |
Lines 320-332
Link Here
|
320 |
if (!useXMLRoot) { |
322 |
if (!useXMLRoot) { |
321 |
referenceDescriptor = getDescriptor(nestedRecord, session, null); |
323 |
referenceDescriptor = getDescriptor(nestedRecord, session, null); |
322 |
|
324 |
|
323 |
if (referenceDescriptor != null) { |
325 |
if (referenceDescriptor != null && keepAsElementPolicy != UnmarshalKeepAsElementPolicy.KEEP_UNKNOWN_AS_ELEMENT) { |
324 |
ObjectBuilder builder = referenceDescriptor.getObjectBuilder(); |
326 |
ObjectBuilder builder = referenceDescriptor.getObjectBuilder(); |
325 |
Object objectValue = builder.buildObject(query, nestedRecord, joinManager); |
327 |
objectValue = builder.buildObject(query, nestedRecord, joinManager); |
326 |
if(getConverter() != null) { |
328 |
if(getConverter() != null) { |
327 |
objectValue = getConverter().convertDataValueToObjectValue(objectValue, session, record.getUnmarshaller()); |
329 |
objectValue = getConverter().convertDataValueToObjectValue(objectValue, session, record.getUnmarshaller()); |
328 |
} |
330 |
} |
329 |
return objectValue; |
331 |
return objectValue; |
|
|
332 |
} else { |
333 |
if (keepAsElementPolicy == UnmarshalKeepAsElementPolicy.KEEP_UNKNOWN_AS_ELEMENT) { |
334 |
XMLPlatformFactory.getInstance().getXMLPlatform().namespaceQualifyFragment((Element) next); |
335 |
objectValue = next; |
336 |
if(getConverter() != null) { |
337 |
objectValue = getConverter().convertDataValueToObjectValue(objectValue, session, record.getUnmarshaller()); |
338 |
} |
339 |
return objectValue; |
340 |
} |
330 |
} |
341 |
} |
331 |
} else { |
342 |
} else { |
332 |
String schemaType = ((Element) next).getAttributeNS(XMLConstants.SCHEMA_INSTANCE_URL, XMLConstants.SCHEMA_TYPE_ATTRIBUTE); |
343 |
String schemaType = ((Element) next).getAttributeNS(XMLConstants.SCHEMA_INSTANCE_URL, XMLConstants.SCHEMA_TYPE_ATTRIBUTE); |
Lines 355-366
Link Here
|
355 |
} |
366 |
} |
356 |
if (referenceDescriptor != null) { |
367 |
if (referenceDescriptor != null) { |
357 |
ObjectBuilder builder = referenceDescriptor.getObjectBuilder(); |
368 |
ObjectBuilder builder = referenceDescriptor.getObjectBuilder(); |
358 |
Object objectValue = builder.buildObject(query, nestedRecord, joinManager); |
369 |
objectValue = builder.buildObject(query, nestedRecord, joinManager); |
359 |
Object updated = ((XMLDescriptor) referenceDescriptor).wrapObjectInXMLRoot(objectValue, next.getNamespaceURI(), next.getLocalName(), next.getPrefix(), false); |
370 |
Object updated = ((XMLDescriptor) referenceDescriptor).wrapObjectInXMLRoot(objectValue, next.getNamespaceURI(), next.getLocalName(), next.getPrefix(), false); |
360 |
if(getConverter() != null) { |
371 |
if(getConverter() != null) { |
361 |
updated = getConverter().convertDataValueToObjectValue(objectValue, session, record.getUnmarshaller()); |
372 |
updated = getConverter().convertDataValueToObjectValue(objectValue, session, record.getUnmarshaller()); |
362 |
} |
373 |
} |
363 |
return updated; |
374 |
return updated; |
|
|
375 |
} else if ((referenceDescriptor != null) && (getKeepAsElementPolicy() != UnmarshalKeepAsElementPolicy.KEEP_UNKNOWN_AS_ELEMENT)) { |
376 |
ObjectBuilder builder = referenceDescriptor.getObjectBuilder(); |
377 |
objectValue = builder.buildObject(query, nestedRecord, joinManager); |
378 |
Object updated = ((XMLDescriptor) referenceDescriptor).wrapObjectInXMLRoot(objectValue, next.getNamespaceURI(), next.getLocalName(), next.getPrefix(), false); |
379 |
|
380 |
if(getConverter() != null) { |
381 |
updated = getConverter().convertDataValueToObjectValue(updated, session, record.getUnmarshaller()); |
382 |
} |
383 |
return updated; |
364 |
} else { |
384 |
} else { |
365 |
Object value = null; |
385 |
Object value = null; |
366 |
Node textchild = ((Element) next).getFirstChild(); |
386 |
Node textchild = ((Element) next).getFirstChild(); |
Lines 691-694
Link Here
|
691 |
public void setConverter(XMLConverter converter) { |
711 |
public void setConverter(XMLConverter converter) { |
692 |
this.converter = converter; |
712 |
this.converter = converter; |
693 |
} |
713 |
} |
|
|
714 |
|
715 |
public UnmarshalKeepAsElementPolicy getKeepAsElementPolicy() { |
716 |
return keepAsElementPolicy; |
717 |
} |
718 |
|
719 |
public void setKeepAsElementPolicy(UnmarshalKeepAsElementPolicy keepAsElementPolicy) { |
720 |
this.keepAsElementPolicy = keepAsElementPolicy; |
721 |
} |
694 |
} |
722 |
} |