@Override public BeansXml parse(URL url) { if (beansXmlValidator != null) { beansXmlValidator.validate(url); } return new BeansXmlStreamParser(url).parse(); }
@SuppressWarnings("rawtypes") private void parseBeans(StartElement element) { Iterator attributes = element.getAttributes(); while (attributes.hasNext()) { Attribute attribute = (Attribute) attributes.next(); if (isLocalName(attribute.getName(), VERSION_ATTRIBUTE_NAME)) { version = attribute.getValue(); } else if (isLocalName(attribute.getName(), BEAN_DISCOVERY_MODE_ATTRIBUTE_NAME)) { discoveryMode = parseDiscoveryMode(interpolate(attribute.getValue()).trim().toUpperCase()); } } }
private boolean isEnd(XMLEvent event, String name) { return isEnd(event, name, JAVAEE_URIS); }
private boolean isEnd(XMLEvent event, String name, Set<String> namespaces) { if (event.isEndElement()) { EndElement element = (EndElement) event; return isLocalName(element.getName(), name) && isInNamespace(element.getName(), namespaces); } return false; }
private StartElement nextStartElement(XMLEventReader reader, String localName, Set<String> namespaces) throws XMLStreamException { StartElement startElement = nextStartElement(reader); if (startElement != null && localName.equals(startElement.getName().getLocalPart()) && isInNamespace(startElement.getName(), namespaces)) { return startElement; } return null; }
XMLEventReader reader = factory.createXMLEventReader(in); StartElement element = nextStartElement(reader, BEANS, JAVAEE_URIS); if (element != null) { parseBeans(element); while (reader.hasNext()) { XMLEvent event = reader.nextEvent(); if (isEnd(event, BEANS)) { break; } else if (isStartElement(event, ALTERNATIVES)) { parseAlternatives(reader, event); } else if (isStartElement(event, INTERCEPTORS)) { parseInterceptors(reader, event); } else if (isStartElement(event, DECORATORS)) { parseDecorators(reader, event); } else if (isStartElement(event, SCAN, SCANNING_URIS)) { parseScan(reader, event); } else if (isStartElement(event, TRIM)) { isTrimmed = true; throw XmlLogger.LOG.parsingError(beansXml, e); return new BeansXmlImpl(orEmpty(selectedAlternatives), orEmpty(selectedAlternativeStereotypes), orEmpty(enabledDecorators), orEmpty(enabledInterceptors), new ScanningImpl(orEmpty(includes), orEmpty(excludes)), beansXml, discoveryMode, version, isTrimmed);
private void parseInterceptors(XMLEventReader reader, XMLEvent event) throws XMLStreamException { if (enabledInterceptors != null) { throw XmlLogger.LOG.multipleInterceptors(beansXml + "@" + event.asStartElement().getLocation().getLineNumber()); } enabledInterceptors = new LinkedList<>(); while (reader.hasNext()) { event = reader.nextEvent(); if (isEnd(event, INTERCEPTORS)) { return; } else if (event.isStartElement()) { StartElement element = event.asStartElement(); if (isStartElement(element, CLASS)) { enabledInterceptors.add(new XmlMetadata<String>(element.getName().toString(), getTrimmedElementText(reader), beansXml, element.getLocation().getLineNumber())); } } } }
private void handleFilter(StartElement filterElement, XMLEventReader reader, Consumer<XmlMetadata<Filter>> consumer) throws XMLStreamException { String name = getAttribute(filterElement, NAME_ATTRIBUTE_NAME); String pattern = name != null ? null : getAttribute(filterElement, PATTERN_ATTRIBUTE_NAME); if (name != null || pattern != null) { List<Metadata<SystemPropertyActivation>> systemPropertyActivations = new LinkedList<>(); List<Metadata<ClassAvailableActivation>> classAvailableActivations = new LinkedList<>(); while (reader.hasNext()) { XMLEvent event = reader.nextEvent(); if (isEnd(event, EXCLUDE, SCANNING_URIS) || isEnd(event, INCLUDE, SCANNING_URIS)) { Filter filter; if (filterElement.getName().getNamespaceURI().equals(WELD_URI)) { filter = new WeldFilterImpl(name, systemPropertyActivations, classAvailableActivations, pattern); } else { filter = new FilterImpl(name, systemPropertyActivations, classAvailableActivations); } consumer.accept(new XmlMetadata<Filter>(filterElement.getName().toString(), filter, beansXml, filterElement.getLocation().getLineNumber())); return; } else if (event.isStartElement()) { StartElement element = (StartElement) event; if (isStartElement(element, IF_CLASS_AVAILABLE, SCANNING_URIS)) { classAvailable(element, classAvailableActivations::add, false); } else if (isStartElement(element, IF_CLASS_NOT_AVAILABLE, SCANNING_URIS)) { classAvailable(element, classAvailableActivations::add, true); } else if (isStartElement(element, IF_SYSTEM_PROPERTY, SCANNING_URIS)) { systemProperty(element, systemPropertyActivations::add); } } } } }
private void parseScan(XMLEventReader reader, XMLEvent event) throws XMLStreamException { if (excludes != null) { throw XmlLogger.LOG.multipleScanning(beansXml + "@" + event.asStartElement().getLocation().getLineNumber()); } excludes = new LinkedList<>(); includes = new LinkedList<>(); while (reader.hasNext()) { event = reader.nextEvent(); if (isEnd(event, SCAN)) { return; } else if (event.isStartElement()) { StartElement element = (StartElement) event; if (isStartElement(element, EXCLUDE, SCANNING_URIS)) { handleFilter(element, reader, excludes::add); } else if (isStartElement(element, INCLUDE, SCANNING_URIS)) { handleFilter(element, reader, includes::add); } } } }
private void systemProperty(StartElement element, Consumer<Metadata<SystemPropertyActivation>> consumer) { String name = getAttribute(element, NAME_ATTRIBUTE_NAME); String value = getAttribute(element, VALUE_ATTRIBUTE_NAME); Metadata<SystemPropertyActivation> activation = new XmlMetadata<SystemPropertyActivation>(element.getName().toString(), new SystemPropertyActivationImpl(name, value), beansXml, element.getLocation().getLineNumber()); consumer.accept(activation); }
@SuppressWarnings("rawtypes") private String getAttribute(StartElement element, String name) { Iterator attributes = element.getAttributes(); while (attributes.hasNext()) { Attribute attribute = (Attribute) attributes.next(); if (attribute.getName().getLocalPart().equals(name)) { return interpolate(attribute.getValue().trim()); } } return null; }
private boolean isStartElement(XMLEvent event, String name) { return isStartElement(event, name, JAVAEE_URIS); }
XMLEventReader reader = factory.createXMLEventReader(in); StartElement element = nextStartElement(reader, BEANS, JAVAEE_URIS); if (element != null) { parseBeans(element); while (reader.hasNext()) { XMLEvent event = reader.nextEvent(); if (isEnd(event, BEANS)) { break; } else if (isStartElement(event, ALTERNATIVES)) { parseAlternatives(reader, event); } else if (isStartElement(event, INTERCEPTORS)) { parseInterceptors(reader, event); } else if (isStartElement(event, DECORATORS)) { parseDecorators(reader, event); } else if (isStartElement(event, SCAN, SCANNING_URIS)) { parseScan(reader, event); } else if (isStartElement(event, TRIM)) { isTrimmed = true; throw XmlLogger.LOG.parsingError(beansXml, e); return new BeansXmlImpl(orEmpty(selectedAlternatives), orEmpty(selectedAlternativeStereotypes), orEmpty(enabledDecorators), orEmpty(enabledInterceptors), new ScanningImpl(orEmpty(includes), orEmpty(excludes)), beansXml, discoveryMode, version, isTrimmed);
private void parseInterceptors(XMLEventReader reader, XMLEvent event) throws XMLStreamException { if (enabledInterceptors != null) { throw XmlLogger.LOG.multipleInterceptors(beansXml + "@" + event.asStartElement().getLocation().getLineNumber()); } enabledInterceptors = new LinkedList<>(); while (reader.hasNext()) { event = reader.nextEvent(); if (isEnd(event, INTERCEPTORS)) { return; } else if (event.isStartElement()) { StartElement element = event.asStartElement(); if (isStartElement(element, CLASS)) { enabledInterceptors.add(new XmlMetadata<String>(element.getName().toString(), getTrimmedElementText(reader), beansXml, element.getLocation().getLineNumber())); } } } }
private void handleFilter(StartElement filterElement, XMLEventReader reader, Consumer<XmlMetadata<Filter>> consumer) throws XMLStreamException { String name = getAttribute(filterElement, NAME_ATTRIBUTE_NAME); String pattern = name != null ? null : getAttribute(filterElement, PATTERN_ATTRIBUTE_NAME); if (name != null || pattern != null) { List<Metadata<SystemPropertyActivation>> systemPropertyActivations = new LinkedList<>(); List<Metadata<ClassAvailableActivation>> classAvailableActivations = new LinkedList<>(); while (reader.hasNext()) { XMLEvent event = reader.nextEvent(); if (isEnd(event, EXCLUDE, SCANNING_URIS) || isEnd(event, INCLUDE, SCANNING_URIS)) { Filter filter; if (filterElement.getName().getNamespaceURI().equals(WELD_URI)) { filter = new WeldFilterImpl(name, systemPropertyActivations, classAvailableActivations, pattern); } else { filter = new FilterImpl(name, systemPropertyActivations, classAvailableActivations); } consumer.accept(new XmlMetadata<Filter>(filterElement.getName().toString(), filter, beansXml, filterElement.getLocation().getLineNumber())); return; } else if (event.isStartElement()) { StartElement element = (StartElement) event; if (isStartElement(element, IF_CLASS_AVAILABLE, SCANNING_URIS)) { classAvailable(element, classAvailableActivations::add, false); } else if (isStartElement(element, IF_CLASS_NOT_AVAILABLE, SCANNING_URIS)) { classAvailable(element, classAvailableActivations::add, true); } else if (isStartElement(element, IF_SYSTEM_PROPERTY, SCANNING_URIS)) { systemProperty(element, systemPropertyActivations::add); } } } } }
private void parseScan(XMLEventReader reader, XMLEvent event) throws XMLStreamException { if (excludes != null) { throw XmlLogger.LOG.multipleScanning(beansXml + "@" + event.asStartElement().getLocation().getLineNumber()); } excludes = new LinkedList<>(); includes = new LinkedList<>(); while (reader.hasNext()) { event = reader.nextEvent(); if (isEnd(event, SCAN)) { return; } else if (event.isStartElement()) { StartElement element = (StartElement) event; if (isStartElement(element, EXCLUDE, SCANNING_URIS)) { handleFilter(element, reader, excludes::add); } else if (isStartElement(element, INCLUDE, SCANNING_URIS)) { handleFilter(element, reader, includes::add); } } } }
private boolean isEnd(XMLEvent event, String name, Set<String> namespaces) { if (event.isEndElement()) { EndElement element = (EndElement) event; return isLocalName(element.getName(), name) && isInNamespace(element.getName(), namespaces); } return false; }
private StartElement nextStartElement(XMLEventReader reader, String localName, Set<String> namespaces) throws XMLStreamException { StartElement startElement = nextStartElement(reader); if (startElement != null && localName.equals(startElement.getName().getLocalPart()) && isInNamespace(startElement.getName(), namespaces)) { return startElement; } return null; }
private void systemProperty(StartElement element, Consumer<Metadata<SystemPropertyActivation>> consumer) { String name = getAttribute(element, NAME_ATTRIBUTE_NAME); String value = getAttribute(element, VALUE_ATTRIBUTE_NAME); Metadata<SystemPropertyActivation> activation = new XmlMetadata<SystemPropertyActivation>(element.getName().toString(), new SystemPropertyActivationImpl(name, value), beansXml, element.getLocation().getLineNumber()); consumer.accept(activation); }
@SuppressWarnings("rawtypes") private String getAttribute(StartElement element, String name) { Iterator attributes = element.getAttributes(); while (attributes.hasNext()) { Attribute attribute = (Attribute) attributes.next(); if (attribute.getName().getLocalPart().equals(name)) { return interpolate(attribute.getValue().trim()); } } return null; }