jpa/subsystem/src/main/java/org/jboss/as/jpa/puparser/PersistenceUnitXmlParser.java
private static PersistenceUnitMetadata parsePU(XMLStreamReader reader, Version version, final PropertyReplacer propertyReplacer) throws XMLStreamException {
        PersistenceUnitMetadata pu = new PersistenceUnitMetadataImpl();
        List<String> classes = new ArrayList<String>(1);
        List<String> jarFiles = new ArrayList<String>(1);
        List<String> mappingFiles = new ArrayList<String>(1);
        Properties properties = new Properties();

        // set defaults
        pu.setTransactionType(PersistenceUnitTransactionType.JTA);
        pu.setValidationMode(ValidationMode.AUTO);
        pu.setSharedCacheMode(SharedCacheMode.UNSPECIFIED);
        pu.setPersistenceProviderClassName(Configuration.PROVIDER_CLASS_DEFAULT);
        if (version.equals(Version.JPA_1_0)) {
            pu.setPersistenceXMLSchemaVersion("1.0");
        } else if (version.equals(Version.JPA_2_0)) {
            pu.setPersistenceXMLSchemaVersion("2.0");
        } else if (version.equals(Version.JPA_2_1)) {
            pu.setPersistenceXMLSchemaVersion("2.1");
        } else {
            pu.setPersistenceXMLSchemaVersion("2.2");
        }

        final int count = reader.getAttributeCount();
        for (int i = 0; i < count; i++) {
            final String value = reader.getAttributeValue(i);
            if (traceEnabled) {
                ROOT_LOGGER.tracef("parse persistence.xml: attribute value(%d) = %s", i, value);
            }
            final String attributeNamespace = reader.getAttributeNamespace(i);
            if (attributeNamespace != null && !attributeNamespace.isEmpty()) {
                continue;
            }
            final Attribute attribute = Attribute.forName(reader.getAttributeLocalName(i));
            switch (attribute) {
                case NAME:
                    pu.setPersistenceUnitName(value);
                    break;
                case TRANSACTIONTYPE:
                    if (value.equalsIgnoreCase("RESOURCE_LOCAL"))
                        pu.setTransactionType(PersistenceUnitTransactionType.RESOURCE_LOCAL);
                    break;
                default:
                    throw unexpectedAttribute(reader, i);
            }
        }

        // until the ending PERSISTENCEUNIT tag
        while (reader.hasNext() && reader.nextTag() != END_ELEMENT) {
            final Element element = Element.forName(reader.getLocalName());
            if (traceEnabled) {
                ROOT_LOGGER.tracef("parse persistence.xml: element=%s", element.getLocalName());
            }
            switch (element) {
                case CLASS:
                    classes.add(getElement(reader, propertyReplacer));
                    break;

                case DESCRIPTION:
                    final String description = getElement(reader, propertyReplacer);
                    break;

                case EXCLUDEUNLISTEDCLASSES:
                    String text = getElement(reader, propertyReplacer);
                    if (text == null || text.isEmpty()) {
                        //the spec has examples where an empty
                        //exclude-unlisted-classes element has the same
                        //effect as setting it to true
                        pu.setExcludeUnlistedClasses(true);
                    } else {
                        pu.setExcludeUnlistedClasses(Boolean.valueOf(text));
                    }
                    break;

                case JARFILE:
                    String file = getElement(reader, propertyReplacer);
                    jarFiles.add(file);
                    break;

                case JTADATASOURCE:
                    pu.setJtaDataSourceName(getElement(reader, propertyReplacer));
                    break;

                case NONJTADATASOURCE:
                    pu.setNonJtaDataSourceName(getElement(reader, propertyReplacer));
                    break;

                case MAPPINGFILE:
                    mappingFiles.add(getElement(reader, propertyReplacer));
                    break;

                case PROPERTIES:
                    parseProperties(reader, properties, propertyReplacer);
                    break;

                case PROVIDER:
                    pu.setPersistenceProviderClassName(getElement(reader, propertyReplacer));
                    break;

                case SHAREDCACHEMODE:
                    String cm = getElement(reader, propertyReplacer);
                    pu.setSharedCacheMode(SharedCacheMode.valueOf(cm));
                    break;

                case VALIDATIONMODE:
                    String validationMode = getElement(reader, propertyReplacer);
                    pu.setValidationMode(ValidationMode.valueOf(validationMode));
                    break;

                default:
                    throw unexpectedElement(reader);
            }
        }
        if (traceEnabled) {
            ROOT_LOGGER.trace("parse persistence.xml: reached ending persistence-unit tag");
        }
        pu.setManagedClassNames(classes);
        pu.setJarFiles(jarFiles);
        pu.setMappingFiles(mappingFiles);
        pu.setProperties(properties);
        return pu;
    }
