/** * Get a value from an object based on an XPath statement. * * @param <T> * The return type of this method corresponds to the returnType parameter. * @param object * The XPath will be executed relative to this object. * @param xPath * The XPath statement. * @param namespaceResolver * A <tt>NamespaceResolver</tt> containing the prefix/URI pairings from the XPath statement. * @param returnType * The return type. * * @return * The object corresponding to the XPath or null if no result was found. */ public <T> T getValueByXPath(Object object, String xPath, NamespaceResolver namespaceResolver, Class<T> returnType) { return getXMLContext().getValueByXPath(object, xPath, namespaceResolver, returnType); }
/** * Get a value from an object based on an XPath statement. * * @param <T> * The return type of this method corresponds to the returnType parameter. * @param object * The XPath will be executed relative to this object. * @param xPath * The XPath statement. * @param namespaceResolver * A <tt>NamespaceResolver</tt> containing the prefix/URI pairings from the XPath statement. * @param returnType * The return type. * * @return * The object corresponding to the XPath or null if no result was found. */ public <T> T getValueByXPath(Object object, String xPath, NamespaceResolver namespaceResolver, Class<T> returnType) { return getXMLContext().getValueByXPath(object, xPath, namespaceResolver, returnType); }
XMLDescriptor xmlDescriptor = (XMLDescriptor) session.getDescriptor(object); StringTokenizer stringTokenizer = new StringTokenizer(xPath, "/"); T value = getValueByXPath(object, xmlDescriptor.getObjectBuilder(), stringTokenizer, namespaceResolver, returnType); if(null == value) { DatabaseMapping selfMapping = xmlDescriptor.getObjectBuilder().getMappingForField(new XMLField(".")); if(null != selfMapping) { return getValueByXPath(selfMapping.getAttributeValueFromObject(object), selfMapping.getReferenceDescriptor().getObjectBuilder(), new StringTokenizer(xPath, "/"), ((XMLDescriptor) selfMapping.getReferenceDescriptor()).getNamespaceResolver(), returnType);
if(stringTokenizer.hasMoreElements()) { ObjectBuilder childObjectBuilder = mapping.getReferenceDescriptor().getObjectBuilder(); return (T) getValueByXPath(childObject, childObjectBuilder, stringTokenizer, namespaceResolver, returnType); } else { return (T) childObject; Object childObject = mapping.getAttributeValueFromObject(object); ObjectBuilder childObjectBuilder = mapping.getReferenceDescriptor().getObjectBuilder(); return (T) getValueByXPath(childObject, childObjectBuilder, stringTokenizer, namespaceResolver, returnType); } else { return (T) mapping.getAttributeValueFromObject(object);
if(null == pk.get(x)) { XMLField pkField = (XMLField) xmlDescriptor.getPrimaryKeyFields().get(x); pk.set(x, getUnmarshaller().getXMLContext().getValueByXPath(currentObject, pkField.getXPath(), pkField.getNamespaceResolver(), Object.class));
public boolean marshalSingleValue(XPathFragment xPathFragment, MarshalRecord marshalRecord, Object object, Object targetObject, AbstractSession session, NamespaceResolver namespaceResolver, MarshalContext marshalContext) { Object fieldValue = xmlObjectReferenceMapping.buildFieldValue(targetObject, xmlField, session); if (fieldValue == null) { if(null != targetObject) { XMLField fkField = (XMLField) xmlObjectReferenceMapping.getSourceToTargetKeyFieldAssociations().get(xmlField); fieldValue = marshalRecord.getMarshaller().getXMLContext().getValueByXPath(targetObject, fkField.getXPath(), fkField.getNamespaceResolver(), Object.class); } if(null == fieldValue) { return false; } } QName schemaType = getSchemaType(xmlField, fieldValue, session); String stringValue = getValueToWrite(schemaType, fieldValue, (XMLConversionManager) session.getDatasourcePlatform().getConversionManager(),namespaceResolver); XPathFragment groupingFragment = marshalRecord.openStartGroupingElements(namespaceResolver); if (xPathFragment.isAttribute()) { marshalRecord.attribute(xPathFragment, namespaceResolver, stringValue); marshalRecord.closeStartGroupingElements(groupingFragment); } else { marshalRecord.closeStartGroupingElements(groupingFragment); marshalRecord.characters(stringValue); } return true; }
@Override public boolean marshalSingleValue(XPathFragment xPathFragment, MarshalRecord marshalRecord, Object object, Object value, AbstractSession session, NamespaceResolver namespaceResolver, MarshalContext marshalContext) { Object fieldValue = xmlCollectionReferenceMapping.buildFieldValue(value, xmlField, session); if (fieldValue == null) { if(null != value) { XMLField f2 = (XMLField) xmlCollectionReferenceMapping.getSourceToTargetKeyFieldAssociations().get(xmlField); fieldValue = marshalRecord.getMarshaller().getXMLContext().getValueByXPath(value, f2.getXPath(), f2.getNamespaceResolver(), Object.class); } if(null == fieldValue) { return false; } } QName schemaType = getSchemaType(xmlField, fieldValue, session); String stringValue = getValueToWrite(schemaType, fieldValue, (XMLConversionManager) session.getDatasourcePlatform().getConversionManager(), namespaceResolver); if (stringValue != null) { if (xPathFragment.isAttribute()) { marshalRecord.attribute(xPathFragment, namespaceResolver, stringValue); marshalRecord.closeStartElement(); } else { marshalRecord.closeStartElement(); marshalRecord.characters(stringValue); } return true; } return false; }
if(null != objectValue) { XMLField fkField = (XMLField) xmlCollectionReferenceMapping.getSourceToTargetKeyFieldAssociations().get(xmlField); fieldValue = marshalRecord.getMarshaller().getXMLContext().getValueByXPath(objectValue, fkField.getXPath(), fkField.getNamespaceResolver(), Object.class);