List of usage examples for javax.xml.stream.events XMLEvent isStartElement
public boolean isStartElement();
From source file:org.qi4j.valueserialization.stax.StaxValueDeserializer.java
@Override protected <K, V> Map<K, V> readMapInMap(XMLEventReader input, Function<XMLEventReader, K> keyDeserializer, Function<XMLEventReader, V> valueDeserializer, Map<K, V> map) throws Exception { if (!input.hasNext()) { return null; }/*from w ww . j a va2s. c o m*/ XMLEvent nextTag = input.nextTag(); if (nextTag.isStartElement() && "null".equals(nextTag.asStartElement().getName().getLocalPart())) { input.nextTag(); return null; } if (!nextTag.isStartElement() || !"array".equals(nextTag.asStartElement().getName().getLocalPart())) { throw new ValueSerializationException("Expected an <array/> but got: " + nextTag); } XMLEvent currentTag = input.nextTag(); // <object> while (!currentTag.isEndElement() || !"array".equals(currentTag.asEndElement().getName().getLocalPart())) { if (!currentTag.isStartElement() || !"object".equals(currentTag.asStartElement().getName().getLocalPart())) { throw new ValueSerializationException("Expected an <object/> but got: " + nextTag); } currentTag = input.nextTag(); // <field> K key = null; V value = null; while (!currentTag.isEndElement() || !"object".equals(currentTag.asEndElement().getName().getLocalPart())) { input.nextTag(); // <name> String keyOrValue = input.nextEvent().asCharacters().getData(); input.nextTag(); // </name> input.nextTag(); // <value> switch (keyOrValue) { case "key": key = keyDeserializer.map(input); break; case "value": value = valueDeserializer.map(input); break; default: readObjectTree(input); break; } input.nextTag(); // </value> input.nextTag(); // </field> currentTag = input.nextTag(); } if (key != null) { map.put(key, value); } currentTag = input.nextTag(); } return map; }
From source file:org.qi4j.valueserialization.stax.StaxValueDeserializer.java
@Override protected Node readObjectTree(XMLEventReader input) throws Exception { XMLEvent peek = input.peek(); if (peek.isStartElement() && "null".equals(peek.asStartElement().getName().getLocalPart())) { input.nextTag();// <null> input.nextTag();// </null> return null; }/*ww w .j a v a 2s . co m*/ String elementBody = readElementBody(input); Transformer transformer = transformerFactory.newTransformer(); DOMResult domResult = new DOMResult(); transformer.transform(new StreamSource(new StringReader(elementBody)), domResult); return ((Document) domResult.getNode()).getDocumentElement(); }
From source file:org.qi4j.valueserialization.stax.StaxValueDeserializer.java
private static String readElementBody(XMLEventReader input) throws XMLStreamException { StringWriter buf = new StringWriter(1024); int depth = 0; while (input.hasNext()) { // peek event XMLEvent xmlEvent = input.peek(); if (xmlEvent.isStartElement()) { ++depth;//from w w w . j a va 2 s .c om } else if (xmlEvent.isEndElement()) { --depth; // reached END_ELEMENT tag? // break loop, leave event in stream if (depth < 0) { break; } } // consume event xmlEvent = input.nextEvent(); // print out event xmlEvent.writeAsEncodedUnicode(buf); } return buf.getBuffer().toString(); }
From source file:org.sakaiproject.nakamura.auth.cas.CasAuthenticationHandler.java
private String retrieveCredentials(String responseBody) { String username = null;/*from ww w. j a v a2s .c o m*/ String pgtIou = null; String failureCode = null; String failureMessage = null; try { XMLInputFactory xmlInputFactory = new WstxInputFactory(); xmlInputFactory.setProperty(XMLInputFactory.IS_COALESCING, true); xmlInputFactory.setProperty(XMLInputFactory.IS_VALIDATING, false); xmlInputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, true); XMLEventReader eventReader = xmlInputFactory.createXMLEventReader(new StringReader(responseBody)); while (eventReader.hasNext()) { XMLEvent event = eventReader.nextEvent(); // process the event if we're starting an element if (event.isStartElement()) { StartElement startEl = event.asStartElement(); QName startElName = startEl.getName(); String startElLocalName = startElName.getLocalPart(); LOGGER.debug(responseBody); /* * Example of failure XML <cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'> <cas:authenticationFailure code='INVALID_REQUEST'> 'service' and 'ticket' parameters are both required </cas:authenticationFailure> </cas:serviceResponse> */ if ("authenticationFailure".equalsIgnoreCase(startElLocalName)) { // get code of the failure Attribute code = startEl.getAttributeByName(QName.valueOf("code")); failureCode = code.getValue(); // get the message of the failure event = eventReader.nextEvent(); assert event.isCharacters(); Characters chars = event.asCharacters(); failureMessage = chars.getData(); break; } /* * Example of success XML <cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'> <cas:authenticationSuccess> <cas:user>NetID</cas:user> </cas:authenticationSuccess> </cas:serviceResponse> */ if ("authenticationSuccess".equalsIgnoreCase(startElLocalName)) { // skip to the user tag start while (eventReader.hasNext()) { event = eventReader.nextTag(); if (event.isEndElement()) { if (eventReader.hasNext()) { event = eventReader.nextTag(); } else { break; } } assert event.isStartElement(); startEl = event.asStartElement(); startElName = startEl.getName(); startElLocalName = startElName.getLocalPart(); if (proxy && "proxyGrantingTicket".equals(startElLocalName)) { event = eventReader.nextEvent(); assert event.isCharacters(); Characters chars = event.asCharacters(); pgtIou = chars.getData(); LOGGER.debug("XML parser found pgt: {}", pgtIou); } else if ("user".equals(startElLocalName)) { // move on to the body of the user tag event = eventReader.nextEvent(); assert event.isCharacters(); Characters chars = event.asCharacters(); username = chars.getData(); LOGGER.debug("XML parser found user: {}", username); } else { LOGGER.error("Found unexpected element [{}] while inside 'authenticationSuccess'", startElName); break; } if (username != null && (!proxy || pgtIou != null)) { break; } } } } } } catch (XMLStreamException e) { LOGGER.error(e.getMessage(), e); } if (failureCode != null || failureMessage != null) { LOGGER.error("Error response from server code={} message={}", failureCode, failureMessage); } String pgt = pgts.get(pgtIou); if (pgt != null) { savePgt(username, pgt, pgtIou); } else { LOGGER.debug("Caching '{}' as the IOU for '{}'", pgtIou, username); pgtIOUs.put(pgtIou, username); } return username; }
From source file:org.sakaiproject.nakamura.auth.cas.CasAuthenticationHandler.java
private String getProxyTicketFromXml(String responseBody) { String ticket = null;/*from w ww . j a v a2 s . c o m*/ try { XMLInputFactory xmlInputFactory = new WstxInputFactory(); xmlInputFactory.setProperty(XMLInputFactory.IS_COALESCING, true); xmlInputFactory.setProperty(XMLInputFactory.IS_VALIDATING, false); xmlInputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, true); XMLEventReader eventReader = xmlInputFactory.createXMLEventReader(new StringReader(responseBody)); LOGGER.debug(responseBody); while (eventReader.hasNext()) { XMLEvent event = eventReader.nextEvent(); // process the event if we're starting an element if (event.isStartElement()) { StartElement startEl = event.asStartElement(); QName startElName = startEl.getName(); String startElLocalName = startElName.getLocalPart(); // Example XML // <cas:serviceResponse> // <cas:proxySuccess> // <cas:proxyTicket>PT-957-ZuucXqTZ1YcJw81T3dxf</cas:proxyTicket> // </cas:proxySuccess> // </cas:serviceResponse> if ("proxySuccess".equalsIgnoreCase(startElLocalName)) { event = eventReader.nextTag(); assert event.isStartElement(); startEl = event.asStartElement(); startElName = startEl.getName(); startElLocalName = startElName.getLocalPart(); if ("proxyTicket".equalsIgnoreCase(startElLocalName)) { event = eventReader.nextEvent(); assert event.isCharacters(); Characters chars = event.asCharacters(); ticket = chars.getData(); } else { LOGGER.error("Found unexpected element [{}] while inside 'proxySuccess'", startElName); break; } } } } } catch (XMLStreamException e) { LOGGER.error(e.getMessage(), e); } return ticket; }
From source file:org.sakaiproject.nakamura.docproxy.url.UrlRepositoryProcessor.java
/** * Parse search results information into documents. * <p>/*from w w w .ja v a 2 s .c o m*/ * The expected format of the returned information is:<br/> * <code> * <documents> * <document contentLength="%s" contentType="%s" uri="%s"> * <properties> * <key1>value1</key1> * <key2>value2</key2> * </properties> * </document> * </documents> * </code> * </p> * * @param body * @return * @throws JSONException */ protected List<ExternalDocumentResult> parseSearch(InputStream body) throws XMLStreamException { ArrayList<ExternalDocumentResult> results = new ArrayList<ExternalDocumentResult>(); XMLEventReader eventReader = xmlInputFactory.createXMLEventReader(body); while (eventReader.hasNext()) { XMLEvent event = eventReader.nextEvent(); // process the event if we're starting an element if (event.isStartElement()) { StartElement startEl = event.asStartElement(); QName startElName = startEl.getName(); String startElLocalName = startElName.getLocalPart(); // process the href element if ("document".equalsIgnoreCase(startElLocalName)) { results.add(parseDocument(startEl, null)); event = eventReader.nextEvent(); continue; } } } return results; }
From source file:org.sakaiproject.nakamura.docproxy.url.UrlRepositoryProcessor.java
/** * Parse information about a doc from JSON to an {@link ExternalDocumentResult} object.<br/> * XML is expected to follow the format of: * <p>/*from ww w .j a v a 2 s .co m*/ * <code> * <document contentLength="%s" contentType="%s" uri="%s"> * <properties> * <key1>value1</key1> * <key2>value2</key2> * </properties> * </document> * </code> * </p> * * @param is * @return * @throws ParserConfigurationException * @throws IOException * @throws SAXException */ protected ExternalDocumentResult parseDocument(InputStream body) throws XMLStreamException { UrlDocumentResult doc = new UrlDocumentResult(); XMLEventReader eventReader = xmlInputFactory.createXMLEventReader(body); while (eventReader.hasNext()) { XMLEvent event = eventReader.nextEvent(); // process the event if we're starting an element if (event.isStartElement()) { StartElement startEl = event.asStartElement(); QName startElName = startEl.getName(); String startElLocalName = startElName.getLocalPart(); if ("document".equalsIgnoreCase(startElLocalName)) { parseDocument(startEl, doc); continue; } if ("properties".equalsIgnoreCase(startElLocalName)) { parseProperties(eventReader, doc); continue; } } } return doc; }
From source file:org.sakaiproject.nakamura.docproxy.url.UrlRepositoryProcessor.java
/** * Parse subelements of a 'properties' element into properties on a * {@link UrlDocumentResult}.//ww w. j ava2 s.c o m * * @param eventReader * Source to process elements from. Is expected that calls to * eventReader.nextEvent() will yield elements to be added to doc as * properties. Nested elements are not considered. * @param doc * The document to set attributes into. * @throws XMLStreamException * If there is a problem processing the element. */ private void parseProperties(XMLEventReader eventReader, UrlDocumentResult doc) throws XMLStreamException { while (eventReader.hasNext()) { XMLEvent event = eventReader.nextEvent(); // process the event if we're starting an element if (event.isStartElement()) { StartElement startEl = event.asStartElement(); QName startElName = startEl.getName(); String startElLocalName = startElName.getLocalPart(); // collect simple elements as properties event = eventReader.nextEvent(); if (event.isCharacters()) { Characters chars = event.asCharacters(); doc.addProperty(startElLocalName, chars.getData()); } } } }
From source file:org.slc.sli.ingestion.parser.impl.EdfiRecordParserImpl.java
private void parseInterchangeEvent(XMLEvent event, String eventName) throws XMLStreamException { if (!complexTypeStack.isEmpty()) { parseEntityEvent(event, eventName); } else if (event.isStartElement()) { initCurrentEntity(event, eventName); }/* w w w . j a v a 2 s. c om*/ }
From source file:org.slc.sli.ingestion.parser.impl.EdfiRecordParserImpl.java
private void parseEntityEvent(XMLEvent e, String eventName) throws XMLStreamException { if (e.isStartElement()) { parseStartElement(e.asStartElement(), eventName); } else if (e.isCharacters()) { parseCharacters(e.asCharacters()); } else if (e.isEndElement() && eventName.equals(complexTypeStack.peek().getLeft().getName())) { parseEndElement(e);//w w w. j a v a 2 s . c om } }