private static PersistenceUnitMetadata parsePU(XMLStreamReader reader, Version version, final PropertyReplacer propertyReplacer) throws XMLStreamException {
        PersistenceUnitMetadata pu = new PersistenceUnitMetadataImpl();
        List<String> classes = new ArrayList<String>(1);
        List<String> jarFiles = new ArrayList<String>(1);
        List<String> mappingFiles = new ArrayList<String>(1);
        Properties properties = new Properties();

        // set defaults
        pu.setTransactionType(PersistenceUnitTransactionType.JTA);
        pu.setValidationMode(ValidationMode.AUTO);
        pu.setSharedCacheMode(SharedCacheMode.UNSPECIFIED);
        pu.setPersistenceProviderClassName(Configuration.PROVIDER_CLASS_DEFAULT);
        if (version.equals(Version.JPA_1_0)) {
            pu.setPersistenceXMLSchemaVersion("1.0");
        } else if (version.equals(Version.JPA_2_0)) {
            pu.setPersistenceXMLSchemaVersion("2.0");
        } else if (version.equals(Version.JPA_2_1)) {
            pu.setPersistenceXMLSchemaVersion("2.1");
        } else {
            pu.setPersistenceXMLSchemaVersion("2.2");
        }

        final int count = reader.getAttributeCount();
        for (int i = 0; i < count; i++) {
            final String value = reader.getAttributeValue(i);
            if (traceEnabled) {
                ROOT_LOGGER.tracef("parse persistence.xml: attribute value(%d) = %s", i, value);
            }
            final String attributeNamespace = reader.getAttributeNamespace(i);
            if (attributeNamespace != null && !attributeNamespace.isEmpty()) {
                continue;
            }
            final Attribute attribute = Attribute.forName(reader.getAttributeLocalName(i));
            switch (attribute) {
                case NAME:
                    pu.setPersistenceUnitName(value);
                    break;
                case TRANSACTIONTYPE:
                    if (value.equalsIgnoreCase("RESOURCE_LOCAL"))
                        pu.setTransactionType(PersistenceUnitTransactionType.RESOURCE_LOCAL);
                    break;
                default:
                    throw unexpectedAttribute(reader, i);
            }
        }

        // until the ending PERSISTENCEUNIT tag
        while (reader.hasNext() && reader.nextTag() != END_ELEMENT) {
            final Element element = Element.forName(reader.getLocalName());
            if (traceEnabled) {
                ROOT_LOGGER.tracef("parse persistence.xml: element=%s", element.getLocalName());
            }
            switch (element) {
                case CLASS:
                    classes.add(getElement(reader, propertyReplacer));
                    break;

                case DESCRIPTION:
                    final String description = getElement(reader, propertyReplacer);
                    break;

                case EXCLUDEUNLISTEDCLASSES:
                    String text = getElement(reader, propertyReplacer);
                    if (text == null || text.isEmpty()) {
                        //the spec has examples where an empty
                        //exclude-unlisted-classes element has the same
                        //effect as setting it to true
                        pu.setExcludeUnlistedClasses(true);
                    } else {
                        pu.setExcludeUnlistedClasses(Boolean.valueOf(text));
                    }
                    break;

                case JARFILE:
                    String file = getElement(reader, propertyReplacer);
                    jarFiles.add(file);
                    break;

                case JTADATASOURCE:
                    pu.setJtaDataSourceName(getElement(reader, propertyReplacer));
                    break;

                case NONJTADATASOURCE:
                    pu.setNonJtaDataSourceName(getElement(reader, propertyReplacer));
                    break;

                case MAPPINGFILE:
                    mappingFiles.add(getElement(reader, propertyReplacer));
                    break;

                case PROPERTIES:
                    parseProperties(reader, properties, propertyReplacer);
                    break;

                case PROVIDER:
                    pu.setPersistenceProviderClassName(getElement(reader, propertyReplacer));
                    break;

                case SHAREDCACHEMODE:
                    String cm = getElement(reader, propertyReplacer);
                    pu.setSharedCacheMode(SharedCacheMode.valueOf(cm));
                    break;

                case VALIDATIONMODE:
                    String validationMode = getElement(reader, propertyReplacer);
                    pu.setValidationMode(ValidationMode.valueOf(validationMode));
                    break;

                default:
                    throw unexpectedElement(reader);
            }
        }
        if (traceEnabled) {
            ROOT_LOGGER.trace("parse persistence.xml: reached ending persistence-unit tag");
        }
        pu.setManagedClassNames(classes);
        pu.setJarFiles(jarFiles);
        pu.setMappingFiles(mappingFiles);
        pu.setProperties(properties);
        return pu;
    }
