Package org.eclipse.persistence.internal.oxm

Examples of org.eclipse.persistence.internal.oxm.XPathQName


    }

    @Override
    public void setLeafElementType(QName type) {
        if (type != null) {
            setLeafElementType(new XPathQName(type, isNamespaceAware()));
        } else {
            setLeafElementType((XPathQName) null);
        }
    }
View Full Code Here


                name = qName;
            } else {
                name = localName;
            }

            XPathQName rootQName;
            if (namespaceURI == null || namespaceURI.length() == 0) {
                rootQName = new XPathQName(name, xmlReader.isNamespaceAware() );
            } else {
                rootQName = new XPathQName(namespaceURI, name, xmlReader.isNamespaceAware() );
            }
           
            Class primitiveWrapperClass = null;
            Descriptor xmlDescriptor = xmlContext.getDescriptor(rootQName);
                            
            //if no match on root element look for xsi:type
            if(xmlDescriptor == null){ 
              boolean isPrimitiveType = false;
                String type = null;
                if(xmlReader.isNamespaceAware()){
                    type = atts.getValue(javax.xml.XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI, Constants.SCHEMA_TYPE_ATTRIBUTE);
                }else{
                  type = atts.getValue(Constants.EMPTY_STRING, Constants.SCHEMA_TYPE_ATTRIBUTE);
                }
                if (null != type) {
                    XPathFragment typeFragment = new XPathFragment(type, xmlReader.namespaceSeparator, xmlReader.isNamespaceAware());
                    // set the prefix using a reverse key lookup by uri value on namespaceMap
                    if (xmlReader.isNamespaceAware() && null != unmarshalNamespaceResolver) {
                        typeFragment.setNamespaceURI(unmarshalNamespaceResolver.getNamespaceURI(typeFragment.getPrefix()));
                    }
                    Descriptor lookupDescriptor = xmlContext.getDescriptorByGlobalType(typeFragment);
                    if(lookupDescriptor == null) {
                      QName lookupQName = null;
                      if(typeFragment.getNamespaceURI() == null){
                        lookupQName= new QName(javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI, typeFragment.getLocalName());
                      }else{
                        lookupQName= new QName(typeFragment.getNamespaceURI(), typeFragment.getLocalName());
                      }
                        //check to see if type attribute represents simple type
                      if(null == session) {
                         session = (CoreAbstractSession) xmlContext.getSession();
                      }
                      ConversionManager conversionManager = (ConversionManager) session.getDatasourcePlatform().getConversionManager();
                        primitiveWrapperClass = conversionManager.javaType(lookupQName);                      
                    }else{         
                      //found descriptor based on type attribute
                      xmlDescriptor = lookupDescriptor;
                      session = xmlContext.getSession(xmlDescriptor);  
                    }
                }
            } else {
              if(null != xmlDescriptor.getDefaultRootElementField() && !unmarshaller.isResultAlwaysXMLRoot()){
                  String descLocalName = xmlDescriptor.getDefaultRootElementField().getXPathFragment().getLocalName();
                  if( descLocalName != null && descLocalName.equals(localName) ){
                      String descUri = xmlDescriptor.getDefaultRootElementField().getXPathFragment().getNamespaceURI();
                      if(!xmlReader.isNamespaceAware() || (xmlReader.isNamespaceAware() && ((namespaceURI == null && descUri == null ) || (namespaceURI !=null &&namespaceURI.length() == 0 && descUri == null ) || (namespaceURI != null && namespaceURI.equals(descUri))))){
                          //found a descriptor based on root element then know we won't need to wrap in an XMLRoot
                         shouldWrap = false;
                      }
                    }
              }
             
                if(xmlDescriptor.hasInheritance()){
                  //if descriptor has inheritance check class indicator
                  session = xmlContext.getSession(xmlDescriptor);             
                  UnmarshalRecord tmpUnmarshalRecord = new UnmarshalRecordImpl(null);
                  tmpUnmarshalRecord.setUnmarshaller(unmarshaller);
                  tmpUnmarshalRecord.setUnmarshalNamespaceResolver(unmarshalNamespaceResolver);
                  tmpUnmarshalRecord.setXMLReader(this.getXMLReader());
                  tmpUnmarshalRecord.setAttributes(atts);
                
                    Class classValue = xmlDescriptor.getInheritancePolicy().classFromRow(new org.eclipse.persistence.oxm.record.UnmarshalRecord(tmpUnmarshalRecord), (CoreAbstractSession) session);
                    if (classValue == null) {
                       // no xsi:type attribute - look for type indicator on the default root element
                       QName leafElementType = xmlDescriptor.getDefaultRootElementType();
                       // if we have a user-set type, try to get the class from the inheritance policy
                       if (leafElementType != null) {
                           Object indicator = xmlDescriptor.getInheritancePolicy().getClassIndicatorMapping().get(leafElementType);
                           if(indicator != null) {
                               classValue = (Class)indicator;
                           }
                       }
                    }
                    if (classValue != null) {                  
                       xmlDescriptor = (Descriptor)session.getDescriptor(classValue);
                    } else {
                       // since there is no xsi:type attribute, we'll use the descriptor
                       // that was retrieved based on the rootQName -  we need to make
                       // sure it is non-abstract
                       if (Modifier.isAbstract(xmlDescriptor.getJavaClass().getModifiers())) {
                           // need to throw an exception here
                           throw DescriptorException.missingClassIndicatorField((XMLRecord) tmpUnmarshalRecord, (org.eclipse.persistence.oxm.XMLDescriptor)xmlDescriptor.getInheritancePolicy().getDescriptor());
                       }
                   }
                }
            }
           
            if (null == xmlDescriptor) {
                //check for a cached object and look for descriptor by class
                Object obj = this.xmlReader.getCurrentObject(session, null);
                if (obj != null) {
                    xmlDescriptor = (Descriptor)xmlContext.getSession(obj.getClass()).getDescriptor(obj.getClass());
                }             
            }         
         
            if (null == xmlDescriptor && primitiveWrapperClass == null){
                if(!this.keepAsElementPolicy.isKeepNoneAsElement()) {
                    this.documentBuilder = new SAXDocumentBuilder();
                    documentBuilder.startDocument();
                    //start any prefixes that have already been started
                    for(String prefix:this.unmarshalNamespaceResolver.getPrefixes()) {
                        documentBuilder.startPrefixMapping(prefix, this.unmarshalNamespaceResolver.getNamespaceURI(prefix));
                    }
                    documentBuilder.startElement(namespaceURI, localName, qName, atts);
                    this.xmlReader.setContentHandler(documentBuilder);
                    return;
                }
                Class unmappedContentHandlerClass = unmarshaller.getUnmappedContentHandlerClass();
                if (null == unmappedContentHandlerClass) {
                    throw XMLMarshalException.noDescriptorWithMatchingRootElement(rootQName.toString());
                } else {
                    UnmappedContentHandler unmappedContentHandler;
                    try {
                        PrivilegedNewInstanceFromClass privilegedNewInstanceFromClass = new PrivilegedNewInstanceFromClass(unmappedContentHandlerClass);
                        unmappedContentHandler = (UnmappedContentHandler)privilegedNewInstanceFromClass.run();
View Full Code Here

        return object;

    }
   
    private void setDeclaredTypeOnXMLRoot(Root xmlRoot, String elementNamespaceUri, String elementLocalName, boolean isNamespaceAware, Unmarshaller unmarshaller){
      XPathQName xpathQName = new XPathQName(elementNamespaceUri, elementLocalName, isNamespaceAware);
      Descriptor desc = unmarshaller.getContext().getDescriptor(xpathQName);
      if(desc != null){
        xmlRoot.setDeclaredType(desc.getJavaClass());
      }
    }
View Full Code Here

                    name = qName;
                } else {
                    name = localName;
                }

                XPathQName rootQName;
                if (namespaceURI == null || namespaceURI.length() == 0) {
                    rootQName = new XPathQName(name, xmlReader.isNamespaceAware() );
                } else {
                    rootQName = new XPathQName(namespaceURI, name, xmlReader.isNamespaceAware() );
                }
             
              xmlDescriptor = xmlContext.getDescriptor(rootQName);
             
                if (null == xmlDescriptor) {
                    //check for a cached object and look for descriptor by class
                    Object obj = this.xmlReader.getCurrentObject(session, null);
                    if (obj != null) {
                        xmlDescriptor = (XMLDescriptor)xmlContext.getSession(obj.getClass()).getDescriptor(obj.getClass());
                    }
                    if(xmlDescriptor == null) {
                        isPrimitiveType = primitiveWrapperClass != null;
                    }
                }
                if (null == xmlDescriptor && !isPrimitiveType) {
                    if(this.keepAsElementPolicy != UnmarshalKeepAsElementPolicy.KEEP_NONE_AS_ELEMENT) {
                        this.documentBuilder = new SAXDocumentBuilder();
                        documentBuilder.startDocument();
                        //start any prefixes that have already been started
                        for(String prefix:this.unmarshalNamespaceResolver.getPrefixes()) {
                            documentBuilder.startPrefixMapping(prefix, this.unmarshalNamespaceResolver.getNamespaceURI(prefix));
                        }
                        documentBuilder.startElement(namespaceURI, localName, qName, atts);
                        this.xmlReader.setContentHandler(documentBuilder);
                        return;
                    }
                    Class unmappedContentHandlerClass = unmarshaller.getUnmappedContentHandlerClass();
                    if (null == unmappedContentHandlerClass) {
                        throw XMLMarshalException.noDescriptorWithMatchingRootElement(rootQName.toString());
                    } else {
                        UnmappedContentHandler unmappedContentHandler;

                        try {
                            PrivilegedNewInstanceFromClass privilegedNewInstanceFromClass = new PrivilegedNewInstanceFromClass(unmappedContentHandlerClass);
View Full Code Here

                storeXMLDescriptorsByQName((DatabaseSession) sessions.get(x));
            }
        }

        private void addDescriptorByQName(QName qName, XMLDescriptor descriptor) {
          XPathQName xpathQName = new XPathQName(qName, true);
          addDescriptorByQName(xpathQName, descriptor);
        }
View Full Code Here

        /**
         * INTERNAL: Return the XMLDescriptor with the default root mapping matching
         * the QName parameter.
         */
        private XMLDescriptor getDescriptor(QName qName) {
          XPathQName xpathQName = new XPathQName(qName, true);
          return (XMLDescriptor) descriptorsByQName.get(xpathQName);
        }
View Full Code Here

        /**
         * INTERNAL:
         */
        private void storeXMLDescriptorByQName(XMLDescriptor xmlDescriptor) {
            XPathQName descriptorQName;
            String defaultRootName;

            if(xmlDescriptor.hasReferenceMappings()) {
                this.requireUnitOfWork = true;
            }
            List tableNames = xmlDescriptor.getTableNames();
            for (int i = 0; i < tableNames.size(); i++) {
                defaultRootName = (String) tableNames.get(i);

                if (null != defaultRootName) {
                    int index = defaultRootName.indexOf(':');
                    String defaultRootLocalName = defaultRootName.substring(index + 1);
                    if(defaultRootLocalName != null && !(defaultRootLocalName.equals(XMLConstants.EMPTY_STRING))){
                        if (index > -1) {
                            String defaultRootPrefix = defaultRootName.substring(0, index);
                            String defaultRootNamespaceURI = xmlDescriptor.getNamespaceResolver().resolveNamespacePrefix(defaultRootPrefix);
                            descriptorQName = new XPathQName(defaultRootNamespaceURI, defaultRootLocalName, true);
                        } else {
                            if(xmlDescriptor.getNamespaceResolver() != null) {
                                descriptorQName = new XPathQName(xmlDescriptor.getNamespaceResolver().getDefaultNamespaceURI(), defaultRootLocalName, true);
                            } else {
                                descriptorQName = new XPathQName(defaultRootLocalName, true);
                            }
                        }
                        if (!xmlDescriptor.hasInheritance() || xmlDescriptor.getInheritancePolicy().isRootParentDescriptor()) {
                          addDescriptorByQName(descriptorQName, xmlDescriptor);
                        } else {
View Full Code Here

    /**
     * INTERNAL: Return the XMLDescriptor with the default root mapping matching
     * the QName parameter.
     */
    public XMLDescriptor getDescriptor(QName qName) {
      XPathQName xpathQName = new XPathQName(qName, true);
      return xmlContextState.getDescriptor(xpathQName);
    }
View Full Code Here

    /**
     * INTERNAL:
     */
    public void setLeafElementType(QName type) {
      if(type != null){
          setLeafElementType(new XPathQName(type, isNamespaceAware()));
      }
    }
View Full Code Here

                Class classValue = aDescriptor.getInheritancePolicy().classFromRow(nestedRow, executionSession);
                if (classValue == null) {
                    // no xsi:type attribute - look for type indicator on the field
                    QName leafElementType = ((XMLField) getField()).getLeafElementType();
                    if (leafElementType != null) {
                      XPathQName leafElementXPathQName = new XPathQName(leafElementType, ((XMLRecord) nestedRow).isNamespaceAware());
                      Object indicator = aDescriptor.getInheritancePolicy().getClassIndicatorMapping().get(leafElementXPathQName);
                        if(indicator != null) {
                            classValue = (Class) indicator;
                        }
                    }
View Full Code Here

TOP

Related Classes of org.eclipse.persistence.internal.oxm.XPathQName

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.