Search in sources :

Example 6 with Field

use of org.eclipse.persistence.internal.oxm.mappings.Field in project eclipselink by eclipse-ee4j.

the class MappingsGenerator method generateChoiceMapping.

public ChoiceObjectMapping generateChoiceMapping(Property property, Descriptor descriptor, NamespaceInfo namespace) {
    XMLChoiceObjectMapping mapping = new XMLChoiceObjectMapping();
    initializeXMLMapping(mapping, property);
    boolean isIdRef = property.isXmlIdRef();
    Iterator<Property> choiceProperties = property.getChoiceProperties().iterator();
    while (choiceProperties.hasNext()) {
        Property next = choiceProperties.next();
        JavaClass type = next.getType();
        JavaClass originalType = next.getType();
        Converter converter = null;
        TypeInfo info = typeInfo.get(type.getName());
        if (info != null) {
            XmlJavaTypeAdapter adapter = info.getXmlJavaTypeAdapter();
            if (adapter != null) {
                String adapterValue = adapter.getValue();
                JavaClass adapterClass = helper.getJavaClass(adapterValue);
                JavaClass theClass = CompilerHelper.getTypeFromAdapterClass(adapterClass, helper);
                type = theClass;
                converter = new XMLJavaTypeConverter(adapterClass.getQualifiedName());
            }
        }
        if (next.getXmlJoinNodes() != null) {
            // handle XmlJoinNodes
            List<XMLField> srcFlds = new ArrayList<>();
            List<XMLField> tgtFlds = new ArrayList<>();
            for (XmlJoinNode xmlJoinNode : next.getXmlJoinNodes().getXmlJoinNode()) {
                srcFlds.add(new XMLField(xmlJoinNode.getXmlPath()));
                tgtFlds.add(new XMLField(xmlJoinNode.getReferencedXmlPath()));
            }
            mapping.addChoiceElement(srcFlds, type.getQualifiedName(), tgtFlds);
        } else if (isIdRef) {
            // handle IDREF
            String tgtXPath = null;
            TypeInfo referenceType = typeInfo.get(type.getQualifiedName());
            if (null != referenceType && referenceType.isIDSet()) {
                Property prop = referenceType.getIDProperty();
                tgtXPath = getXPathForField(prop, namespace, !prop.isAttribute(), false).getXPath();
            }
            // if the XPath is set (via xml-path) use it, otherwise figure it out
            Field srcXPath;
            if (next.getXmlPath() != null) {
                srcXPath = new XMLField(next.getXmlPath());
            } else {
                srcXPath = getXPathForField(next, namespace, true, false);
            }
            mapping.addChoiceElement(srcXPath.getXPath(), type.getQualifiedName(), tgtXPath);
        } else {
            XMLField xpath;
            if (next.getXmlPath() != null) {
                xpath = new XMLField(next.getXmlPath());
            } else {
                xpath = (XMLField) getXPathForField(next, namespace, (!(this.typeInfo.containsKey(type.getQualifiedName()))) || next.isMtomAttachment() || type.isEnum(), false);
            }
            mapping.addChoiceElement(xpath, type.getQualifiedName());
            if (!originalType.getQualifiedName().equals(type.getQualifiedName())) {
                mapping.getClassNameToFieldMappings().putIfAbsent(originalType.getQualifiedName(), xpath);
                mapping.addConverter(xpath, converter);
            }
            XMLMapping nestedMapping = mapping.getChoiceElementMappings().get(xpath);
            if (nestedMapping instanceof BinaryDataMapping) {
                ((BinaryDataMapping) nestedMapping).getNullPolicy().setNullRepresentedByEmptyNode(false);
            }
            if (type.isEnum()) {
                if (nestedMapping.isAbstractDirectMapping()) {
                    ((DirectMapping) nestedMapping).setConverter(buildJAXBEnumTypeConverter(nestedMapping, (EnumTypeInfo) info));
                }
            }
        }
    }
    return mapping;
}
Also used : XMLField(org.eclipse.persistence.oxm.XMLField) XMLChoiceObjectMapping(org.eclipse.persistence.oxm.mappings.XMLChoiceObjectMapping) XMLMapping(org.eclipse.persistence.oxm.mappings.XMLMapping) XmlJavaTypeAdapter(org.eclipse.persistence.jaxb.xmlmodel.XmlJavaTypeAdapter) ArrayList(java.util.ArrayList) XmlJoinNode(org.eclipse.persistence.jaxb.xmlmodel.XmlJoinNodes.XmlJoinNode) XMLBinaryDataMapping(org.eclipse.persistence.oxm.mappings.XMLBinaryDataMapping) BinaryDataMapping(org.eclipse.persistence.internal.oxm.mappings.BinaryDataMapping) XMLField(org.eclipse.persistence.oxm.XMLField) DatabaseField(org.eclipse.persistence.internal.helper.DatabaseField) Field(org.eclipse.persistence.internal.oxm.mappings.Field) JavaField(org.eclipse.persistence.jaxb.javamodel.JavaField) JavaClass(org.eclipse.persistence.jaxb.javamodel.JavaClass) CoreConverter(org.eclipse.persistence.core.mappings.converters.CoreConverter) JAXBEnumTypeConverter(org.eclipse.persistence.jaxb.JAXBEnumTypeConverter) JAXBElementConverter(org.eclipse.persistence.internal.jaxb.JAXBElementConverter) XMLListConverter(org.eclipse.persistence.oxm.mappings.converters.XMLListConverter) XMLConverter(org.eclipse.persistence.oxm.mappings.converters.XMLConverter) Converter(org.eclipse.persistence.mappings.converters.Converter) DefaultElementConverter(org.eclipse.persistence.internal.jaxb.DefaultElementConverter) DomHandlerConverter(org.eclipse.persistence.internal.jaxb.DomHandlerConverter) JAXBElementRootConverter(org.eclipse.persistence.internal.jaxb.JAXBElementRootConverter) XMLJavaTypeConverter(org.eclipse.persistence.internal.jaxb.XMLJavaTypeConverter) XMLJavaTypeConverter(org.eclipse.persistence.internal.jaxb.XMLJavaTypeConverter)