private static PersistenceUnitMetadata parsePU ( XMLStreamReader reader , Version version , final PropertyReplacer propertyReplacer ) throws XMLStreamException { PersistenceUnitMetadata pu = new PersistenceUnitMetadataImpl ( ) ; List < String > classes = new ArrayList < String > ( 1 ) ; List < String > jarFiles = new ArrayList < String > ( 1 ) ; List < String > mappingFiles = new ArrayList < String > ( 1 ) ; Properties properties = new Properties ( ) ; // set defaults pu . setTransactionType ( PersistenceUnitTransactionType . JTA ) ; pu . setValidationMode ( ValidationMode . AUTO ) ; pu . setSharedCacheMode ( SharedCacheMode . UNSPECIFIED ) ; pu . setPersistenceProviderClassName ( Configuration . PROVIDER_CLASS_DEFAULT ) ; if ( version . equals ( Version . JPA_1_0 ) ) { pu . setPersistenceXMLSchemaVersion ( "1.0" ) ; } else if ( version . equals ( Version . JPA_2_0 ) ) { pu . setPersistenceXMLSchemaVersion ( "2.0" ) ; } else if ( version . equals ( Version . JPA_2_1 ) ) { pu . setPersistenceXMLSchemaVersion ( "2.1" ) ; } else { pu . setPersistenceXMLSchemaVersion ( "2.2" ) ; } final int count = reader . getAttributeCount ( ) ; for ( int i = 0 ; i < count ; i ++ ) { final String value = reader . getAttributeValue ( i ) ; if ( traceEnabled ) { ROOT_LOGGER . tracef ( "parse persistence.xml: attribute value(%d) = %s" , i , value ) ; } final String attributeNamespace = reader . getAttributeNamespace ( i ) ; if ( attributeNamespace != null && ! attributeNamespace . isEmpty ( ) ) { continue ; } final Attribute attribute = Attribute . forName ( reader . getAttributeLocalName ( i ) ) ; switch ( attribute ) { case NAME : pu . setPersistenceUnitName ( value ) ; break ; case TRANSACTIONTYPE : if ( value . equalsIgnoreCase ( "RESOURCE_LOCAL" ) ) pu . setTransactionType ( PersistenceUnitTransactionType . RESOURCE_LOCAL ) ; break ; default : throw unexpectedAttribute ( reader , i ) ; } } // until the ending PERSISTENCEUNIT tag while ( reader . hasNext ( ) && reader . nextTag ( ) != END_ELEMENT ) { final Element element = Element . forName ( reader . getLocalName ( ) ) ; if ( traceEnabled ) { ROOT_LOGGER . tracef ( "parse persistence.xml: element=%s" , element . getLocalName ( ) ) ; } switch ( element ) { case CLASS : classes . add ( getElement ( reader , propertyReplacer ) ) ; break ; case DESCRIPTION : final String description = getElement ( reader , propertyReplacer ) ; break ; case EXCLUDEUNLISTEDCLASSES : String text = getElement ( reader , propertyReplacer ) ; if ( text == null || text . isEmpty ( ) ) { //the spec has examples where an empty //exclude-unlisted-classes element has the same //effect as setting it to true pu . setExcludeUnlistedClasses ( true ) ; } else { pu . setExcludeUnlistedClasses ( Boolean . valueOf ( text ) ) ; } break ; case JARFILE : String file = getElement ( reader , propertyReplacer ) ; jarFiles . add ( file ) ; break ; case JTADATASOURCE : pu . setJtaDataSourceName ( getElement ( reader , propertyReplacer ) ) ; break ; case NONJTADATASOURCE : pu . setNonJtaDataSourceName ( getElement ( reader , propertyReplacer ) ) ; break ; case MAPPINGFILE : mappingFiles . add ( getElement ( reader , propertyReplacer ) ) ; break ; case PROPERTIES : parseProperties ( reader , properties , propertyReplacer ) ; break ; case PROVIDER : pu . setPersistenceProviderClassName ( getElement ( reader , propertyReplacer ) ) ; break ; case SHAREDCACHEMODE : String cm = getElement ( reader , propertyReplacer ) ; pu . setSharedCacheMode ( SharedCacheMode . valueOf ( cm ) ) ; break ; case VALIDATIONMODE : String validationMode = getElement ( reader , propertyReplacer ) ; pu . setValidationMode ( ValidationMode . valueOf ( validationMode ) ) ; break ; default : throw unexpectedElement ( reader ) ; } } if ( traceEnabled ) { ROOT_LOGGER . trace ( "parse persistence.xml: reached ending persistence-unit tag" ) ; } pu . setManagedClassNames ( classes ) ; pu . setJarFiles ( jarFiles ) ; pu . setMappingFiles ( mappingFiles ) ; pu . setProperties ( properties ) ; return pu ; }
Parse the persistence unit definitions based on persistence_2_0.xsd.


@param reader
@param propertyReplacer
@return
@throws XMLStreamException
Parse the persistence unit definitions based on persistence_2_0 . xsd .