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_ALL_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) || (keepAsElementPolicy == UnmarshalKeepAsElementPolicy.KEEP_ALL_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_ALL_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 400-406
Link Here
|
400 |
XMLContext xmlContext = xmlRecord.getUnmarshaller().getXMLContext(); |
420 |
XMLContext xmlContext = xmlRecord.getUnmarshaller().getXMLContext(); |
401 |
XMLDescriptor xmlDescriptor = xmlContext.getDescriptor(rootQName); |
421 |
XMLDescriptor xmlDescriptor = xmlContext.getDescriptor(rootQName); |
402 |
if (null == xmlDescriptor) { |
422 |
if (null == xmlDescriptor) { |
403 |
throw XMLMarshalException.noDescriptorWithMatchingRootElement(xmlRecord.getLocalName()); |
423 |
if (!((keepAsElementPolicy == UnmarshalKeepAsElementPolicy.KEEP_UNKNOWN_AS_ELEMENT) || (keepAsElementPolicy == UnmarshalKeepAsElementPolicy.KEEP_ALL_AS_ELEMENT))) { |
|
|
424 |
throw XMLMarshalException.noDescriptorWithMatchingRootElement(xmlRecord.getLocalName()); |
425 |
} |
404 |
} |
426 |
} |
405 |
return xmlDescriptor; |
427 |
return xmlDescriptor; |
406 |
} |
428 |
} |
Lines 449-454
Link Here
|
449 |
} |
471 |
} |
450 |
if (objectValue instanceof String) { |
472 |
if (objectValue instanceof String) { |
451 |
writeSimpleValue(xmlRootField, record, session, originalObject, objectValue, root, toReplace, wasXMLRoot); |
473 |
writeSimpleValue(xmlRootField, record, session, originalObject, objectValue, root, toReplace, wasXMLRoot); |
|
|
474 |
} else if (objectValue instanceof org.w3c.dom.Node) { |
475 |
Node importedCopy = doc.importNode((Node) objectValue, true); |
476 |
root.appendChild(importedCopy); |
452 |
} else { |
477 |
} else { |
453 |
XMLDescriptor referenceDescriptor = (XMLDescriptor) session.getDescriptor(objectValue.getClass()); |
478 |
XMLDescriptor referenceDescriptor = (XMLDescriptor) session.getDescriptor(objectValue.getClass()); |
454 |
if (referenceDescriptor == null) { |
479 |
if (referenceDescriptor == null) { |
Lines 691-694
Link Here
|
691 |
public void setConverter(XMLConverter converter) { |
716 |
public void setConverter(XMLConverter converter) { |
692 |
this.converter = converter; |
717 |
this.converter = converter; |
693 |
} |
718 |
} |
|
|
719 |
|
720 |
public UnmarshalKeepAsElementPolicy getKeepAsElementPolicy() { |
721 |
return keepAsElementPolicy; |
722 |
} |
723 |
|
724 |
public void setKeepAsElementPolicy(UnmarshalKeepAsElementPolicy keepAsElementPolicy) { |
725 |
this.keepAsElementPolicy = keepAsElementPolicy; |
726 |
} |
694 |
} |
727 |
} |