Example 7 with Field

use of org.eclipse.persistence.internal.oxm.mappings.Field in project eclipselink by eclipse-ee4j.

the class MappingsGenerator method generateMappingForType.

private Mapping generateMappingForType(JavaClass theType, String attributeName) {
    Mapping mapping;
    boolean typeIsObject = theType.getRawName().equals(OBJECT_CLASS_NAME);
    TypeInfo info = typeInfo.get(theType.getQualifiedName());
    if ((info != null && !(info.isEnumerationType())) || typeIsObject) {
        mapping = new XMLCompositeObjectMapping();
        mapping.setAttributeName(attributeName);
        ((CompositeObjectMapping) mapping).setXPath(attributeName);
        if (typeIsObject) {
            ((CompositeObjectMapping) mapping).setKeepAsElementPolicy(UnmarshalKeepAsElementPolicy.KEEP_UNKNOWN_AS_ELEMENT);
            setTypedTextField((Field) mapping.getField());
        } else {
            ((CompositeObjectMapping) mapping).setReferenceClassName(theType.getQualifiedName());
        }
    } else if (theType.isArray() || helper.isCollectionType(theType)) {
        DirectCollectionMapping directCollectionMapping;
        mapping = directCollectionMapping = new XMLCompositeDirectCollectionMapping();
        initializeXMLContainerMapping(directCollectionMapping, theType.isArray());
        directCollectionMapping.setAttributeName(attributeName);
        if (theType.isArray()) {
            JAXBArrayAttributeAccessor accessor = new JAXBArrayAttributeAccessor(directCollectionMapping.getAttributeAccessor(), directCollectionMapping.getContainerPolicy(), helper.getClassLoader());
            String componentClassName = theType.getComponentType().getQualifiedName();
            if (theType.getComponentType().isPrimitive()) {
                Class<Object> primitiveClass = XMLConversionManager.getDefaultManager().convertClassNameToClass(componentClassName);
                accessor.setComponentClass(primitiveClass);
                directCollectionMapping.setAttributeAccessor(accessor);
                Class<Object> declaredClass = XMLConversionManager.getObjectClass(primitiveClass);
                directCollectionMapping.setAttributeElementClass(declaredClass);
            } else {
                accessor.setComponentClassName(componentClassName);
                directCollectionMapping.setAttributeAccessor(accessor);
                JavaClass componentType = theType.getComponentType();
                Class<?> declaredClass = PrivilegedAccessHelper.callDoPrivilegedWithException(() -> PrivilegedAccessHelper.getClassForName(componentType.getRawName(), false, helper.getClassLoader()), (ex) -> JAXBException.classNotFoundException(componentType.getRawName()));
                directCollectionMapping.setAttributeElementClass(declaredClass);
            }
        } else if (helper.isCollectionType(theType)) {
            Collection args = theType.getActualTypeArguments();
            if (args.size() > 0) {
                JavaClass itemType = (JavaClass) args.iterator().next();
                Class<?> declaredClass = PrivilegedAccessHelper.callDoPrivilegedWithException(() -> PrivilegedAccessHelper.getClassForName(itemType.getRawName(), false, helper.getClassLoader()), (ex) -> JAXBException.classNotFoundException(itemType.getRawName()));
                if (declaredClass != String.class) {
                    directCollectionMapping.setAttributeElementClass(declaredClass);
                }
            }
        }
        theType = containerClassImpl(theType);
        directCollectionMapping.useCollectionClassName(theType.getRawName());
        directCollectionMapping.setXPath(attributeName + TXT);
    } else {
        mapping = new XMLDirectMapping();
        mapping.setAttributeName(attributeName);
        ((DirectMapping) mapping).setNullValueMarshalled(true);
        ((DirectMapping) mapping).setXPath(attributeName + TXT);
        QName schemaType = userDefinedSchemaTypes.get(theType.getQualifiedName());
        if (schemaType == null) {
            schemaType = helper.getXMLToJavaTypeMap().get(theType.getName());
        }
        ((Field) mapping.getField()).setSchemaType(schemaType);
        if (info != null && info.isEnumerationType()) {
            ((DirectMapping) mapping).setConverter(buildJAXBEnumTypeConverter(mapping, (EnumTypeInfo) info));
        }
    }
    return mapping;
}
Also used : IsSetNullPolicy(org.eclipse.persistence.oxm.mappings.nullpolicy.IsSetNullPolicy) XMLVariableXPathObjectMapping(org.eclipse.persistence.oxm.mappings.XMLVariableXPathObjectMapping) MethodVisitor(org.eclipse.persistence.internal.libraries.asm.MethodVisitor) CoreConverter(org.eclipse.persistence.core.mappings.converters.CoreConverter) AnyObjectMapping(org.eclipse.persistence.internal.oxm.mappings.AnyObjectMapping) JAXBEnumTypeConverter(org.eclipse.persistence.jaxb.JAXBEnumTypeConverter) XMLChoiceCollectionMapping(org.eclipse.persistence.oxm.mappings.XMLChoiceCollectionMapping) NormalizedStringAdapter(jakarta.xml.bind.annotation.adapters.NormalizedStringAdapter) Type(org.eclipse.persistence.internal.libraries.asm.Type) XmlJavaTypeAdapter(org.eclipse.persistence.jaxb.xmlmodel.XmlJavaTypeAdapter) XMLCompositeObjectMapping(org.eclipse.persistence.oxm.mappings.XMLCompositeObjectMapping) Map(java.util.Map) Constants(org.eclipse.persistence.internal.oxm.Constants) VariableXPathCollectionMapping(org.eclipse.persistence.internal.oxm.mappings.VariableXPathCollectionMapping) DirectCollectionMapping(org.eclipse.persistence.internal.oxm.mappings.DirectCollectionMapping) XmlTransformation(org.eclipse.persistence.jaxb.xmlmodel.XmlTransformation) ChoiceCollectionMapping(org.eclipse.persistence.internal.oxm.mappings.ChoiceCollectionMapping) UnmarshalRecord(org.eclipse.persistence.internal.oxm.record.UnmarshalRecord) JavaClass(org.eclipse.persistence.jaxb.javamodel.JavaClass) Project(org.eclipse.persistence.sessions.Project) ChoiceObjectMapping(org.eclipse.persistence.internal.oxm.mappings.ChoiceObjectMapping) AbstractSessionLog(org.eclipse.persistence.logging.AbstractSessionLog) Set(java.util.Set) XmlJoinNode(org.eclipse.persistence.jaxb.xmlmodel.XmlJoinNodes.XmlJoinNode) UnmarshalKeepAsElementPolicy(org.eclipse.persistence.oxm.mappings.UnmarshalKeepAsElementPolicy) XMLVariableXPathCollectionMapping(org.eclipse.persistence.oxm.mappings.XMLVariableXPathCollectionMapping) XMLNullRepresentationType(org.eclipse.persistence.oxm.mappings.nullpolicy.XMLNullRepresentationType) JAXBException(org.eclipse.persistence.exceptions.JAXBException) XMLAnyObjectMapping(org.eclipse.persistence.oxm.mappings.XMLAnyObjectMapping) QName(javax.xml.namespace.QName) VirtualAttributeAccessor(org.eclipse.persistence.internal.descriptors.VirtualAttributeAccessor) JAXBElementConverter(org.eclipse.persistence.internal.jaxb.JAXBElementConverter) XmlIsSetNullPolicy(org.eclipse.persistence.jaxb.xmlmodel.XmlIsSetNullPolicy) AccessorFactoryWrapper(org.eclipse.persistence.internal.jaxb.AccessorFactoryWrapper) Opcodes(org.eclipse.persistence.internal.libraries.asm.Opcodes) XMLConstants(org.eclipse.persistence.oxm.XMLConstants) XMLDirectMapping(org.eclipse.persistence.oxm.mappings.XMLDirectMapping) Source(javax.xml.transform.Source) FixedMimeTypePolicy(org.eclipse.persistence.oxm.mappings.FixedMimeTypePolicy) TreeSet(java.util.TreeSet) XMLTransformationRecord(org.eclipse.persistence.internal.oxm.record.XMLTransformationRecord) ArrayList(java.util.ArrayList) Introspector(java.beans.Introspector) XmlAttribute(jakarta.xml.bind.annotation.XmlAttribute) XMLChoiceObjectMapping(org.eclipse.persistence.oxm.mappings.XMLChoiceObjectMapping) XMLMapping(org.eclipse.persistence.oxm.mappings.XMLMapping) XMLListConverter(org.eclipse.persistence.oxm.mappings.converters.XMLListConverter) StringTokenizer(java.util.StringTokenizer) CollapsedStringAdapter(jakarta.xml.bind.annotation.adapters.CollapsedStringAdapter) CoreClassConstants(org.eclipse.persistence.internal.core.helper.CoreClassConstants) CustomAccessorAttributeAccessor(org.eclipse.persistence.internal.jaxb.CustomAccessorAttributeAccessor) CompositeCollectionMapping(org.eclipse.persistence.internal.oxm.mappings.CompositeCollectionMapping) AttributeGroup(org.eclipse.persistence.queries.AttributeGroup) CoreProject(org.eclipse.persistence.core.sessions.CoreProject) XmlElementWrapper(org.eclipse.persistence.jaxb.xmlmodel.XmlElementWrapper) EclipseLinkASMClassWriter(org.eclipse.persistence.internal.libraries.asm.EclipseLinkASMClassWriter) XMLBinaryDataMapping(org.eclipse.persistence.oxm.mappings.XMLBinaryDataMapping) XmlMixed(jakarta.xml.bind.annotation.XmlMixed) VariableXPathObjectMapping(org.eclipse.persistence.internal.oxm.mappings.VariableXPathObjectMapping) DirectMapping(org.eclipse.persistence.internal.oxm.mappings.DirectMapping) XmlNamedSubgraph(org.eclipse.persistence.jaxb.xmlmodel.XmlNamedSubgraph) XMLConverter(org.eclipse.persistence.oxm.mappings.converters.XMLConverter) Session(org.eclipse.persistence.sessions.Session) XMLField(org.eclipse.persistence.oxm.XMLField) JAXBSetMethodAttributeAccessor(org.eclipse.persistence.internal.jaxb.JAXBSetMethodAttributeAccessor) XMLSchemaClassPathReference(org.eclipse.persistence.oxm.schema.XMLSchemaClassPathReference) DatabaseField(org.eclipse.persistence.internal.helper.DatabaseField) ClassDescriptor(org.eclipse.persistence.descriptors.ClassDescriptor) CollectionReferenceMapping(org.eclipse.persistence.internal.oxm.mappings.CollectionReferenceMapping) DescriptorCustomizer(org.eclipse.persistence.config.DescriptorCustomizer) CompositeObjectMapping(org.eclipse.persistence.internal.oxm.mappings.CompositeObjectMapping) TransformationMapping(org.eclipse.persistence.internal.oxm.mappings.TransformationMapping) SortedSet(java.util.SortedSet) ObjectReferenceMapping(org.eclipse.persistence.internal.oxm.mappings.ObjectReferenceMapping) AttributeAccessor(org.eclipse.persistence.mappings.AttributeAccessor) Converter(org.eclipse.persistence.mappings.converters.Converter) Field(org.eclipse.persistence.internal.oxm.mappings.Field) XmlReadTransformer(org.eclipse.persistence.jaxb.xmlmodel.XmlTransformation.XmlReadTransformer) JAXBArrayAttributeAccessor(org.eclipse.persistence.internal.jaxb.many.JAXBArrayAttributeAccessor) JavaField(org.eclipse.persistence.jaxb.javamodel.JavaField) XMLAnyAttributeMapping(org.eclipse.persistence.oxm.mappings.XMLAnyAttributeMapping) XMLInverseReferenceMapping(org.eclipse.persistence.oxm.mappings.XMLInverseReferenceMapping) InverseReferenceMapping(org.eclipse.persistence.internal.oxm.mappings.InverseReferenceMapping) SessionLog(org.eclipse.persistence.logging.SessionLog) DescriptorException(org.eclipse.persistence.exceptions.DescriptorException) XMLUnmarshaller(org.eclipse.persistence.oxm.XMLUnmarshaller) XMLTransformationMapping(org.eclipse.persistence.oxm.mappings.XMLTransformationMapping) CoreMapping(org.eclipse.persistence.core.mappings.CoreMapping) MapValueAttributeAccessor(org.eclipse.persistence.internal.jaxb.many.MapValueAttributeAccessor) NullPolicy(org.eclipse.persistence.oxm.mappings.nullpolicy.NullPolicy) XmlNamedObjectGraph(org.eclipse.persistence.jaxb.xmlmodel.XmlNamedObjectGraph) AnyCollectionMapping(org.eclipse.persistence.internal.oxm.mappings.AnyCollectionMapping) TypeMappingInfo(org.eclipse.persistence.jaxb.TypeMappingInfo) XMLBinaryDataCollectionMapping(org.eclipse.persistence.oxm.mappings.XMLBinaryDataCollectionMapping) MethodAttributeAccessor(org.eclipse.persistence.internal.descriptors.MethodAttributeAccessor) DatabaseMapping(org.eclipse.persistence.mappings.DatabaseMapping) XMLCompositeCollectionMapping(org.eclipse.persistence.oxm.mappings.XMLCompositeCollectionMapping) ContainerPolicy(org.eclipse.persistence.internal.queries.ContainerPolicy) Image(java.awt.Image) XmlValue(jakarta.xml.bind.annotation.XmlValue) Collection(java.util.Collection) XmlNullPolicy(org.eclipse.persistence.jaxb.xmlmodel.XmlNullPolicy) NamespaceResolver(org.eclipse.persistence.internal.oxm.NamespaceResolver) NavigableSet(java.util.NavigableSet) CoreAttributeGroup(org.eclipse.persistence.core.queries.CoreAttributeGroup) DynamicClassLoader(org.eclipse.persistence.dynamic.DynamicClassLoader) XmlAbstractNullPolicy(org.eclipse.persistence.jaxb.xmlmodel.XmlAbstractNullPolicy) InstanceVariableAttributeAccessor(org.eclipse.persistence.internal.descriptors.InstanceVariableAttributeAccessor) JAXBLocalization(org.eclipse.persistence.internal.localization.JAXBLocalization) XMLAnyCollectionMapping(org.eclipse.persistence.oxm.mappings.XMLAnyCollectionMapping) XMLSchemaReference(org.eclipse.persistence.oxm.schema.XMLSchemaReference) MapValue(org.eclipse.persistence.internal.jaxb.many.MapValue) WrappedValue(org.eclipse.persistence.internal.jaxb.WrappedValue) List(java.util.List) JavaMethod(org.eclipse.persistence.jaxb.javamodel.JavaMethod) XMLCompositeDirectCollectionMapping(org.eclipse.persistence.oxm.mappings.XMLCompositeDirectCollectionMapping) DefaultElementConverter(org.eclipse.persistence.internal.jaxb.DefaultElementConverter) Entry(java.util.Map.Entry) DomHandlerConverter(org.eclipse.persistence.internal.jaxb.DomHandlerConverter) Queue(java.util.Queue) XmlTransient(jakarta.xml.bind.annotation.XmlTransient) Mapping(org.eclipse.persistence.internal.oxm.mappings.Mapping) PrivilegedAccessHelper(org.eclipse.persistence.internal.security.PrivilegedAccessHelper) XMLConversionManager(org.eclipse.persistence.internal.oxm.XMLConversionManager) XMLObjectReferenceMapping(org.eclipse.persistence.oxm.mappings.XMLObjectReferenceMapping) XmlNamedAttributeNode(org.eclipse.persistence.jaxb.xmlmodel.XmlNamedAttributeNode) AnyAttributeMapping(org.eclipse.persistence.internal.oxm.mappings.AnyAttributeMapping) HashMap(java.util.HashMap) Deque(java.util.Deque) InstantiationPolicy(org.eclipse.persistence.internal.descriptors.InstantiationPolicy) AbstractSession(org.eclipse.persistence.internal.sessions.AbstractSession) HashSet(java.util.HashSet) Descriptor(org.eclipse.persistence.internal.oxm.mappings.Descriptor) XMLMarshaller(org.eclipse.persistence.oxm.XMLMarshaller) BinaryDataMapping(org.eclipse.persistence.internal.oxm.mappings.BinaryDataMapping) LinkedList(java.util.LinkedList) Helper(org.eclipse.persistence.jaxb.javamodel.Helper) XMLRecord(org.eclipse.persistence.oxm.record.XMLRecord) JAXBElementRootConverter(org.eclipse.persistence.internal.jaxb.JAXBElementRootConverter) Iterator(java.util.Iterator) MultiArgInstantiationPolicy(org.eclipse.persistence.internal.jaxb.MultiArgInstantiationPolicy) XMLJavaTypeConverter(org.eclipse.persistence.internal.jaxb.XMLJavaTypeConverter) AbstractNullPolicy(org.eclipse.persistence.oxm.mappings.nullpolicy.AbstractNullPolicy) XMLDescriptor(org.eclipse.persistence.oxm.XMLDescriptor) CoreDescriptor(org.eclipse.persistence.core.descriptors.CoreDescriptor) XMLContainerMapping(org.eclipse.persistence.internal.oxm.mappings.XMLContainerMapping) MimeTypePolicy(org.eclipse.persistence.oxm.mappings.MimeTypePolicy) BinaryDataCollectionMapping(org.eclipse.persistence.internal.oxm.mappings.BinaryDataCollectionMapping) ManyValue(org.eclipse.persistence.internal.jaxb.many.ManyValue) XmlWriteTransformer(org.eclipse.persistence.jaxb.xmlmodel.XmlTransformation.XmlWriteTransformer) JAXBElement(jakarta.xml.bind.JAXBElement) JaxbClassLoader(org.eclipse.persistence.internal.jaxb.JaxbClassLoader) XMLCollectionReferenceMapping(org.eclipse.persistence.oxm.mappings.XMLCollectionReferenceMapping) JAXBArrayAttributeAccessor(org.eclipse.persistence.internal.jaxb.many.JAXBArrayAttributeAccessor) QName(javax.xml.namespace.QName) XMLVariableXPathObjectMapping(org.eclipse.persistence.oxm.mappings.XMLVariableXPathObjectMapping) AnyObjectMapping(org.eclipse.persistence.internal.oxm.mappings.AnyObjectMapping) XMLChoiceCollectionMapping(org.eclipse.persistence.oxm.mappings.XMLChoiceCollectionMapping) XMLCompositeObjectMapping(org.eclipse.persistence.oxm.mappings.XMLCompositeObjectMapping) VariableXPathCollectionMapping(org.eclipse.persistence.internal.oxm.mappings.VariableXPathCollectionMapping) DirectCollectionMapping(org.eclipse.persistence.internal.oxm.mappings.DirectCollectionMapping) ChoiceCollectionMapping(org.eclipse.persistence.internal.oxm.mappings.ChoiceCollectionMapping) ChoiceObjectMapping(org.eclipse.persistence.internal.oxm.mappings.ChoiceObjectMapping) XMLVariableXPathCollectionMapping(org.eclipse.persistence.oxm.mappings.XMLVariableXPathCollectionMapping) XMLAnyObjectMapping(org.eclipse.persistence.oxm.mappings.XMLAnyObjectMapping) XMLDirectMapping(org.eclipse.persistence.oxm.mappings.XMLDirectMapping) XMLChoiceObjectMapping(org.eclipse.persistence.oxm.mappings.XMLChoiceObjectMapping) XMLMapping(org.eclipse.persistence.oxm.mappings.XMLMapping) CompositeCollectionMapping(org.eclipse.persistence.internal.oxm.mappings.CompositeCollectionMapping) XMLBinaryDataMapping(org.eclipse.persistence.oxm.mappings.XMLBinaryDataMapping) VariableXPathObjectMapping(org.eclipse.persistence.internal.oxm.mappings.VariableXPathObjectMapping) DirectMapping(org.eclipse.persistence.internal.oxm.mappings.DirectMapping) CollectionReferenceMapping(org.eclipse.persistence.internal.oxm.mappings.CollectionReferenceMapping) CompositeObjectMapping(org.eclipse.persistence.internal.oxm.mappings.CompositeObjectMapping) TransformationMapping(org.eclipse.persistence.internal.oxm.mappings.TransformationMapping) ObjectReferenceMapping(org.eclipse.persistence.internal.oxm.mappings.ObjectReferenceMapping) XMLAnyAttributeMapping(org.eclipse.persistence.oxm.mappings.XMLAnyAttributeMapping) XMLInverseReferenceMapping(org.eclipse.persistence.oxm.mappings.XMLInverseReferenceMapping) InverseReferenceMapping(org.eclipse.persistence.internal.oxm.mappings.InverseReferenceMapping) XMLTransformationMapping(org.eclipse.persistence.oxm.mappings.XMLTransformationMapping) CoreMapping(org.eclipse.persistence.core.mappings.CoreMapping) AnyCollectionMapping(org.eclipse.persistence.internal.oxm.mappings.AnyCollectionMapping) XMLBinaryDataCollectionMapping(org.eclipse.persistence.oxm.mappings.XMLBinaryDataCollectionMapping) DatabaseMapping(org.eclipse.persistence.mappings.DatabaseMapping) XMLCompositeCollectionMapping(org.eclipse.persistence.oxm.mappings.XMLCompositeCollectionMapping) XMLAnyCollectionMapping(org.eclipse.persistence.oxm.mappings.XMLAnyCollectionMapping) XMLCompositeDirectCollectionMapping(org.eclipse.persistence.oxm.mappings.XMLCompositeDirectCollectionMapping) Mapping(org.eclipse.persistence.internal.oxm.mappings.Mapping) XMLObjectReferenceMapping(org.eclipse.persistence.oxm.mappings.XMLObjectReferenceMapping) AnyAttributeMapping(org.eclipse.persistence.internal.oxm.mappings.AnyAttributeMapping) BinaryDataMapping(org.eclipse.persistence.internal.oxm.mappings.BinaryDataMapping) XMLContainerMapping(org.eclipse.persistence.internal.oxm.mappings.XMLContainerMapping) BinaryDataCollectionMapping(org.eclipse.persistence.internal.oxm.mappings.BinaryDataCollectionMapping) XMLCollectionReferenceMapping(org.eclipse.persistence.oxm.mappings.XMLCollectionReferenceMapping) XMLCompositeDirectCollectionMapping(org.eclipse.persistence.oxm.mappings.XMLCompositeDirectCollectionMapping) DirectCollectionMapping(org.eclipse.persistence.internal.oxm.mappings.DirectCollectionMapping) XMLCompositeDirectCollectionMapping(org.eclipse.persistence.oxm.mappings.XMLCompositeDirectCollectionMapping) JavaClass(org.eclipse.persistence.jaxb.javamodel.JavaClass) XMLDirectMapping(org.eclipse.persistence.oxm.mappings.XMLDirectMapping) Collection(java.util.Collection) JavaClass(org.eclipse.persistence.jaxb.javamodel.JavaClass) XMLCompositeObjectMapping(org.eclipse.persistence.oxm.mappings.XMLCompositeObjectMapping) CompositeObjectMapping(org.eclipse.persistence.internal.oxm.mappings.CompositeObjectMapping) XMLCompositeObjectMapping(org.eclipse.persistence.oxm.mappings.XMLCompositeObjectMapping)

