protected Node objectToXMLNode(Object object, Node rootNode, ABSTRACT_SESSION session, DESCRIPTOR descriptor, boolean isXMLRoot) throws XMLMarshalException { MarshalRecord marshalRecord = new NodeRecord(); marshalRecord.setMarshaller(this); marshalRecord.getNamespaceResolver().setDOM(rootNode); marshal(object, marshalRecord, session, descriptor, isXMLRoot); return marshalRecord.getDocument(); }
/** * INTERNAL: * Add the field-value pair to the document. */ @Override public Object put(CoreField key, Object value) { add(key, value); return null; }
/** * Receive notification that an element is being started. * @param xPathFragment The XPathFragment contains the name and prefix * information about the XML element being ended. * @param namespaceResolver The NamespaceResolver can be used to resolve the * namespace URI for the namespace prefix held by the XPathFragment (if * required). */ public void openStartElement(XPathFragment xPathFragment, NamespaceResolver namespaceResolver) { this.addPositionalNodes(xPathFragment, namespaceResolver); }
/** * Used when an nil attribute should be written * @since EclipseLink 2.4 */ public void emptyComplex(XPathFragment xPathFragment, NamespaceResolver namespaceResolver){ XPathFragment groupingFragment = openStartGroupingElements(namespaceResolver); closeStartGroupingElements(groupingFragment); openStartElement(xPathFragment, namespaceResolver); closeStartElement(); endElement(xPathFragment, namespaceResolver); }
/** * Used when an nil attribute should be written * @since EclipseLink 2.4 */ public void emptyAttribute(XPathFragment xPathFragment,NamespaceResolver namespaceResolver){ XPathFragment groupingFragment = openStartGroupingElements(namespaceResolver); // We mutate the null into an empty string attribute(xPathFragment, namespaceResolver, Constants.EMPTY_STRING); closeStartGroupingElements(groupingFragment); }
/** * Used when an nil attribute should be written * @since EclipseLink 2.4 */ public void emptySimple(NamespaceResolver namespaceResolver){ XPathFragment groupingFragment = openStartGroupingElements(namespaceResolver); closeStartGroupingElements(groupingFragment); }
@Override public boolean marshalSingleValue(XPathFragment xPathFragment, MarshalRecord marshalRecord, Object object, Object value, AbstractSession session, NamespaceResolver namespaceResolver, MarshalContext marshalContext) { if (xmlCollectionReferenceMapping.usesSingleNode()) { XPathFragment groupingFragment = marshalRecord.openStartGroupingElements(namespaceResolver); if (xPathFragment.isAttribute()) { marshalRecord.attribute(xPathFragment, namespaceResolver, (String) value); marshalRecord.closeStartGroupingElements(groupingFragment); } else { marshalRecord.closeStartGroupingElements(groupingFragment); marshalRecord.characters((String) value); } } else { for (int x = 0, size = marshalContext.getNonAttributeChildrenSize(branchNode); x < size; x++) { XPathNode xPathNode = (XPathNode)marshalContext.getNonAttributeChild(x, branchNode); xPathNode.marshal((MarshalRecord)marshalRecord, value, session, namespaceResolver, marshalRecord.getMarshaller(), marshalContext.getMarshalContext(x)); } } return true; }
/** * Used when an nil attribute should be written * @since EclipseLink 2.4 */ public void nilComplex(XPathFragment xPathFragment, NamespaceResolver namespaceResolver){ XPathFragment groupingFragment = openStartGroupingElements(namespaceResolver); closeStartGroupingElements(groupingFragment); openStartElement(xPathFragment, namespaceResolver); String xsiPrefix = processNamespaceResolverForXSIPrefix(namespaceResolver); XPathFragment nilFragment = new XPathFragment(Constants.ATTRIBUTE + xsiPrefix + COLON_W_SCHEMA_NIL_ATTRIBUTE); nilFragment.setNamespaceURI(javax.xml.XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI); attribute(nilFragment, namespaceResolver, TRUE); closeStartElement(); endElement(xPathFragment, namespaceResolver); }
public boolean marshalSingleValue(XPathFragment xPathFragment, MarshalRecord marshalRecord, Object object, Object value, AbstractSession session, NamespaceResolver namespaceResolver, MarshalContext marshalContext) { if (xmlCollectionReferenceMapping.usesSingleNode()) { XPathFragment groupingFragment = marshalRecord.openStartGroupingElements(namespaceResolver); if (xPathFragment.isAttribute()) { marshalRecord.attribute(xPathFragment, namespaceResolver, (String) value); marshalRecord.closeStartGroupingElements(groupingFragment); } else { marshalRecord.closeStartGroupingElements(groupingFragment); marshalRecord.characters((String) value); String stringValue = getValueToWrite(schemaType, fieldValue, (XMLConversionManager) session.getDatasourcePlatform().getConversionManager(), namespaceResolver); if (stringValue != null) { marshalRecord.openStartElement(xPathFragment, namespaceResolver); XPathFragment nextFragment = xPathFragment.getNextFragment(); if (nextFragment.isAttribute()) { marshalRecord.attribute(nextFragment, namespaceResolver, stringValue); marshalRecord.closeStartElement(); } else { marshalRecord.closeStartElement(); marshalRecord.characters(stringValue); marshalRecord.endElement(xPathFragment, namespaceResolver);
public boolean marshalSingleValue(XPathFragment xPathFragment, MarshalRecord marshalRecord, Object object, Object value, AbstractSession session, NamespaceResolver namespaceResolver, MarshalContext marshalContext) { if (xmlCompositeDirectCollectionMapping.hasValueConverter()) { if (xmlCompositeDirectCollectionMapping.getValueConverter() instanceof XMLConverter) { value = ((XMLConverter) xmlCompositeDirectCollectionMapping.getValueConverter()).convertObjectValueToDataValue(value, session, marshalRecord.getMarshaller()); } else { value = xmlCompositeDirectCollectionMapping.getValueConverter().convertObjectValueToDataValue(value, session); String stringValue = getValueToWrite(schemaType, value, (XMLConversionManager) session.getDatasourcePlatform().getConversionManager(), namespaceResolver); if (null != stringValue) { marshalRecord.openStartElement(xPathFragment, namespaceResolver); XPathFragment nextFragment = xPathFragment.getNextFragment(); if (nextFragment.isAttribute()) { marshalRecord.attribute(nextFragment, namespaceResolver, stringValue); marshalRecord.closeStartElement(); } else { if (xmlField.isTypedTextField()) { updateNamespaces(schemaType, marshalRecord, xmlField); marshalRecord.closeStartElement(); if (xmlCompositeDirectCollectionMapping.isCDATA()) { marshalRecord.cdata(stringValue); } else { marshalRecord.characters(stringValue); marshalRecord.endElement(xPathFragment, namespaceResolver); } else { if (xmlCompositeDirectCollectionMapping.getNullPolicy().getMarshalNullRepresentation() != XMLNullRepresentationType.ABSENT_NODE) { marshalRecord.openStartElement(xPathFragment, namespaceResolver); XPathFragment nextFragment = xPathFragment.getNextFragment();
/** * INTERNAL: * Add the field-value pair to the document. */ @Override public void add(CoreField key, Object value) { if (null == value) { return; } Field xmlField = convertToXMLField(key); XPathFragment lastFragment = xmlField.getLastXPathFragment(); if (lastFragment.nameIsText()) { characters(xmlField.getSchemaType(), value, null, xmlField.isCDATA()); } else if (lastFragment.isAttribute()) { attribute(lastFragment, xmlField.getNamespaceResolver(), value, xmlField.getSchemaType()); } else { element(lastFragment); } }
private void marshalSimpleValue(XPathFragment xmlRootFragment, MarshalRecord marshalRecord, Object originalValue, Object object, Object value, AbstractSession session, NamespaceResolver namespaceResolver) { if (xmlRootFragment != null) { QName qname = ((XMLRoot) originalValue).getSchemaType(); value = getValueToWrite(qname, value, (XMLConversionManager) session.getDatasourcePlatform().getConversionManager(), namespaceResolver); Namespace generatedNamespace = setupFragment(((XMLRoot) originalValue), xmlRootFragment, marshalRecord); getXPathNode().startElement(marshalRecord, xmlRootFragment, object, session, namespaceResolver, null, null); if (generatedNamespace != null) { marshalRecord.attribute(XMLConstants.XMLNS_URL, generatedNamespace.getPrefix(), XMLConstants.XMLNS + XMLConstants.COLON + generatedNamespace.getPrefix(), generatedNamespace.getNamespaceURI()); } updateNamespaces(qname, marshalRecord, null); } if (value instanceof String) { marshalRecord.characters((String) value); } else { marshalRecord.node((org.w3c.dom.Node) value, marshalRecord.getNamespaceResolver()); } if (xmlRootFragment != null) { marshalRecord.endElement(xmlRootFragment, namespaceResolver); } }
/** * Used when an nil attribute should be written * @since EclipseLink 2.4 */ public void nilSimple(NamespaceResolver namespaceResolver){ XPathFragment groupingFragment = openStartGroupingElements(namespaceResolver); String xsiPrefix = processNamespaceResolverForXSIPrefix(namespaceResolver); StringBuilder qName = new StringBuilder(Constants.ATTRIBUTE); // Unsynchronized qName.append(xsiPrefix).append(COLON_W_SCHEMA_NIL_ATTRIBUTE); XPathFragment nilFragment = new XPathFragment(qName.toString()); nilFragment.setNamespaceURI(javax.xml.XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI); attribute(nilFragment, namespaceResolver, TRUE); closeStartGroupingElements(groupingFragment); }
@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; }
@Override public void setMarshaller(Marshaller marshaller) { super.setMarshaller(marshaller); validatingRecord.setMarshaller(marshaller); marshalRecord.setMarshaller(marshaller); }
public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException { XPathFragment frag = new XPathFragment(qName); marshalRecord.openStartElement(frag, resolver); for (int i = 0; i < atts.getLength(); i++) { marshalRecord.attribute(atts.getURI(i), atts.getLocalName(i), atts.getQName(i), atts.getValue(i)); } marshalRecord.closeStartElement(); }
/** * INTERNAL: * Convert the given object to an XML Document * @param object the object to marshal * @return the document which the specified object has been marshalled to * @param descriptor the XMLDescriptor for the object being marshalled * @throws XMLMarshalException if an error occurred during marshalling */ protected Document objectToXML(Object object, DESCRIPTOR descriptor, boolean isXMLRoot) throws XMLMarshalException { ABSTRACT_SESSION session = context.getSession(descriptor); MarshalRecord marshalRecord = new NodeRecord(); marshalRecord.setMarshaller(this); marshal(object, marshalRecord, session, descriptor, isXMLRoot); return marshalRecord.getDocument(); }
protected void addTypeAttribute(MarshalRecord marshalRecord, String typeValue) { String xsiPrefix = null; if (marshalRecord.getNamespaceResolver() != null) { xsiPrefix = marshalRecord.getNamespaceResolver().resolveNamespaceURI(XMLConstants.SCHEMA_INSTANCE_URL); } else { xsiPrefix = XMLConstants.SCHEMA_INSTANCE_PREFIX; marshalRecord.attribute(XMLConstants.XMLNS_URL, xsiPrefix, XMLConstants.XMLNS + XMLConstants.COLON + xsiPrefix, XMLConstants.SCHEMA_INSTANCE_URL); } if (xsiPrefix == null) { xsiPrefix = marshalRecord.getNamespaceResolver().generatePrefix(XMLConstants.SCHEMA_INSTANCE_PREFIX); marshalRecord.attribute(XMLConstants.XMLNS_URL, xsiPrefix, XMLConstants.XMLNS + XMLConstants.COLON + xsiPrefix, XMLConstants.SCHEMA_INSTANCE_URL); } marshalRecord.attribute(XMLConstants.SCHEMA_INSTANCE_URL, XMLConstants.SCHEMA_TYPE_ATTRIBUTE, xsiPrefix + XMLConstants.COLON + XMLConstants.SCHEMA_TYPE_ATTRIBUTE, typeValue); }
public boolean marshalSingleValue(XPathFragment xPathFragment, MarshalRecord marshalRecord, Object object, Object value, AbstractSession session, NamespaceResolver namespaceResolver, MarshalContext marshalContext) { if(value == null) { return false; } XPathFragment groupingFragment = marshalRecord.openStartGroupingElements(namespaceResolver); if (getXMLField().getLastXPathFragment().isAttribute()) { marshalRecord.add(getXMLField(), value); marshalRecord.closeStartGroupingElements(groupingFragment); } else { marshalRecord.closeStartGroupingElements(groupingFragment); marshalRecord.add(getXMLField(), value); } return true; }
/** * Convert the value if necessary and write out the converted value. * @since EclipseLink 2.4 */ public void characters(QName schemaType, Object value, String mimeType, boolean isCDATA){ if(mimeType != null) { if(value instanceof List){ value = XMLBinaryDataHelper.getXMLBinaryDataHelper().getBytesListForBinaryValues(// (List)value, marshaller, mimeType); }else{ value = XMLBinaryDataHelper.getXMLBinaryDataHelper().getBytesForBinaryValue(// value, marshaller, mimeType).getData(); } } if(schemaType != null && Constants.QNAME_QNAME.equals(schemaType)){ String convertedValue = getStringForQName((QName)value); characters(convertedValue); }else{ String convertedValue = ((String) ((ConversionManager) session.getDatasourcePlatform().getConversionManager()).convertObject(value, CoreClassConstants.STRING, schemaType)); if(isCDATA){ cdata(convertedValue); }else{ characters(convertedValue); } } }