Search in sources :

Example 71 with XMLEventReader

use of javax.xml.stream.XMLEventReader in project Payara by payara.

the class ModuleXMLConfigurationFileParser method parseServiceConfiguration.

public List<ConfigBeanDefaultValue> parseServiceConfiguration(InputStream xmlDocumentStream) throws XMLStreamException {
    List<ConfigBeanDefaultValue> configBeans = new ArrayList<ConfigBeanDefaultValue>();
    XMLInputFactory inputFactory = XMLInputFactory.newInstance();
    inputFactory.setProperty(XMLInputFactory.IS_COALESCING, Boolean.TRUE);
    XMLEventReader eventReader = inputFactory.createXMLEventReader(xmlDocumentStream);
    ConfigBeanDefaultValue configValue = null;
    while (eventReader.hasNext()) {
        XMLEvent event = eventReader.nextEvent();
        if (event.isStartElement()) {
            StartElement startElement = event.asStartElement();
            // If we have a item element we create a new item
            if (startElement.getName().getLocalPart().equalsIgnoreCase(CONFIG_BUNDLE)) {
                configValue = new ConfigBeanDefaultValue();
                Iterator<Attribute> attributes = startElement.getAttributes();
                while (attributes.hasNext()) {
                    Attribute attribute = attributes.next();
                    if (attribute.getName().toString().equals(LOCATION)) {
                        configValue.setLocation(attribute.getValue());
                    } else if (attribute.getName().toString().equals(REPLACE_IF_EXISTS)) {
                        configValue.setReplaceCurrentIfExists(Boolean.parseBoolean(attribute.getValue()));
                    }
                }
                // attributes
                continue;
            }
            if (startElement.getName().getLocalPart().equalsIgnoreCase(CUSTOMIZATION_TOKEN)) {
                ConfigCustomizationToken token;
                String value = null;
                String description = null;
                String name = null;
                String title = null;
                String validationExpression = null;
                ConfigCustomizationToken.CustomizationType type = ConfigCustomizationToken.CustomizationType.STRING;
                TokenTypeDetails tokenTypeDetails = null;
                Iterator<Attribute> attributes = startElement.getAttributes();
                while (attributes.hasNext()) {
                    Attribute attribute = attributes.next();
                    if (attribute.getName().toString().equals(DEFAULT_VALUE)) {
                        value = attribute.getValue();
                    } else if (attribute.getName().toString().equals(DESCRIPTION)) {
                        description = getLocalizedValue(attribute.getValue());
                    } else if (attribute.getName().toString().equals(NAME)) {
                        name = attribute.getValue();
                    } else if (attribute.getName().toString().equals(TITLE)) {
                        title = getLocalizedValue(attribute.getValue());
                    } else if (attribute.getName().toString().equals(VALIDATION_EXPRESSION)) {
                        validationExpression = getLocalizedValue(attribute.getValue());
                    }
                }
                // attributes
                event = eventReader.nextEvent();
                while (!event.isStartElement() && !event.isEndElement()) {
                    event = eventReader.nextEvent();
                }
                if (event.isStartElement()) {
                    startElement = event.asStartElement();
                    // If we have a item element we create a new item
                    if (startElement.getName().getLocalPart().equalsIgnoreCase(FILE)) {
                        type = ConfigCustomizationToken.CustomizationType.FILE;
                        String tokVal = startElement.getAttributeByName(QName.valueOf(MUST_EXIST)).getValue();
                        FileTypeDetails.FileExistCondition cond = FileTypeDetails.FileExistCondition.NO_OP;
                        if (tokVal.equalsIgnoreCase("true")) {
                            cond = FileTypeDetails.FileExistCondition.MUST_EXIST;
                        } else if (tokVal.equalsIgnoreCase("false")) {
                            cond = FileTypeDetails.FileExistCondition.MUST_NOT_EXIST;
                        }
                        tokenTypeDetails = new FileTypeDetails(cond);
                    } else if (startElement.getName().getLocalPart().equalsIgnoreCase(PORT)) {
                        type = ConfigCustomizationToken.CustomizationType.PORT;
                        tokenTypeDetails = new PortTypeDetails(startElement.getAttributeByName(QName.valueOf(BASE_OFFSET)).getValue());
                    }
                }
                token = new ConfigCustomizationToken(name, title, description, value, validationExpression, tokenTypeDetails, type);
                // TODO check that ConfigValue is not null
                configValue.addCustomizationToken(token);
                continue;
            }
            if (startElement.getName().getLocalPart().equalsIgnoreCase(CONFIGURATION_ELEMENT)) {
                Iterator<Attribute> attributes = startElement.getAttributes();
                while (attributes.hasNext()) {
                    Attribute attribute = attributes.next();
                    if (attribute.getName().toString().equals(CONFIG_BEAN_CLASS_NAME)) {
                        configValue.setConfigBeanClassName(attribute.getValue());
                    }
                }
                // attributes
                event = eventReader.nextEvent();
                if (event.isCharacters()) {
                    String str = event.asCharacters().getData();
                    configValue.setXmlConfiguration(str);
                }
                continue;
            }
        }
        // isStartElement
        if (event.isEndElement()) {
            EndElement endElement = event.asEndElement();
            if (endElement.getName().getLocalPart().equalsIgnoreCase(CONFIG_BUNDLE)) {
                configBeans.add(configValue);
            }
        }
    }
    // eventReader
    return configBeans;
}
Also used : FileTypeDetails(com.sun.enterprise.config.modularity.customization.FileTypeDetails) Attribute(javax.xml.stream.events.Attribute) EndElement(javax.xml.stream.events.EndElement) ArrayList(java.util.ArrayList) PortTypeDetails(com.sun.enterprise.config.modularity.customization.PortTypeDetails) StartElement(javax.xml.stream.events.StartElement) ConfigBeanDefaultValue(com.sun.enterprise.config.modularity.customization.ConfigBeanDefaultValue) ConfigCustomizationToken(com.sun.enterprise.config.modularity.customization.ConfigCustomizationToken) XMLEvent(javax.xml.stream.events.XMLEvent) XMLEventReader(javax.xml.stream.XMLEventReader) TokenTypeDetails(com.sun.enterprise.config.modularity.customization.TokenTypeDetails) XMLInputFactory(javax.xml.stream.XMLInputFactory)

Aggregations

XMLEventReader (javax.xml.stream.XMLEventReader)71 XMLInputFactory (javax.xml.stream.XMLInputFactory)36 XMLEvent (javax.xml.stream.events.XMLEvent)34 XMLStreamException (javax.xml.stream.XMLStreamException)23 StringReader (java.io.StringReader)18 Test (org.junit.Test)17 InputStream (java.io.InputStream)15 StAXSource (javax.xml.transform.stax.StAXSource)13 StartElement (javax.xml.stream.events.StartElement)12 IOException (java.io.IOException)10 Unmarshaller (javax.xml.bind.Unmarshaller)9 Attribute (javax.xml.stream.events.Attribute)8 ByteArrayInputStream (java.io.ByteArrayInputStream)6 StringWriter (java.io.StringWriter)6 ArrayList (java.util.ArrayList)6 QName (javax.xml.namespace.QName)6 Document (org.w3c.dom.Document)6 ByteArrayOutputStream (java.io.ByteArrayOutputStream)5 InputStreamReader (java.io.InputStreamReader)5 JAXBContext (javax.xml.bind.JAXBContext)5