Example 8 with Field

use of org.eclipse.persistence.internal.oxm.mappings.Field in project eclipselink by eclipse-ee4j.

the class MappingsGenerator method getXPathForField.

public Field getXPathForField(Property property, NamespaceInfo namespaceInfo, boolean isTextMapping, boolean isAny) {
    Field xmlField = null;
    String xPath = property.getXmlPath();
    if (null != xPath) {
        String newXPath = prefixCustomXPath(xPath, property, namespaceInfo);
        xmlField = new XMLField(newXPath);
    } else {
        StringBuilder xPathBuilder = new StringBuilder();
        if (property.isSetXmlElementWrapper()) {
            XmlElementWrapper wrapper = property.getXmlElementWrapper();
            String namespace = wrapper.getNamespace();
            if (namespace.equals(XMLProcessor.DEFAULT)) {
                if (namespaceInfo.isElementFormQualified()) {
                    namespace = namespaceInfo.getNamespace();
                } else {
                    namespace = "";
                }
            }
            if (namespace.equals("")) {
                xPathBuilder.append(wrapper.getName()).append("/");
            } else {
                String prefix = getPrefixForNamespace(namespace, getNamespaceResolverForDescriptor(namespaceInfo));
                xPathBuilder.append(getQualifiedString(prefix, wrapper.getName() + "/"));
            }
            if (isAny || property.isMap()) {
                xmlField = new XMLField(xPathBuilder.toString());
                return xmlField;
            }
        }
        if (property.isAttribute()) {
            if (property.isSetXmlPath()) {
                xPathBuilder.append(property.getXmlPath());
            } else {
                QName name = property.getSchemaName();
                String namespace = name.getNamespaceURI();
                if (namespace.equals("")) {
                    xPathBuilder.append(ATT).append(name.getLocalPart());
                } else {
                    String prefix = getPrefixForNamespace(namespace, getNamespaceResolverForDescriptor(namespaceInfo));
                    xPathBuilder.append(ATT).append(getQualifiedString(prefix, name.getLocalPart()));
                }
            }
            xmlField = new XMLField(xPathBuilder.toString());
        } else if (property.isXmlValue()) {
            if (isBinaryData(property.getActualType())) {
                xmlField = new XMLField(".");
            } else {
                xmlField = new XMLField("text()");
            }
        } else {
            QName elementName = property.getSchemaName();
            xmlField = getXPathForElement(xPathBuilder.toString(), elementName, namespaceInfo, isTextMapping);
        }
    }
    QName schemaType = userDefinedSchemaTypes.get(property.getActualType().getQualifiedName());
    if (property.getSchemaType() != null) {
        schemaType = property.getSchemaType();
    }
    if (schemaType == null) {
        String propertyActualTypeRawName = property.getActualType().getRawName();
        if (QName.class.getCanonicalName().equals(propertyActualTypeRawName)) {
            schemaType = helper.getXMLToJavaTypeMap().get(propertyActualTypeRawName);
        }
    }
    if (schemaType != null && !schemaType.equals(Constants.NORMALIZEDSTRING_QNAME)) {
        xmlField.setSchemaType(schemaType);
    }
    return xmlField;
}
Also used : XMLField(org.eclipse.persistence.oxm.XMLField) XMLField(org.eclipse.persistence.oxm.XMLField) DatabaseField(org.eclipse.persistence.internal.helper.DatabaseField) Field(org.eclipse.persistence.internal.oxm.mappings.Field) JavaField(org.eclipse.persistence.jaxb.javamodel.JavaField) QName(javax.xml.namespace.QName) XmlElementWrapper(org.eclipse.persistence.jaxb.xmlmodel.XmlElementWrapper)

