List of usage examples for javax.xml.stream.events XMLEvent asStartElement
public StartElement asStartElement();
From source file:ca.uhn.fhir.parser.XmlParser.java
private <T> T doXmlLoop(XMLEventReader streamReader, ParserState<T> parserState) { ourLog.trace("Entering XML parsing loop with state: {}", parserState); try {/*from ww w .jav a2 s .c o m*/ List<String> heldComments = new ArrayList<String>(1); while (streamReader.hasNext()) { XMLEvent nextEvent = streamReader.nextEvent(); try { switch (nextEvent.getEventType()) { case XMLStreamConstants.START_ELEMENT: { StartElement elem = nextEvent.asStartElement(); String namespaceURI = elem.getName().getNamespaceURI(); if ("extension".equals(elem.getName().getLocalPart())) { Attribute urlAttr = elem.getAttributeByName(new QName("url")); String url; if (urlAttr == null || isBlank(urlAttr.getValue())) { getErrorHandler().missingRequiredElement(new ParseLocation("extension"), "url"); url = null; } else { url = urlAttr.getValue(); } parserState.enteringNewElementExtension(elem, url, false); } else if ("modifierExtension".equals(elem.getName().getLocalPart())) { Attribute urlAttr = elem.getAttributeByName(new QName("url")); String url; if (urlAttr == null || isBlank(urlAttr.getValue())) { getErrorHandler().missingRequiredElement(new ParseLocation("modifierExtension"), "url"); url = null; } else { url = urlAttr.getValue(); } parserState.enteringNewElementExtension(elem, url, true); } else { String elementName = elem.getName().getLocalPart(); parserState.enteringNewElement(namespaceURI, elementName); } if (!heldComments.isEmpty()) { for (String next : heldComments) { parserState.commentPre(next); } heldComments.clear(); } @SuppressWarnings("unchecked") Iterator<Attribute> attributes = elem.getAttributes(); for (Iterator<Attribute> iter = attributes; iter.hasNext();) { Attribute next = iter.next(); parserState.attributeValue(next.getName().getLocalPart(), next.getValue()); } break; } case XMLStreamConstants.END_DOCUMENT: case XMLStreamConstants.END_ELEMENT: { if (!heldComments.isEmpty()) { for (String next : heldComments) { parserState.commentPost(next); } heldComments.clear(); } parserState.endingElement(); // if (parserState.isComplete()) { // return parserState.getObject(); // } break; } case XMLStreamConstants.CHARACTERS: { parserState.string(nextEvent.asCharacters().getData()); break; } case XMLStreamConstants.COMMENT: { Comment comment = (Comment) nextEvent; String commentText = comment.getText(); heldComments.add(commentText); break; } } parserState.xmlEvent(nextEvent); } catch (DataFormatException e) { throw new DataFormatException("DataFormatException at [" + nextEvent.getLocation().toString() + "]: " + e.getMessage(), e); } } return parserState.getObject(); } catch (XMLStreamException e) { throw new DataFormatException(e); } }
From source file:edu.unc.lib.dl.util.TripleStoreQueryServiceMulgaraImpl.java
/** * @param query//from w ww. j a va 2 s .c o m * an ITQL command * @return the message returned by Mulgara * @throws RemoteException * for communication failure */ public String storeCommand(String query) { String result = null; String response = this.sendTQL(query); if (response != null) { XMLInputFactory factory = XMLInputFactory.newInstance(); factory.setProperty(XMLInputFactory.IS_COALESCING, Boolean.TRUE); try (StringReader sr = new StringReader(response)) { XMLEventReader r = factory.createXMLEventReader(sr); boolean inMessage = false; StringBuffer message = new StringBuffer(); while (r.hasNext()) { XMLEvent e = r.nextEvent(); if (e.isStartElement()) { StartElement s = e.asStartElement(); if ("message".equals(s.getName().getLocalPart())) { inMessage = true; } } else if (e.isEndElement()) { EndElement end = e.asEndElement(); if ("message".equals(end.getName().getLocalPart())) { inMessage = false; } } else if (inMessage && e.isCharacters()) { message.append(e.asCharacters().getData()); } } r.close(); result = message.toString(); } catch (XMLStreamException e) { e.printStackTrace(); } } return result; }
From source file:com.prowidesoftware.swift.model.mx.XmlEventWriter.java
public void add(final XMLEvent event) throws XMLStreamException { if (event != null) { log.finest("XmlEventType: " + event.getEventType()); try {/*from ww w . jav a 2 s .c o m*/ final int type = event.getEventType(); switch (type) { case XMLEvent.START_DOCUMENT: if (this.includeXMLDeclaration) { log.finer(">> START_DOCUMENT"); log.finer("START_DOCUMENT XMLEvent " + ToStringBuilder.reflectionToString(event)); final String str = "<?xml version=\"1.0\" encoding=\"" + ((StartDocument) event).getCharacterEncodingScheme() + "\"?>"; out.write(str); logStep(str); } else { log.finer("skipping xml declaration"); } break; case XMLEvent.START_ELEMENT: this.startElementCount++; closeStartTagIfNeeded(); log.finer(">> START_ELEMENT"); indent.append(' '); final StartElement se = event.asStartElement(); @SuppressWarnings("rawtypes") final Iterator it = se.getNamespaces(); while (it.hasNext()) { log.fine("ns: " + it.next()); } /*--------------------------------------------------------------------------------------- * 2015.03 miguel * Cuidado con esta condicion! esto generaba el bug de que no abria el Document anidado dentro del xs:any * Esto es porque este document delayed solo se completa cuando recibe un namespace, pensado como elemento inicial * esto DEEEEBEEEEEEEEEEe corregirse cuando se cambie la serializacion, si se cambia * porque si el document queda dentro de un elemento payload, entonces en count es != 1 y debe revisarse como se identifica el primer * document y un document anidado. * */ if (StringUtils.equals(se.getName().getLocalPart(), this.rootElement) && this.startElementCount == 1) { // 2015.03 miguel: ESTE era el bug de esprow, que aparecian tags anidados de document cerrando que no abria, era porque entraban por aca sin esta condicion de depth count delayedStart = se; log.finer("local part is Document, initializing delayed start, startElementCount=" + this.startElementCount); } else { final String s = "\n" + indent + "<" + prefix() + se.getName().getLocalPart() /* + ">" */; out.write(s); logStep(s); /* 2014.11 miguel * para soportar atributos en lugar de cerrar aca seteamos un flag para indicar * que hace falta cerrar el startTag */ startTagIncomplete = true; if (se.isNamespace()) { log.fine("is ns in start XMLEvent " + ToStringBuilder.reflectionToString(event)); } } break; case XMLEvent.NAMESPACE: log.finer(">> NAMESPACE"); final Namespace ne = (Namespace) event; if (delayedStart != null) { final String s = "\n" + indent + "<" + prefix() + delayedStart.getName().getLocalPart() + " " + "xmlns" + (this.prefix != null ? ":" + this.prefix : "") + "=\"" + ne.getValue() + "\" xmlns:xsi=\"" + ne.getName() + "\"" + ">"; out.write(s); logStep(s); delayedStart = null; } else { log.fine("NAMESPACE XMLEvent " + ToStringBuilder.reflectionToString(event)); } break; case XMLEvent.CHARACTERS: log.finer(">> CHARACTERS"); closeStartTagIfNeeded(); final Characters ce = event.asCharacters(); final char[] arr = ce.getData().toCharArray(); out.write(escape(arr)); logStep(ce.getData()); break; case XMLEvent.END_ELEMENT: log.finer(">> END_ELEMENT"); closeStartTagIfNeeded(); indent.deleteCharAt(0); final EndElement ee = event.asEndElement(); final String str2 = "</" + prefix() + ee.getName().getLocalPart() + ">\n" + indent; out.write(str2); logStep(str2); break; case XMLEvent.END_DOCUMENT: log.finer(">> END_DOCUMENT"); closeStartTagIfNeeded(); /* 2014.10 miguel * No need to do anything while writing to a string */ log.finer("END_DOCUMENT XMLEvent " + ToStringBuilder.reflectionToString(event)); break; case XMLEvent.ATTRIBUTE: log.finer(">> ATTRIBUTE"); final Attribute a = (Attribute) event; final String str3 = " " + a.getName() + "=\"" + a.getValue() + "\" "; out.write(str3); log.fine(ToStringBuilder.reflectionToString(a)); logStep(str3); break; default: log.info("getEventType " + event.getEventType()); log.info("PW Unhandled XMLEvent " + ToStringBuilder.reflectionToString(event)); break; } } catch (IOException e) { log.log(Level.SEVERE, "PW I/O error: " + e); log.log(Level.FINER, "PW I/O error: ", e); throw new XMLStreamException(e); } } }
From source file:eu.delving.sip.xml.SourceConverter.java
public void parse(InputStream inputStream, OutputStream outputStream, Map<String, String> namespaces) throws StorageException { progressListener.prepareFor(totalRecords); // anonymousRecords = Integer.parseInt(System.getProperty(ANONYMOUS_RECORDS_PROPERTY, "0")); Path path = Path.create(); try {/*from w w w. j a v a 2 s .c o m*/ XMLEventReader in = inputFactory.createXMLEventReader(new StreamSource(inputStream, "UTF-8")); XMLEventWriter out = outputFactory.createXMLEventWriter(new OutputStreamWriter(outputStream, "UTF-8")); processEvents: while (!finished) { XMLEvent event = in.nextEvent(); switch (event.getEventType()) { case XMLEvent.START_DOCUMENT: out.add(eventFactory.createStartDocument()); out.add(eventFactory.createCharacters("\n")); List<Namespace> nslist = new ArrayList<Namespace>(); for (Map.Entry<String, String> entry : namespaces.entrySet()) { if (entry.getKey().isEmpty() || entry.getValue().trim().isEmpty()) continue; if (XSI_SCHEMA.equals(entry.getValue())) continue; nslist.add(eventFactory.createNamespace(entry.getKey(), entry.getValue())); } out.add(eventFactory.createStartElement("", "", ENVELOPE_TAG, null, nslist.iterator())); out.add(eventFactory.createCharacters("\n")); break; case XMLEvent.START_ELEMENT: boolean followsStart = start != null; start = event.asStartElement(); if (linesAvailable()) { eventBuffer.add(eventFactory.createCharacters("\n")); eventBuffer.add(eventFactory.createStartElement("", "", TEXT_TAG, null, null)); Iterator<String> walk = lines.iterator(); while (walk.hasNext()) { eventBuffer.add(eventFactory.createCharacters(walk.next())); if (walk.hasNext()) { eventBuffer.add(eventFactory.createEndElement("", "", TEXT_TAG)); eventBuffer.add(eventFactory.createCharacters("\n")); eventBuffer.add(eventFactory.createStartElement("", "", TEXT_TAG, null, null)); } } eventBuffer.add(eventFactory.createEndElement("", "", TEXT_TAG)); lines.clear(); } path = path.child(Tag.element(start.getName())); handleStartElement(path, followsStart); progressListener.setProgress(recordCount); break; case XMLEvent.END_ELEMENT: EndElement end = event.asEndElement(); if (recordEvents) { if (path.equals(recordRootPath)) { if (unique != null) { outputRecord(out); recordCount++; } else { clearEvents(); } } else { if (!uniqueElementPath.peek().isAttribute() && path.equals(uniqueElementPath)) { unique = StringUtils.join(lines, ""); } boolean addEndTag = true; if (linesAvailable()) { Iterator<String> walk = lines.iterator(); while (walk.hasNext()) { eventBuffer.add(eventFactory.createCharacters(walk.next())); if (walk.hasNext()) { eventBuffer.add(end); eventBuffer.add(eventFactory.createCharacters("\n")); handleStartElement(path, false); } } } else { if (eventBuffer.get(eventBuffer.size() - 1).isStartElement()) { eventBuffer.remove(eventBuffer.size() - 1); // remove the start event addEndTag = false; } } lines.clear(); if (addEndTag) { eventBuffer.add(end); eventBuffer.add(eventFactory.createCharacters("\n")); } } } start = null; path = path.parent(); break; case XMLEvent.END_DOCUMENT: out.add(eventFactory.createEndElement("", "", ENVELOPE_TAG)); out.add(eventFactory.createCharacters("\n")); out.add(eventFactory.createEndDocument()); out.flush(); break processEvents; case XMLEvent.CHARACTERS: case XMLEvent.CDATA: if (recordEvents) extractLines(event.asCharacters().getData()); break; } } } catch (CancelException e) { throw new StorageException("Cancelled", e); } catch (StorageException e) { throw e; } catch (Exception e) { throw new StorageException("Storage problem", e); } finally { if (uniqueRepeatCount > 0) { progressListener.getFeedback().alert(String.format("Uniqueness violations : " + uniqueRepeatCount)); } IOUtils.closeQuietly(inputStream); IOUtils.closeQuietly(outputStream); } }
From source file:de.dfki.km.leech.parser.wikipedia.WikipediaDumpParser.java
@Override public void parse(InputStream stream, ContentHandler handler, Metadata metadata, ParseContext context) throws IOException, SAXException, TikaException { try {//from w ww . j a v a2s . co m // wir iterieren schn ber die page-Eintrge. Darin gibt es dann title, timestamp, <contributor> => <username> und text. den text mssen // wir noch bereinigen. dazu nehmen wir eine Vorverarbeitung mit bliki - dazu mssen wir aber selbst nochmal den String vorbereiten und // nachbereinigen. Leider. WikipediaDumpParserConfig wikipediaDumpParserConfig = context.get(WikipediaDumpParserConfig.class); if (wikipediaDumpParserConfig == null) { Logger.getLogger(WikipediaDumpParser.class.getName()) .info("No wikipedia parser config found. Will take the default one."); wikipediaDumpParserConfig = new WikipediaDumpParserConfig(); } TikaInputStream tikaStream = TikaInputStream.get(stream); File fWikipediaDumpFile4Stream = tikaStream.getFile(); MultiValueHashMap<String, String> hsPageTitle2Redirects = new MultiValueHashMap<String, String>(); if (wikipediaDumpParserConfig.determinePageRedirects) hsPageTitle2Redirects = getPageTitle2Redirects(new FileInputStream(fWikipediaDumpFile4Stream)); HashSet<String> hsRedirectPageTitles = new HashSet<String>(hsPageTitle2Redirects.values()); String strCleanedText = ""; String strBaseURL = null; XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); XMLEventReader xmlEventReader = xmlInputFactory .createXMLEventReader(new FileInputStream(fWikipediaDumpFile4Stream), "Utf-8"); while (xmlEventReader.hasNext()) { XMLEvent xmlEvent = xmlEventReader.nextEvent(); if (xmlEvent.isEndElement() && xmlEvent.asEndElement().getName().getLocalPart().equals("page")) { if (metadata.size() == 0) continue; // den mimetype wollen wir auch noch in den Metadaten haben metadata.add(Metadata.CONTENT_TYPE, "application/wikipedia+xml"); XHTMLContentHandler xhtml = new XHTMLContentHandler(handler, metadata); xhtml.startDocument(); xhtml.startElement("p"); xhtml.characters(strCleanedText.toCharArray(), 0, strCleanedText.length()); xhtml.endElement("p"); xhtml.endDocument(); } if (!xmlEvent.isStartElement()) continue; // ##### die siteinfo if (strBaseURL == null && xmlEvent.asStartElement().getName().getLocalPart().equals("base")) { // http://de.wikipedia.org/wiki/Wikipedia:Hauptseite =>http://de.wikipedia.org/wiki/ strBaseURL = readNextCharEventsText(xmlEventReader); strBaseURL = strBaseURL.substring(0, strBaseURL.lastIndexOf("/") + 1); } // ##### die page if (xmlEvent.asStartElement().getName().getLocalPart().equals("page")) { for (String strKey : metadata.names()) metadata.remove(strKey); } // ##### der Title if (xmlEvent.asStartElement().getName().getLocalPart().equals("title")) { // wir merken uns immer den aktuellen Titel String strCurrentTitle = readNextCharEventsText(xmlEventReader); if (strCurrentTitle.equalsIgnoreCase("DuckDuckGo")) { int fasd = 8; } if (strCurrentTitle.toLowerCase().contains("duck") && strCurrentTitle.toLowerCase().contains("go")) { int is = 666; } // wenn der Titel eine redirect-Page ist, dann tragen wir die ganze Page aus der EventQueue aus, springen an das endPage, und // haben somit diese Seite ignoriert. Ferner ignorieren wir auch spezielle wikipedia-Seiten String strSmallTitle = strCurrentTitle.trim().toLowerCase(); if (hsRedirectPageTitles.contains(strCurrentTitle) || hsRedirectPageTitles.contains(strSmallTitle) || hsRedirectPageTitles.contains(strCurrentTitle.trim()) || strSmallTitle.startsWith("category:") || strSmallTitle.startsWith("kategorie:") || strSmallTitle.startsWith("vorlage:") || strSmallTitle.startsWith("template:") || strSmallTitle.startsWith("hilfe:") || strSmallTitle.startsWith("help:") || strSmallTitle.startsWith("wikipedia:") || strSmallTitle.startsWith("portal:") || strSmallTitle.startsWith("mediawiki:")) { while (true) { XMLEvent nextXmlEvent = xmlEventReader.nextEvent(); if (nextXmlEvent.isEndElement() && nextXmlEvent.asEndElement().getName().getLocalPart().equals("page")) break; } } else { metadata.add(Metadata.TITLE, strCurrentTitle); metadata.add(Metadata.SOURCE, strBaseURL + strCurrentTitle); for (String strRedirect : hsPageTitle2Redirects.get(strCurrentTitle)) { // wir ignorieren Titel, die sich lediglich durch gro/kleinschreibung unterscheiden if (!StringUtils.containsIgnoreCase(strRedirect, metadata.getValues(Metadata.TITLE))) metadata.add(Metadata.TITLE, strRedirect); } } continue; } // ##### der text if (xmlEvent.asStartElement().getName().getLocalPart().equals("text")) { String strText = readNextCharEventsText(xmlEventReader); if (wikipediaDumpParserConfig.parseLinksAndCategories) parseLinksAndCategories(strText, strBaseURL, metadata, handler); if (wikipediaDumpParserConfig.parseInfoBoxes) parseInfoBox(strText, metadata, handler); if (wikipediaDumpParserConfig.parseGeoCoordinates) parseGeoCoordinates(strText, metadata); // aufgrund einiger Defizite in dem verwendeten cleaner mssen wir hier leider noch zu-und nacharbeiten strText = strText.replaceAll("==\n", "==\n\n"); strText = strText.replaceAll("\n==", "\n\n=="); strCleanedText = m_wikiModel.render(new PlainTextConverter(), strText); strCleanedText = strCleanedText.replaceAll("\\{\\{", " "); strCleanedText = strCleanedText.replaceAll("\\}\\}", " "); strCleanedText = StringEscapeUtils.unescapeHtml4(strCleanedText); continue; } // ##### der timestamp if (xmlEvent.asStartElement().getName().getLocalPart().equals("timestamp")) { String strTimestamp = readNextCharEventsText(xmlEventReader); metadata.add(Metadata.MODIFIED, strTimestamp); continue; } // ##### der username if (xmlEvent.asStartElement().getName().getLocalPart().equals("username")) { String strUsername = readNextCharEventsText(xmlEventReader); metadata.add(Metadata.CREATOR, strUsername); continue; } } } catch (Exception e) { Logger.getLogger(WikipediaDumpParser.class.getName()).log(Level.SEVERE, "Error", e); } }
From source file:ca.uhn.fhir.parser.XmlParser.java
private void encodeXhtml(XhtmlDt theDt, XMLStreamWriter theEventWriter) throws XMLStreamException { if (theDt == null || theDt.getValue() == null) { return;// ww w . jav a 2s .co m } boolean firstElement = true; for (XMLEvent event : theDt.getValue()) { switch (event.getEventType()) { case XMLStreamConstants.ATTRIBUTE: Attribute attr = (Attribute) event; if (isBlank(attr.getName().getPrefix())) { if (isBlank(attr.getName().getNamespaceURI())) { theEventWriter.writeAttribute(attr.getName().getLocalPart(), attr.getValue()); } else { theEventWriter.writeAttribute(attr.getName().getNamespaceURI(), attr.getName().getLocalPart(), attr.getValue()); } } else { theEventWriter.writeAttribute(attr.getName().getPrefix(), attr.getName().getNamespaceURI(), attr.getName().getLocalPart(), attr.getValue()); } break; case XMLStreamConstants.CDATA: theEventWriter.writeCData(((Characters) event).getData()); break; case XMLStreamConstants.CHARACTERS: case XMLStreamConstants.SPACE: String data = ((Characters) event).getData(); theEventWriter.writeCharacters(data); break; case XMLStreamConstants.COMMENT: theEventWriter.writeComment(((Comment) event).getText()); break; case XMLStreamConstants.END_ELEMENT: theEventWriter.writeEndElement(); break; case XMLStreamConstants.ENTITY_REFERENCE: EntityReference er = (EntityReference) event; theEventWriter.writeEntityRef(er.getName()); break; case XMLStreamConstants.NAMESPACE: Namespace ns = (Namespace) event; theEventWriter.writeNamespace(ns.getPrefix(), ns.getNamespaceURI()); break; case XMLStreamConstants.START_ELEMENT: StartElement se = event.asStartElement(); if (firstElement) { if (StringUtils.isBlank(se.getName().getPrefix())) { String namespaceURI = se.getName().getNamespaceURI(); if (StringUtils.isBlank(namespaceURI)) { namespaceURI = "http://www.w3.org/1999/xhtml"; } theEventWriter.writeStartElement(se.getName().getLocalPart()); theEventWriter.writeDefaultNamespace(namespaceURI); } else { String prefix = se.getName().getPrefix(); String namespaceURI = se.getName().getNamespaceURI(); theEventWriter.writeStartElement(prefix, se.getName().getLocalPart(), namespaceURI); theEventWriter.writeNamespace(prefix, namespaceURI); } firstElement = false; } else { if (isBlank(se.getName().getPrefix())) { if (isBlank(se.getName().getNamespaceURI())) { theEventWriter.writeStartElement(se.getName().getLocalPart()); } else { if (StringUtils.isBlank(se.getName().getPrefix())) { theEventWriter.writeStartElement(se.getName().getLocalPart()); // theEventWriter.writeDefaultNamespace(se.getName().getNamespaceURI()); } else { theEventWriter.writeStartElement(se.getName().getNamespaceURI(), se.getName().getLocalPart()); } } } else { theEventWriter.writeStartElement(se.getName().getPrefix(), se.getName().getLocalPart(), se.getName().getNamespaceURI()); } for (Iterator<?> attrIter = se.getAttributes(); attrIter.hasNext();) { Attribute next = (Attribute) attrIter.next(); theEventWriter.writeAttribute(next.getName().getLocalPart(), next.getValue()); } } break; case XMLStreamConstants.DTD: case XMLStreamConstants.END_DOCUMENT: case XMLStreamConstants.ENTITY_DECLARATION: case XMLStreamConstants.NOTATION_DECLARATION: case XMLStreamConstants.PROCESSING_INSTRUCTION: case XMLStreamConstants.START_DOCUMENT: break; } } }
From source file:nl.nn.adapterframework.validation.XSD.java
public void init() throws ConfigurationException { if (noNamespaceSchemaLocation != null) { url = ClassUtils.getResourceURL(classLoader, noNamespaceSchemaLocation); if (url == null) { throw new ConfigurationException("Cannot find [" + noNamespaceSchemaLocation + "]"); }//from w ww . j a va 2 s . co m resourceTarget = noNamespaceSchemaLocation; toString = noNamespaceSchemaLocation; } else { if (resource != null) { url = ClassUtils.getResourceURL(classLoader, resource); if (url == null) { throw new ConfigurationException("Cannot find [" + resource + "]"); } resourceTarget = resource; toString = resource; if (resourceInternalReference != null) { resourceTarget = resourceTarget + "-" + resourceInternalReference + ".xsd"; toString = toString + "!" + resourceInternalReference; } } else if (sourceXsds == null) { throw new ConfigurationException( "None of noNamespaceSchemaLocation, resource or mergedResources is specified"); } else { resourceTarget = "["; toString = "["; boolean first = true; for (XSD xsd : sourceXsds) { if (first) { first = false; } else { resourceTarget = resourceTarget + ", "; toString = toString + ", "; } resourceTarget = resourceTarget + xsd.getResourceTarget().replaceAll("/", "_"); toString = toString + xsd.toString(); } resourceTarget = resourceTarget + "].xsd"; toString = toString + "]"; } if (parentLocation == null) { this.parentLocation = ""; } } try { InputStream in = getInputStream(); XMLEventReader er = XmlUtils.INPUT_FACTORY.createXMLEventReader(in, XmlUtils.STREAM_FACTORY_ENCODING); int elementDepth = 0; while (er.hasNext()) { XMLEvent e = er.nextEvent(); switch (e.getEventType()) { case XMLStreamConstants.START_ELEMENT: elementDepth++; StartElement el = e.asStartElement(); if (el.getName().equals(SchemaUtils.SCHEMA)) { Attribute a = el.getAttributeByName(SchemaUtils.TNS); if (a != null) { xsdTargetNamespace = a.getValue(); } Iterator<Namespace> nsIterator = el.getNamespaces(); while (nsIterator.hasNext() && StringUtils.isEmpty(xsdDefaultNamespace)) { Namespace ns = nsIterator.next(); if (StringUtils.isEmpty(ns.getPrefix())) { xsdDefaultNamespace = ns.getNamespaceURI(); } } } else if (el.getName().equals(SchemaUtils.IMPORT)) { Attribute a = el.getAttributeByName(SchemaUtils.NAMESPACE); if (a != null) { boolean skip = false; ArrayList ans = null; if (StringUtils.isNotEmpty(getImportedNamespacesToIgnore())) { ans = new ArrayList(Arrays.asList(getImportedNamespacesToIgnore().split(","))); } if (StringUtils.isNotEmpty(a.getValue()) && ans != null) { if (ans.contains(a.getValue())) { skip = true; } } if (!skip) { importedNamespaces.add(a.getValue()); } } } else if (el.getName().equals(SchemaUtils.ELEMENT)) { if (elementDepth == 2) { rootTags.add(el.getAttributeByName(SchemaUtils.NAME).getValue()); } } break; case XMLStreamConstants.END_ELEMENT: elementDepth--; break; } } this.targetNamespace = xsdTargetNamespace; if (namespace == null) { // In case WsdlXmlValidator doesn't have schemaLocation namespace = xsdTargetNamespace; } } catch (IOException e) { String message = "IOException reading XSD"; LOG.error(message, e); throw new ConfigurationException(message, e); } catch (XMLStreamException e) { String message = "XMLStreamException reading XSD"; LOG.error(message, e); throw new ConfigurationException(message, e); } }
From source file:nl.nn.adapterframework.validation.XSD.java
public Set<XSD> getXsdsRecursive(Set<XSD> xsds, boolean ignoreRedefine) throws ConfigurationException { try {//from w ww .j a v a 2 s .c o m InputStream in = getInputStream(); if (in == null) return null; XMLEventReader er = XmlUtils.INPUT_FACTORY.createXMLEventReader(in, XmlUtils.STREAM_FACTORY_ENCODING); while (er.hasNext()) { XMLEvent e = er.nextEvent(); switch (e.getEventType()) { case XMLStreamConstants.START_ELEMENT: StartElement el = e.asStartElement(); if (el.getName().equals(SchemaUtils.IMPORT) || el.getName().equals(SchemaUtils.INCLUDE) || (el.getName().equals(SchemaUtils.REDEFINE) && !ignoreRedefine)) { Attribute schemaLocationAttribute = el.getAttributeByName(SchemaUtils.SCHEMALOCATION); Attribute namespaceAttribute = el.getAttributeByName(SchemaUtils.NAMESPACE); String namespace = this.namespace; boolean addNamespaceToSchema = this.addNamespaceToSchema; if (el.getName().equals(SchemaUtils.IMPORT)) { if (namespaceAttribute == null && StringUtils.isEmpty(xsdDefaultNamespace) && StringUtils.isNotEmpty(xsdTargetNamespace)) { //TODO: concerning import without namespace when in head xsd default namespace doesn't exist and targetNamespace does) namespace = null; } else { if (namespaceAttribute != null) { namespace = namespaceAttribute.getValue(); } else { namespace = targetNamespace; } } } if (schemaLocationAttribute != null) { boolean skip = false; if (el.getName().equals(SchemaUtils.IMPORT) && namespaceAttribute == null) { if (StringUtils.isNotEmpty(xsdDefaultNamespace) && StringUtils.isNotEmpty(xsdTargetNamespace)) { //ignore import without namespace when in head xsd default namespace and targetNamespace exists) skip = true; } } if (!skip) { String sl = schemaLocationAttribute.getValue(); ArrayList aslti = null; if (StringUtils.isNotEmpty(getImportedSchemaLocationsToIgnore())) { aslti = new ArrayList( Arrays.asList(getImportedSchemaLocationsToIgnore().split(","))); } if (StringUtils.isNotEmpty(sl) && aslti != null) { if (isUseBaseImportedSchemaLocationsToIgnore()) { sl = FilenameUtils.getName(sl); } if (aslti.contains(sl)) { skip = true; } } } if (!skip) { ArrayList ans = null; if (StringUtils.isNotEmpty(getImportedNamespacesToIgnore())) { ans = new ArrayList(Arrays.asList(getImportedNamespacesToIgnore().split(","))); } if (StringUtils.isNotEmpty(namespace) && ans != null) { if (ans.contains(namespace)) { skip = true; } } } if (!skip) { XSD x = new XSD(); x.setClassLoader(classLoader); x.setNamespace(namespace); x.setResource(getResourceBase() + schemaLocationAttribute.getValue()); x.setAddNamespaceToSchema(addNamespaceToSchema); x.setImportedSchemaLocationsToIgnore(getImportedSchemaLocationsToIgnore()); x.setUseBaseImportedSchemaLocationsToIgnore( isUseBaseImportedSchemaLocationsToIgnore()); x.setImportedNamespacesToIgnore(getImportedNamespacesToIgnore()); x.setParentLocation(getResourceBase()); x.setRootXsd(false); x.init(); if (xsds.add(x)) { x.getXsdsRecursive(xsds, ignoreRedefine); } } } } break; } } } catch (IOException e) { String message = "IOException reading XSD"; LOG.error(message, e); throw new ConfigurationException(message, e); } catch (XMLStreamException e) { String message = "XMLStreamException reading XSD"; LOG.error(message, e); throw new ConfigurationException(message, e); } return xsds; }
From source file:org.apache.hadoop.gateway.filter.rewrite.impl.xml.XmlFilterReader.java
private void processEvent(XMLEvent event) throws ParserConfigurationException, XPathExpressionException, IOException, XMLStreamException { int type = event.getEventType(); switch (type) { case XMLEvent.START_DOCUMENT: processStartDocument((StartDocument) event); break;//from w ww . j a va2 s. co m case XMLEvent.END_DOCUMENT: processEndDocument(); break; case XMLEvent.START_ELEMENT: if (parser.peek().getEventType() == XMLEvent.END_ELEMENT) isEmptyElement = true; processStartElement(event.asStartElement()); break; case XMLEvent.END_ELEMENT: processEndElement(event.asEndElement()); isEmptyElement = false; break; case XMLEvent.CHARACTERS: case XMLEvent.CDATA: case XMLEvent.SPACE: processCharacters(event.asCharacters()); break; case XMLEvent.COMMENT: processComment((Comment) event); break; case XMLEvent.DTD: case XMLEvent.NAMESPACE: case XMLEvent.ATTRIBUTE: case XMLEvent.ENTITY_REFERENCE: case XMLEvent.ENTITY_DECLARATION: case XMLEvent.NOTATION_DECLARATION: case XMLEvent.PROCESSING_INSTRUCTION: default: // Fail if we run into any of these for now. throw new IllegalStateException(Integer.toString(type)); } }
From source file:org.apache.hadoop.hdfs.tools.offlineImageViewer.OfflineImageReconstructor.java
/** * Read the next tag start or end event. * * @param expected The name of the next tag we expect. * We will validate that the tag has this name, * unless this string is enclosed in braces. * @param allowEnd If true, we will also end events. * If false, end events cause an exception. * * @return The next tag start or end event. *//*from w w w. j av a 2s . co m*/ private XMLEvent expectTag(String expected, boolean allowEnd) throws IOException { XMLEvent ev = null; while (true) { try { ev = events.nextEvent(); } catch (XMLStreamException e) { throw new IOException("Expecting " + expected + ", but got XMLStreamException", e); } switch (ev.getEventType()) { case XMLEvent.ATTRIBUTE: throw new IOException("Got unexpected attribute: " + ev); case XMLEvent.CHARACTERS: if (!ev.asCharacters().isWhiteSpace()) { throw new IOException("Got unxpected characters while " + "looking for " + expected + ": " + ev.asCharacters().getData()); } break; case XMLEvent.END_ELEMENT: if (!allowEnd) { throw new IOException("Got unexpected end event " + "while looking for " + expected); } return ev; case XMLEvent.START_ELEMENT: if (!expected.startsWith("[")) { if (!ev.asStartElement().getName().getLocalPart().equals(expected)) { throw new IOException("Failed to find <" + expected + ">; " + "got " + ev.asStartElement().getName().getLocalPart() + " instead."); } } return ev; default: // Ignore other event types like comment, etc. if (LOG.isTraceEnabled()) { LOG.trace("Skipping XMLEvent of type " + ev.getEventType() + "(" + ev + ")"); } break; } } }