下面列出了javax.xml.stream.XMLEventReader#nextEvent ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
private MultiPolygon multiPolygon(final XMLEventReader reader, final StartElement start,
final EdmPrimitiveTypeKind type, final SRID srid) throws XMLStreamException {
final List<Polygon> polygons = new ArrayList<>();
boolean foundEndProperty = false;
while (reader.hasNext() && !foundEndProperty) {
final XMLEvent event = reader.nextEvent();
if (event.isStartElement() && event.asStartElement().getName().equals(Constants.QNAME_POLYGON)) {
polygons.add(polygon(reader, event.asStartElement(), type, null));
}
if (event.isEndElement() && start.getName().equals(event.asEndElement().getName())) {
foundEndProperty = true;
}
}
return new MultiPolygon(GeoUtils.getDimension(type), srid, polygons);
}
private String parseTextContents(XMLEventReader eventReader) throws XMLStreamException {
// Chances are that we'll only need one string.
String ret = null;
buf.setLength(0);
while(eventReader.hasNext()) {
XMLEvent event = eventReader.nextEvent();
if(event.isEndElement())
break;
if(event.isCharacters()) {
if(ret == null)
ret = event.asCharacters().getData();
else { // Need to use the buffer
if(buf.length() == 0)
buf.append(ret);
buf.append(event.asCharacters().getData());
}
}
}
if(buf.length() > 0) {
ret = buf.toString();
}
return ret;
}
public static Boolean reportIsEmpty(File reportFile) throws IOException, XMLStreamException {
BufferedReader br = Files.newBufferedReader(reportFile.toPath());
try {
XMLEventReader reader = xmlInputFactory.createXMLEventReader(br);
while(reader.hasNext()) {
XMLEvent event = reader.nextEvent();
if(event.isStartElement() && !event.asStartElement().getName().getLocalPart().equals("OWASPZAPReport")) {
return false;
}
}
} finally {
br.close();
}
return true;
}
private List<MessagePart> parseChildrenMessages(XMLEventReader reader) throws XMLStreamException {
ArrayList<MessagePart> messages = new ArrayList<>();
int level = 0;
while (reader.hasNext() && (level > -1)) {
XMLEvent event = reader.nextEvent();
if (event.isStartElement()) {
if (level++ == 1) {
StartElement element = event.asStartElement();
String elementName = element.getName().getLocalPart();
if (MAP.equals(elementName)) {
messages.add(parseChildMessage(reader));
level--;
}
}
} else {
level--;
}
}
return messages;
}
private void collection(final Valuable valuable, final XMLEventReader reader, final StartElement start,
final EdmType edmType, final boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final boolean isUnicode) throws XMLStreamException, EdmPrimitiveTypeException,
DeserializerException {
List<Object> values = new ArrayList<Object>();
boolean foundEndProperty = false;
while (reader.hasNext() && !foundEndProperty) {
final XMLEvent event = reader.nextEvent();
if (event.isStartElement()) {
if (edmType instanceof EdmPrimitiveType) {
values.add(primitive(reader, event.asStartElement(), edmType, isNullable,
maxLength, precision, scale, isUnicode));
} else if (edmType instanceof EdmComplexType) {
values.add(complex(reader, event.asStartElement(), (EdmComplexType) edmType));
}
// do not add null or empty values
}
if (event.isEndElement() && start.getName().equals(event.asEndElement().getName())) {
foundEndProperty = true;
}
}
valuable.setValue(getValueType(edmType, true), values);
}
private void common(final XMLEventReader reader, final StartElement start,
final AbstractODataObject object, final String key) throws XMLStreamException {
boolean foundEndElement = false;
while (reader.hasNext() && !foundEndElement) {
final XMLEvent event = reader.nextEvent();
if (event.isCharacters() && !event.asCharacters().isWhiteSpace()) {
object.setCommonProperty(key, event.asCharacters().getData());
}
if (event.isEndElement() && start.getName().equals(event.asEndElement().getName())) {
foundEndElement = true;
}
}
}
private void processStartTag(final StartElement element, final StartElement parent,
final XMLEventReader reader, final Map<URI, Policy> map)
throws PolicyException {
try {
final QName name = element.getName();
if (parent == null) {
if (!name.equals(POLICIES)) {
throw LOGGER.logSevereException(new PolicyException(LocalizationMessages.WSP_0089_EXPECTED_ELEMENT("<Policies>", name, element.getLocation())));
}
} else {
final QName parentName = parent.getName();
if (parentName.equals(POLICIES)) {
if (!name.equals(POLICY_ATTACHMENT)) {
throw LOGGER.logSevereException(new PolicyException(LocalizationMessages.WSP_0089_EXPECTED_ELEMENT("<PolicyAttachment>", name, element.getLocation())));
}
} else if (parentName.equals(POLICY_ATTACHMENT)) {
if (name.equals(POLICY)) {
readPolicy(reader);
return;
} else if (!name.equals(APPLIES_TO)) {
throw LOGGER.logSevereException(new PolicyException(LocalizationMessages.WSP_0089_EXPECTED_ELEMENT("<AppliesTo> or <Policy>", name, element.getLocation())));
}
} else if (parentName.equals(APPLIES_TO)) {
if (!name.equals(URI)) {
throw LOGGER.logSevereException(new PolicyException(LocalizationMessages.WSP_0089_EXPECTED_ELEMENT("<URI>", name, element.getLocation())));
}
} else {
throw LOGGER.logSevereException(new PolicyException(LocalizationMessages.WSP_0090_UNEXPECTED_ELEMENT(name, element.getLocation())));
}
}
reader.nextEvent();
this.unmarshal(reader, element);
} catch (XMLStreamException e) {
throw LOGGER.logSevereException(new PolicyException(LocalizationMessages.WSP_0088_FAILED_PARSE(element.getLocation()), e));
}
}
public void runReader(XMLInputFactory factory, int offset) throws XMLStreamException {
StringReader stringReader = new StringReader(createXMLDocument(offset));
XMLEventReader reader = factory.createXMLEventReader(stringReader);
while (reader.hasNext()) {
XMLEvent event = reader.nextEvent();
System.out.println("Event Type: " + event.getEventType());
}
}
private PropertyType guessPropertyType(final XMLEventReader reader, final EdmTypeInfo typeInfo)
throws XMLStreamException {
XMLEvent child = null;
while (reader.hasNext() && child == null) {
final XMLEvent event = reader.peek();
if (event.isCharacters() && event.asCharacters().isWhiteSpace()) {
reader.nextEvent();
} else {
child = event;
}
}
final PropertyType type;
if (child == null) {
type = typeInfo == null || typeInfo.isPrimitiveType() ? PropertyType.PRIMITIVE : PropertyType.ENUM;
} else {
if (child.isStartElement()) {
if (Constants.NS_GML.equals(child.asStartElement().getName().getNamespaceURI())) {
type = PropertyType.PRIMITIVE;
} else if (elementQName.equals(child.asStartElement().getName())) {
type = PropertyType.COLLECTION;
} else {
type = PropertyType.COMPLEX;
}
} else if (child.isCharacters()) {
type = typeInfo == null || typeInfo.isPrimitiveType()
? PropertyType.PRIMITIVE
: PropertyType.ENUM;
} else {
type = PropertyType.EMPTY;
}
}
return type;
}
private Map<URI, Policy> unmarshal(final XMLEventReader reader, final StartElement parentElement) throws PolicyException {
XMLEvent event = null;
while (reader.hasNext()) {
try {
event = reader.peek();
switch (event.getEventType()) {
case XMLStreamConstants.START_DOCUMENT:
case XMLStreamConstants.COMMENT:
reader.nextEvent();
break;
case XMLStreamConstants.CHARACTERS:
processCharacters(event.asCharacters(), parentElement, map);
reader.nextEvent();
break;
case XMLStreamConstants.END_ELEMENT:
processEndTag(event.asEndElement(), parentElement);
reader.nextEvent();
return map;
case XMLStreamConstants.START_ELEMENT:
final StartElement element = event.asStartElement();
processStartTag(element, parentElement, reader, map);
break;
case XMLStreamConstants.END_DOCUMENT:
return map;
default:
throw LOGGER.logSevereException(new PolicyException(LocalizationMessages.WSP_0087_UNKNOWN_EVENT(event)));
}
} catch (XMLStreamException e) {
final Location location = event == null ? null : event.getLocation();
throw LOGGER.logSevereException(new PolicyException(LocalizationMessages.WSP_0088_FAILED_PARSE(location)), e);
}
}
return map;
}
private Map<URI, Policy> unmarshal(final XMLEventReader reader, final StartElement parentElement) throws PolicyException {
XMLEvent event = null;
while (reader.hasNext()) {
try {
event = reader.peek();
switch (event.getEventType()) {
case XMLStreamConstants.START_DOCUMENT:
case XMLStreamConstants.COMMENT:
reader.nextEvent();
break;
case XMLStreamConstants.CHARACTERS:
processCharacters(event.asCharacters(), parentElement, map);
reader.nextEvent();
break;
case XMLStreamConstants.END_ELEMENT:
processEndTag(event.asEndElement(), parentElement);
reader.nextEvent();
return map;
case XMLStreamConstants.START_ELEMENT:
final StartElement element = event.asStartElement();
processStartTag(element, parentElement, reader, map);
break;
case XMLStreamConstants.END_DOCUMENT:
return map;
default:
throw LOGGER.logSevereException(new PolicyException(LocalizationMessages.WSP_0087_UNKNOWN_EVENT(event)));
}
} catch (XMLStreamException e) {
final Location location = event == null ? null : event.getLocation();
throw LOGGER.logSevereException(new PolicyException(LocalizationMessages.WSP_0088_FAILED_PARSE(location)), e);
}
}
return map;
}
private String getCharacterData(XMLEvent event, XMLEventReader eventReader)
throws XMLStreamException {
String result = "";
event = eventReader.nextEvent();
if (event instanceof Characters) {
result = event.asCharacters().getData();
}
return result;
}
private String unmarshalNodeContent(final NamespaceVersion nsVersion, final ModelNode node, final QName nodeElementName, final XMLEventReader reader) throws PolicyException {
StringBuilder valueBuffer = null;
loop:
while (reader.hasNext()) {
try {
final XMLEvent xmlParserEvent = reader.nextEvent();
switch (xmlParserEvent.getEventType()) {
case XMLStreamConstants.COMMENT:
break; // skipping the comments
case XMLStreamConstants.CHARACTERS:
valueBuffer = processCharacters(node.getType(), xmlParserEvent.asCharacters(), valueBuffer);
break;
case XMLStreamConstants.END_ELEMENT:
checkEndTagName(nodeElementName, xmlParserEvent.asEndElement());
break loop; // data exctraction for currently processed policy node is done
case XMLStreamConstants.START_ELEMENT:
final StartElement childElement = xmlParserEvent.asStartElement();
ModelNode childNode = addNewChildNode(nsVersion, node, childElement);
String value = unmarshalNodeContent(nsVersion, childNode, childElement.getName(), reader);
if (childNode.isDomainSpecific()) {
parseAssertionData(nsVersion, value, childNode, childElement);
}
break;
default:
throw LOGGER.logSevereException(new PolicyException(LocalizationMessages.WSP_0011_UNABLE_TO_UNMARSHALL_POLICY_XML_ELEM_EXPECTED()));
}
} catch (XMLStreamException e) {
throw LOGGER.logSevereException(new PolicyException(LocalizationMessages.WSP_0068_FAILED_TO_UNMARSHALL_POLICY_EXPRESSION(), e));
}
}
return (valueBuffer == null) ? null : valueBuffer.toString().trim();
}
@Nullable
static StartElement findNextStart(XMLEventReader eventReader) throws XMLStreamException {
while (eventReader.hasNext()) {
XMLEvent event = eventReader.nextEvent();
if (event.isStartElement()) {
return event.asStartElement();
}
}
return null;
}
public void runReader(XMLInputFactory factory, int offset) throws XMLStreamException {
StringReader stringReader = new StringReader(createXMLDocument(offset));
XMLEventReader reader = factory.createXMLEventReader(stringReader);
while (reader.hasNext()) {
XMLEvent event = reader.nextEvent();
System.out.println("Event Type: " + event.getEventType());
}
}
@SuppressWarnings("unchecked")
public List<ApplicationPolicy> parse(XMLEventReader xmlEventReader) throws XMLStreamException
{
List<ApplicationPolicy> policies = new ArrayList<ApplicationPolicy>();
while(xmlEventReader.hasNext())
{
XMLEvent xmlEvent = xmlEventReader.nextEvent();
int eventType = xmlEvent.getEventType();
switch(eventType)
{
case XMLStreamConstants.START_ELEMENT:
StartElement appPolicyElement = (StartElement) xmlEvent;
String elementName = StaxParserUtil.getStartElementName(appPolicyElement);
if("application-policy".equals(elementName) == false)
throw StaxParserUtil.unexpectedElement(elementName, xmlEvent);
//We got the application-policy element. It just has one attribute "name"
Iterator<Attribute> attrs = appPolicyElement.getAttributes();
String extendsName = null;
String appPolicyName = null;
while(attrs.hasNext())
{
Attribute attribute = attrs.next();
QName attributeName = attribute.getName();
String attributeValue = StaxParserUtil.getAttributeValue(attribute);
if("name".equals(attributeName.getLocalPart()))
appPolicyName = attributeValue;
else if("extends".equals(attributeName.getLocalPart()))
extendsName = attributeValue;
}
ApplicationPolicy applicationPolicy = new ApplicationPolicy(appPolicyName);
if(extendsName != null)
applicationPolicy.setBaseApplicationPolicyName(extendsName);
route(xmlEventReader, applicationPolicy);
policies.add(applicationPolicy);
}
}
return policies;
}
XMLEvent read(XMLEventReader reader) throws XMLStreamException {
skipIgnorable(reader);
return reader.nextEvent();
}
private void collectResult(XMLEventReader reader, StartElement element)
throws XMLStreamException
{
QName snippetName = new QName(SEARCH_NS, "snippet");
QName extractedName = new QName(SEARCH_NS, "extracted");
QName extractedNoneName = new QName(SEARCH_NS, "extracted-none");
QName metadataName = new QName(SEARCH_NS, "metadata");
QName similarName = new QName(SEARCH_NS, "similar");
QName relevanceInfoName = new QName(QUERY_NS, "relevance-info");
List<XMLEvent> eventBuf = new ArrayList<>();
QName resultName = element.getName();
events: while (reader.hasNext()) {
XMLEvent event = reader.nextEvent();
int eventType = event.getEventType();
eventType: switch (eventType) {
case XMLStreamConstants.START_ELEMENT:
StartElement startElement = event.asStartElement();
QName startName = startElement.getName();
if (snippetName.equals(startName)) {
handleSnippet(reader, startElement);
} else if (extractedName.equals(startName)) {
handleExtracted(reader, startElement);
} else if (extractedNoneName.equals(startName)) {
handleExtracted(reader, startElement);
} else if (metadataName.equals(startName)) {
handleMetadata(reader, startElement);
} else if (similarName.equals(startName)) {
handleSimilar(reader, startElement);
} else if (relevanceInfoName.equals(startName)) {
handleRelevanceInfo(reader, startElement);
} else {
break eventType;
}
// found result substructure, so cannot be a raw snippet
if (eventBuf != null) {
eventBuf = null;
}
break eventType;
case XMLStreamConstants.END_ELEMENT:
if (resultName.equals(event.asEndElement().getName())) {
break events;
}
break eventType;
}
// buffer candidates for a raw snippet
if (eventBuf != null) {
eventBuf.add(event);
}
}
// capture raw snippet
if (eventBuf != null) {
int first = tempEvents.size();
tempEvents.addAll(eventBuf);
addSnippet(new EventRange(first, tempEvents.size()));
}
}
public void parse(XMLEventReader input) throws XMLStreamException, XNIException {
XMLEvent currentEvent = input.peek();
if (currentEvent != null) {
int eventType = currentEvent.getEventType();
if (eventType != XMLStreamConstants.START_DOCUMENT &&
eventType != XMLStreamConstants.START_ELEMENT) {
throw new XMLStreamException();
}
fLocationWrapper.setLocation(currentEvent.getLocation());
fSchemaDOMParser.startDocument(fLocationWrapper, null, fNamespaceContext, null);
loop: while (input.hasNext()) {
currentEvent = input.nextEvent();
eventType = currentEvent.getEventType();
switch (eventType) {
case XMLStreamConstants.START_ELEMENT:
++fDepth;
StartElement start = currentEvent.asStartElement();
fillQName(fElementQName, start.getName());
fLocationWrapper.setLocation(start.getLocation());
fNamespaceContext.setNamespaceContext(start.getNamespaceContext());
fillXMLAttributes(start);
fillDeclaredPrefixes(start);
addNamespaceDeclarations();
fNamespaceContext.pushContext();
fSchemaDOMParser.startElement(fElementQName, fAttributes, null);
break;
case XMLStreamConstants.END_ELEMENT:
EndElement end = currentEvent.asEndElement();
fillQName(fElementQName, end.getName());
fillDeclaredPrefixes(end);
fLocationWrapper.setLocation(end.getLocation());
fSchemaDOMParser.endElement(fElementQName, null);
fNamespaceContext.popContext();
--fDepth;
if (fDepth <= 0) {
break loop;
}
break;
case XMLStreamConstants.CHARACTERS:
sendCharactersToSchemaParser(currentEvent.asCharacters().getData(), false);
break;
case XMLStreamConstants.SPACE:
sendCharactersToSchemaParser(currentEvent.asCharacters().getData(), true);
break;
case XMLStreamConstants.CDATA:
fSchemaDOMParser.startCDATA(null);
sendCharactersToSchemaParser(currentEvent.asCharacters().getData(), false);
fSchemaDOMParser.endCDATA(null);
break;
case XMLStreamConstants.PROCESSING_INSTRUCTION:
ProcessingInstruction pi = (ProcessingInstruction)currentEvent;
fillProcessingInstruction(pi.getData());
fSchemaDOMParser.processingInstruction(pi.getTarget(), fTempString, null);
break;
case XMLStreamConstants.DTD:
/* There shouldn't be a DTD in the schema */
break;
case XMLStreamConstants.ENTITY_REFERENCE:
/* Not needed for schemas */
break;
case XMLStreamConstants.COMMENT:
/* No point in sending comments */
break;
case XMLStreamConstants.START_DOCUMENT:
fDepth++;
/* We automatically call startDocument before the loop */
break;
case XMLStreamConstants.END_DOCUMENT:
/* We automatically call endDocument after the loop */
break;
}
}
fLocationWrapper.setLocation(null);
fNamespaceContext.setNamespaceContext(null);
fSchemaDOMParser.endDocument(null);
}
}
@Override
public InputStream selectEntity(final InputStream entity, final String[] propertyNames) throws Exception {
final XMLEventReader reader = getEventReader(entity);
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
final XMLEventWriter writer = getEventWriter(bos);
final List<String> found = new ArrayList<String>(Arrays.asList(propertyNames));
boolean inProperties = false;
boolean writeCurrent = true;
Boolean writeNext = null;
String currentName = null;
final List<String> fieldToBeSaved = new ArrayList<String>(Arrays.asList(propertyNames));
while (reader.hasNext()) {
final XMLEvent event = reader.nextEvent();
if (event.getEventType() == XMLStreamConstants.START_ELEMENT
&& Constants.get(ConstantKey.LINK).equals(event.asStartElement().getName().getLocalPart())
&& !fieldToBeSaved.contains(
event.asStartElement().getAttributeByName(new QName("title")).getValue())
&& !"edit".equals(event.asStartElement().getAttributeByName(new QName("rel")).getValue())) {
writeCurrent = false;
} else if (event.getEventType() == XMLStreamConstants.END_ELEMENT
&& Constants.get(ConstantKey.LINK).equals(event.asEndElement().getName().getLocalPart())) {
writeNext = true;
} else if (event.getEventType() == XMLStreamConstants.START_ELEMENT
&& (Constants.get(ConstantKey.PROPERTIES)).equals(
event.asStartElement().getName().getLocalPart())) {
writeCurrent = true;
writeNext = false;
inProperties = true;
} else if (event.getEventType() == XMLStreamConstants.END_ELEMENT
&& (Constants.get(ConstantKey.PROPERTIES)).equals(
event.asEndElement().getName().getLocalPart())) {
writeCurrent = true;
} else if (inProperties) {
if (event.getEventType() == XMLStreamConstants.START_ELEMENT) {
final String elementName = event.asStartElement().getName().getLocalPart();
for (String propertyName : propertyNames) {
if ((Constants.get(ConstantKey.ATOM_PROPERTY_PREFIX) + propertyName.trim()).equals(elementName)) {
writeCurrent = true;
found.remove(propertyName);
currentName = propertyName;
}
}
} else if (event.getEventType() == XMLStreamConstants.END_ELEMENT
&& StringUtils.isNotBlank(currentName)
&& (Constants.get(ConstantKey.ATOM_PROPERTY_PREFIX) + currentName.trim()).equals(
event.asEndElement().getName().getLocalPart())) {
writeNext = false;
currentName = null;
}
}
if (writeCurrent) {
writer.add(event);
}
if (writeNext != null) {
writeCurrent = writeNext;
writeNext = null;
}
}
writer.flush();
writer.close();
reader.close();
IOUtils.closeQuietly(entity);
// Do not raise any exception in order to support FC properties as well
// if (!found.isEmpty()) {
// throw new Exception(String.format("Could not find a properties '%s'", found));
// }
return new ByteArrayInputStream(bos.toByteArray());
}