Example 9 with Field

use of org.eclipse.persistence.internal.oxm.mappings.Field in project eclipselink by eclipse-ee4j.

the class MappingsGenerator method setupInheritance.

/**
 * Setup inheritance for abstract superclass.
 *
 * NOTE: We currently only handle one level of inheritance in this case.
 * For multiple levels the code will need to be modified. The logic in
 * generateMappings() that determines when to copy down inherited
 * methods from the parent class will need to be changed as well.
 */
private void setupInheritance(JavaClass jClass) {
    TypeInfo tInfo = typeInfo.get(jClass.getName());
    Descriptor descriptor = tInfo.getDescriptor();
    if (descriptor == null) {
        return;
    }
    JavaClass superClass = CompilerHelper.getNextMappedSuperClass(jClass, typeInfo, helper);
    if (superClass == null) {
        return;
    }
    TypeInfo superTypeInfo = typeInfo.get(superClass.getName());
    if (superTypeInfo == null) {
        return;
    }
    Descriptor superDescriptor = superTypeInfo.getDescriptor();
    if (superDescriptor != null) {
        XMLSchemaReference sRef = descriptor.getSchemaReference();
        if (sRef == null || sRef.getSchemaContext() == null) {
            return;
        }
        JavaClass rootMappedSuperClass = getRootMappedSuperClass(superClass);
        TypeInfo rootTypeInfo = typeInfo.get(rootMappedSuperClass.getName());
        Descriptor rootDescriptor = rootTypeInfo.getDescriptor();
        if (rootDescriptor.getNamespaceResolver() == null) {
            rootDescriptor.setNamespaceResolver(new org.eclipse.persistence.oxm.NamespaceResolver());
        }
        if (rootDescriptor.getInheritancePolicy().getClassIndicatorField() == null) {
            Field classIndicatorField;
            if (rootTypeInfo.isSetXmlDiscriminatorNode()) {
                classIndicatorField = new XMLField(rootTypeInfo.getXmlDiscriminatorNode());
            } else {
                classIndicatorField = XMLConstants.DEFAULT_XML_TYPE_ATTRIBUTE;
                classIndicatorField.getXPathFragment().setNamespaceURI(javax.xml.XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI);
            }
            rootDescriptor.getInheritancePolicy().setClassIndicatorField(classIndicatorField);
        }
        Object sCtx = null;
        // TypeInfo tInfo = typeInfo.get(jClass.getName());
        if (tInfo.isSetXmlDiscriminatorValue()) {
            sCtx = tInfo.getXmlDiscriminatorValue();
        } else if (!tInfo.isAnonymousComplexType()) {
            sCtx = sRef.getSchemaContextAsQName();
        }
        if (sCtx != null) {
            descriptor.getInheritancePolicy().setParentClassName(superClass.getName());
            rootDescriptor.getInheritancePolicy().addClassNameIndicator(jClass.getName(), sCtx);
        }
        Object value = rootDescriptor.getInheritancePolicy().getClassNameIndicatorMapping().get(rootDescriptor.getJavaClassName());
        if (value == null) {
            if (rootTypeInfo.isSetXmlDiscriminatorValue()) {
                rootDescriptor.getInheritancePolicy().addClassNameIndicator(rootDescriptor.getJavaClassName(), rootTypeInfo.getXmlDiscriminatorValue());
            } else {
                XMLSchemaReference rootSRef = rootDescriptor.getSchemaReference();
                if (rootSRef != null && rootSRef.getSchemaContext() != null) {
                    QName rootSCtx = rootSRef.getSchemaContextAsQName();
                    rootDescriptor.getInheritancePolicy().addClassNameIndicator(rootDescriptor.getJavaClassName(), rootSCtx);
                }
            }
        }
        rootDescriptor.getInheritancePolicy().setShouldReadSubclasses(true);
        // Check for attributeGroups
        Map<String, AttributeGroup> childGroups = ((XMLDescriptor) descriptor).getAttributeGroups();
        Map<String, AttributeGroup> parentGroups = ((XMLDescriptor) rootDescriptor).getAttributeGroups();
        if (childGroups != null && !(childGroups.isEmpty()) && parentGroups != null && !(parentGroups.isEmpty())) {
            for (String nextKey : childGroups.keySet()) {
                AttributeGroup parentGroup = parentGroups.get(nextKey);
                if (parentGroup != null) {
                    AttributeGroup childGroup = childGroups.get(nextKey);
                    parentGroup.getSubClassGroups().put(descriptor.getJavaClassName(), childGroup);
                }
            }
        }
    }
}
Also used : XMLField(org.eclipse.persistence.oxm.XMLField) QName(javax.xml.namespace.QName) AttributeGroup(org.eclipse.persistence.queries.AttributeGroup) CoreAttributeGroup(org.eclipse.persistence.core.queries.CoreAttributeGroup) XMLField(org.eclipse.persistence.oxm.XMLField) DatabaseField(org.eclipse.persistence.internal.helper.DatabaseField) Field(org.eclipse.persistence.internal.oxm.mappings.Field) JavaField(org.eclipse.persistence.jaxb.javamodel.JavaField) XMLDescriptor(org.eclipse.persistence.oxm.XMLDescriptor) JavaClass(org.eclipse.persistence.jaxb.javamodel.JavaClass) XMLSchemaReference(org.eclipse.persistence.oxm.schema.XMLSchemaReference) ClassDescriptor(org.eclipse.persistence.descriptors.ClassDescriptor) Descriptor(org.eclipse.persistence.internal.oxm.mappings.Descriptor) XMLDescriptor(org.eclipse.persistence.oxm.XMLDescriptor) CoreDescriptor(org.eclipse.persistence.core.descriptors.CoreDescriptor)

