/** * INTERNAL: Trigger that the grouping elements should be written. This is normally done when * something like a mapping has a non-null value that is marshalled. * * @param namespaceResolver The NamespaceResolver can be used to resolve the namespace URI for the * namespace prefix held by the XPathFragment (if required). */ public XPathFragment openStartGroupingElements(NamespaceResolver namespaceResolver) { if (null == groupingElements) { return null; } XPathFragment xPathFragment = null; for (int x = 0, groupingElementsSize = groupingElements.size(); x < groupingElementsSize; x++) { XPathNode xPathNode = groupingElements.get(x); xPathFragment = xPathNode.getXPathFragment(); openStartElement(xPathFragment, namespaceResolver); if (x != (groupingElementsSize - 1)) { closeStartElement(); } } groupingElements = null; return xPathFragment; }
/** * Return the JAXB mapping for the SDO property. They are matched on their XML schema * representation. */ Mapping getJAXBMappingForProperty(SDOProperty sdoProperty) { DatabaseMapping sdoMapping = sdoProperty.getXmlMapping(); XMLField field; if (sdoMapping instanceof XMLObjectReferenceMapping) { XMLObjectReferenceMapping referenceMapping = (XMLObjectReferenceMapping) sdoMapping; field = (XMLField) referenceMapping.getFields().get(0); } else { field = (XMLField) sdoMapping.getField(); } TreeObjectBuilder treeObjectBuilder = (TreeObjectBuilder) descriptor.getObjectBuilder(); XPathNode xPathNode = treeObjectBuilder.getRootXPathNode(); XPathFragment xPathFragment = field.getXPathFragment(); while (xPathNode != null && xPathFragment != null) { if (xPathFragment.isAttribute()) { if (sdoProperty.isMany() && !sdoProperty.isContainment() && !sdoProperty.getType().isDataType()) { xPathFragment = null; break; } Map attributeChildrenMap = xPathNode.getAttributeChildrenMap(); if (null == attributeChildrenMap) { xPathNode = null; } else { xPathNode = (XPathNode) attributeChildrenMap.get(xPathFragment); } } else if (xPathFragment.nameIsText()) { xPathNode = xPathNode.getTextNode(); } else { Map nonAttributeChildrenMap = xPathNode.getNonAttributeChildrenMap(); if (null == nonAttributeChildrenMap) { xPathNode = null; } else { xPathNode = (XPathNode) nonAttributeChildrenMap.get(xPathFragment); } } xPathFragment = xPathFragment.getNextFragment(); if (xPathFragment != null && xPathFragment.nameIsText()) { if (sdoProperty.isMany() && !sdoProperty.isContainment()) { xPathFragment = null; break; } } } if (null == xPathFragment && xPathNode != null) { if (xPathNode.getNodeValue().isMappingNodeValue()) { MappingNodeValue mappingNodeValue = (MappingNodeValue) xPathNode.getNodeValue(); return mappingNodeValue.getMapping(); } } throw SDOException.sdoJaxbNoMappingForProperty(sdoProperty.getName(), field.getXPath()); }