/** * INTERNAL * Return the class for a given qualified XML Schema type * @param qname The qualified name of the XML Schema type to use as a key in the lookup * @return The class corresponding to the specified schema type, if no corresponding match found returns null */ public Class getJavaClass(QName qname) { return getJavaClass(qname, XMLConversionManager.getDefaultXMLManager()); }
/** * INTERNAL * Return the class for a given qualified XML Schema type * @param qname The qualified name of the XML Schema type to use as a key in the lookup * @return The class corresponding to the specified schema type, if no corresponding match found returns null */ public Class getJavaClass(QName qname) { return getJavaClass(qname, XMLConversionManager.getDefaultXMLManager()); }
/** * INTERNAL: * Called from DOMRecord and XMLReader. MappingNodeValues call XMLReader which calls this method so that other XMLReader subclasses can override. */ public Object convertValueBasedOnSchemaType(Object value, XMLConversionManager xmlConversionManager, AbstractUnmarshalRecord record) { if (schemaType != null) { if(XMLConstants.QNAME_QNAME.equals(schemaType)){ return xmlConversionManager.buildQNameFromString((String)value, record); }else{ Class fieldType = getType(); if (fieldType == null) { fieldType = getJavaClass(schemaType, xmlConversionManager); } return xmlConversionManager.convertObject(value, fieldType, schemaType); } } return value; }
/** * INTERNAL: * Called from DOMRecord and XMLReader. MappingNodeValues call XMLReader which calls this method so that other XMLReader subclasses can override. */ public Object convertValueBasedOnSchemaType(Object value, XMLConversionManager xmlConversionManager, AbstractUnmarshalRecord record) { if (schemaType != null) { if(XMLConstants.QNAME_QNAME.equals(schemaType)){ return xmlConversionManager.buildQNameFromString((String)value, record); }else{ Class fieldType = getType(); if (fieldType == null) { fieldType = getJavaClass(schemaType, xmlConversionManager); } return xmlConversionManager.convertObject(value, fieldType, schemaType); } } return value; }
private Object convertValue(Element node, XMLField key, Object value) { XMLConversionManager xmlCnvMgr = (XMLConversionManager) session.getDatasourcePlatform().getConversionManager(); if (key.isTypedTextField() && (node != null)) { String schemaType = node.getAttributeNS(XMLConstants.SCHEMA_INSTANCE_URL, XMLConstants.SCHEMA_TYPE_ATTRIBUTE); if ((null != schemaType) && (schemaType.length() > 0)) { QName qname = null; int index = schemaType.indexOf(XMLConstants.COLON); if (index == -1) { qname = new QName(schemaType); Class convertClass = key.getJavaClass(qname); return xmlCnvMgr.convertObject(value, convertClass); } else { String prefix = schemaType.substring(0, index); String localPart = schemaType.substring(index + 1); XMLPlatform xmlPlatform = XMLPlatformFactory.getInstance().getXMLPlatform(); String url = xmlPlatform.resolveNamespacePrefix(node, prefix); qname = new QName(url, localPart); Class convertClass = key.getJavaClass(qname); return xmlCnvMgr.convertObject(value, convertClass, qname); } } } currentNode = node; Object convertedValue = key.convertValueBasedOnSchemaType(value, xmlCnvMgr, this); currentNode = getDOM(); return convertedValue; }
/** * INTERNAL: */ public Object convertValueBasedOnSchemaType(Object value, XMLConversionManager xmlConversionManager, XMLRecord record) { if (getSchemaType() != null) { if(XMLConstants.QNAME_QNAME.equals(getSchemaType())){ return buildQNameFromString((String)value, record); }else{ Class fieldType = getType(); if (fieldType == null) { fieldType = getJavaClass(getSchemaType()); } return xmlConversionManager.convertObject(value, fieldType, getSchemaType()); } } return value; }
/** * Handle endElement operation. Here we will create and populate an * org.eclipse.persistence.internal.oxm.Reference instance to be used during * the mapping resolution stage. In particular, the primary key value * for this element will be added to the Reference object's list of * target primary key values. Note that if a reference already exists * for the xmlObjectReferenceMapping's source object instance, we will * simply add to the target pk value list. The Reference object will * is stored on the ReferenceResolver associated with the UnmarshalRecord's * session. */ public void endElement(XPathFragment xPathFragment, UnmarshalRecord unmarshalRecord) { if (!xmlField.getLastXPathFragment().nameIsText()) { return; } Object value = unmarshalRecord.getStringBuffer().toString(); unmarshalRecord.resetStringBuffer(); XMLConversionManager xmlConversionManager = (XMLConversionManager) unmarshalRecord.getSession().getDatasourcePlatform().getConversionManager(); if (unmarshalRecord.getTypeQName() != null) { Class typeClass = xmlField.getJavaClass(unmarshalRecord.getTypeQName()); value = xmlConversionManager.convertObject(value, typeClass, unmarshalRecord.getTypeQName()); } else { value = xmlField.convertValueBasedOnSchemaType(value, xmlConversionManager, unmarshalRecord); } // build a reference which will be resolved after unmarshalling is complete xmlObjectReferenceMapping.buildReference(unmarshalRecord, xmlField, value, unmarshalRecord.getSession()); }
/** * Handle endElement operation. Here we will create and populate an * org.eclipse.persistence.internal.oxm.Reference instance to be used during * the mapping resolution stage. In particular, the primary key value * for this element will be added to the Reference object's map of * target primary key values - based on the target key field name. Note * that if a reference already exists for the xmlCollectionReferenceMapping's * source object instance, we will simply add to the target pk value list. * The Reference object is stored on the ReferenceResolver associated with * the UnmarshalRecord's session. */ public void endElement(XPathFragment xPathFragment, UnmarshalRecord unmarshalRecord) { if (!xmlField.getLastXPathFragment().nameIsText()) { return; } Object value = unmarshalRecord.getStringBuffer().toString(); unmarshalRecord.resetStringBuffer(); XMLConversionManager xmlConversionManager = (XMLConversionManager) unmarshalRecord.getSession().getDatasourcePlatform().getConversionManager(); if (unmarshalRecord.getTypeQName() != null) { Class typeClass = xmlField.getJavaClass(unmarshalRecord.getTypeQName()); value = xmlConversionManager.convertObject(value, typeClass, unmarshalRecord.getTypeQName()); } else { value = xmlField.convertValueBasedOnSchemaType(value, xmlConversionManager, unmarshalRecord); } // build a reference which will be resolved after unmarshalling is complete xmlCollectionReferenceMapping.buildReference(unmarshalRecord, xmlField, value, unmarshalRecord.getSession()); }
private void addUnmarshalValue(UnmarshalRecord unmarshalRecord, Object value, Object collection) { if (null == value) { return; } if (xmlCompositeDirectCollectionMapping.getNullPolicy().isNullRepresentedByXsiNil() && xmlCompositeDirectCollectionMapping.getNullPolicy().valueIsNull(unmarshalRecord.getAttributes())) { return; } if ((!isWhitespaceAware() && XMLConstants.EMPTY_STRING.equals(value))) { return; } XMLField xmlField = (XMLField) xmlCompositeDirectCollectionMapping.getField(); XMLConversionManager xmlConversionManager = (XMLConversionManager) unmarshalRecord.getSession().getDatasourcePlatform().getConversionManager(); if (unmarshalRecord.getTypeQName() != null) { Class typeClass = xmlField.getJavaClass(unmarshalRecord.getTypeQName()); value = xmlConversionManager.convertObject(value, typeClass, unmarshalRecord.getTypeQName()); } else { value = xmlField.convertValueBasedOnSchemaType(value, xmlConversionManager, unmarshalRecord); } if (xmlCompositeDirectCollectionMapping.hasValueConverter()) { if (xmlCompositeDirectCollectionMapping.getValueConverter() instanceof XMLConverter) { value = ((XMLConverter) xmlCompositeDirectCollectionMapping.getValueConverter()).convertDataValueToObjectValue(value, unmarshalRecord.getSession(), unmarshalRecord.getUnmarshaller()); } else { value = xmlCompositeDirectCollectionMapping.getValueConverter().convertDataValueToObjectValue(value, unmarshalRecord.getSession()); } } unmarshalRecord.addAttributeValue(this, value, collection); }
public void endElement(XPathFragment xPathFragment, UnmarshalRecord unmarshalRecord) { unmarshalRecord.removeNullCapableValue(this); XMLField xmlField = (XMLField) xmlDirectMapping.getField(); if (!xmlField.getLastXPathFragment().nameIsText()) { return; } Object value; if(unmarshalRecord.getStringBuffer().length() == 0) { value = this.getMapping().getNullValue(); } else { value = unmarshalRecord.getStringBuffer().toString(); } unmarshalRecord.resetStringBuffer(); XMLConversionManager xmlConversionManager = (XMLConversionManager) unmarshalRecord.getSession().getDatasourcePlatform().getConversionManager(); if (unmarshalRecord.getTypeQName() != null) { Class typeClass = xmlField.getJavaClass(unmarshalRecord.getTypeQName()); value = xmlConversionManager.convertObject(value, typeClass, unmarshalRecord.getTypeQName()); } else { value = xmlField.convertValueBasedOnSchemaType(value, xmlConversionManager,unmarshalRecord); } Object convertedValue = xmlDirectMapping.getAttributeValue(value, unmarshalRecord.getSession(), unmarshalRecord); unmarshalRecord.setAttributeValue(convertedValue, xmlDirectMapping); }
public void endElement(XPathFragment xPathFragment, UnmarshalRecord unmarshalRecord) { Object value = unmarshalRecord.getStringBuffer().toString(); boolean isCDATA = unmarshalRecord.isBufferCDATA(); unmarshalRecord.resetStringBuffer(); XMLField toWrite = xmlField; if(xmlField.isCDATA() != isCDATA) { toWrite = new XMLField(xmlField.getName()); toWrite.setNamespaceResolver(xmlField.getNamespaceResolver()); toWrite.setIsCDATA(isCDATA); } //xmlField.setIsCDATA(isCDATA); XMLConversionManager xmlConversionManager = (XMLConversionManager) unmarshalRecord.getSession().getDatasourcePlatform().getConversionManager(); if (unmarshalRecord.getTypeQName() != null) { Class typeClass = xmlField.getJavaClass(unmarshalRecord.getTypeQName()); value = xmlConversionManager.convertObject(value, typeClass, unmarshalRecord.getTypeQName()); } else { value = xmlField.convertValueBasedOnSchemaType(value, xmlConversionManager, unmarshalRecord); } // PUT VALUE INTO A RECORD KEYED ON XMLFIELD if (null == unmarshalRecord.getTransformationRecord()) { unmarshalRecord.setTransformationRecord(new XMLTransformationRecord("ROOT", unmarshalRecord)); } unmarshalRecord.getTransformationRecord().put(toWrite, value); } }