Example 10 with Field

use of org.eclipse.persistence.internal.oxm.mappings.Field in project eclipselink by eclipse-ee4j.

the class MappingsGenerator method generateCompositeObjectMapping.

public CompositeObjectMapping generateCompositeObjectMapping(Property property, Descriptor descriptor, NamespaceInfo namespaceInfo, String referenceClassName) {
    CompositeObjectMapping mapping = new XMLCompositeObjectMapping();
    initializeXMLMapping((XMLMapping) mapping, property);
    // if the XPath is set (via xml-path) use it; otherwise figure it out
    mapping.setField(getXPathForField(property, namespaceInfo, false, false));
    // handle null policy set via xml metadata
    if (property.isSetNullPolicy()) {
        mapping.setNullPolicy(getNullPolicyFromProperty(property, getNamespaceResolverForDescriptor(namespaceInfo)));
    } else {
        NullPolicy nullPolicy = (NullPolicy) mapping.getNullPolicy();
        nullPolicy.setSetPerformedForAbsentNode(false);
        if (property.isNillable()) {
            nullPolicy.setNullRepresentedByXsiNil(true);
            nullPolicy.setMarshalNullRepresentation(XMLNullRepresentationType.XSI_NIL);
        }
    }
    if (referenceClassName == null) {
        setTypedTextField((Field) mapping.getField());
        String defaultValue = property.getDefaultValue();
        if (null != defaultValue) {
            mapping.setConverter(new DefaultElementConverter(defaultValue));
        }
    } else {
        mapping.setReferenceClassName(referenceClassName);
    }
    if (property.isTransientType()) {
        mapping.setReferenceClassName(Constants.UNKNOWN_OR_TRANSIENT_CLASS);
    }
    if (property.isRequired()) {
        ((Field) mapping.getField()).setRequired(true);
    }
    return mapping;
}
Also used : IsSetNullPolicy(org.eclipse.persistence.oxm.mappings.nullpolicy.IsSetNullPolicy) XmlIsSetNullPolicy(org.eclipse.persistence.jaxb.xmlmodel.XmlIsSetNullPolicy) NullPolicy(org.eclipse.persistence.oxm.mappings.nullpolicy.NullPolicy) XmlNullPolicy(org.eclipse.persistence.jaxb.xmlmodel.XmlNullPolicy) XmlAbstractNullPolicy(org.eclipse.persistence.jaxb.xmlmodel.XmlAbstractNullPolicy) AbstractNullPolicy(org.eclipse.persistence.oxm.mappings.nullpolicy.AbstractNullPolicy) XMLField(org.eclipse.persistence.oxm.XMLField) DatabaseField(org.eclipse.persistence.internal.helper.DatabaseField) Field(org.eclipse.persistence.internal.oxm.mappings.Field) JavaField(org.eclipse.persistence.jaxb.javamodel.JavaField) DefaultElementConverter(org.eclipse.persistence.internal.jaxb.DefaultElementConverter) XMLCompositeObjectMapping(org.eclipse.persistence.oxm.mappings.XMLCompositeObjectMapping) CompositeObjectMapping(org.eclipse.persistence.internal.oxm.mappings.CompositeObjectMapping) XMLCompositeObjectMapping(org.eclipse.persistence.oxm.mappings.XMLCompositeObjectMapping)

Aggregations

Field (org.eclipse.persistence.internal.oxm.mappings.Field)65 DatabaseField (org.eclipse.persistence.internal.helper.DatabaseField)20 XMLField (org.eclipse.persistence.oxm.XMLField)20 QName (javax.xml.namespace.QName)18 Descriptor (org.eclipse.persistence.internal.oxm.mappings.Descriptor)18 JavaField (org.eclipse.persistence.jaxb.javamodel.JavaField)16 DirectMapping (org.eclipse.persistence.internal.oxm.mappings.DirectMapping)14 JavaClass (org.eclipse.persistence.jaxb.javamodel.JavaClass)13 CompositeObjectMapping (org.eclipse.persistence.internal.oxm.mappings.CompositeObjectMapping)12 ArrayList (java.util.ArrayList)11 Mapping (org.eclipse.persistence.internal.oxm.mappings.Mapping)11 AbstractNullPolicy (org.eclipse.persistence.oxm.mappings.nullpolicy.AbstractNullPolicy)11 List (java.util.List)10 BinaryDataMapping (org.eclipse.persistence.internal.oxm.mappings.BinaryDataMapping)10 CoreMapping (org.eclipse.persistence.core.mappings.CoreMapping)9 ClassDescriptor (org.eclipse.persistence.descriptors.ClassDescriptor)8 SAXException (org.xml.sax.SAXException)8 CoreConverter (org.eclipse.persistence.core.mappings.converters.CoreConverter)7 XPathFragment (org.eclipse.persistence.internal.oxm.XPathFragment)7 BinaryDataCollectionMapping (org.eclipse.persistence.internal.oxm.mappings.BinaryDataCollectionMapping)7