From 39f7147af38a3c856224ddd65eaffa539da1da13 Mon Sep 17 00:00:00 2001 From: labkey-jeckels Date: Thu, 19 Feb 2026 18:14:32 -0800 Subject: [PATCH] Ensure consistent XML parser config --- .../flow/analysis/model/WorkspaceParser.java | 8 +- .../labkey/ms2/reader/Q3AnalysisSummary.java | 1 - .../ms2/reader/SimpleXMLEventRewriter.java | 370 +----------------- .../ms2/reader/XPressAnalysisSummary.java | 6 - 4 files changed, 4 insertions(+), 381 deletions(-) diff --git a/flow/enginesrc/org/labkey/flow/analysis/model/WorkspaceParser.java b/flow/enginesrc/org/labkey/flow/analysis/model/WorkspaceParser.java index f9c3aaee8..2c809f4be 100644 --- a/flow/enginesrc/org/labkey/flow/analysis/model/WorkspaceParser.java +++ b/flow/enginesrc/org/labkey/flow/analysis/model/WorkspaceParser.java @@ -24,6 +24,7 @@ import org.apache.xerces.xni.QName; import org.apache.xerces.xni.XMLLocator; import org.apache.xerces.xni.XNIException; +import org.labkey.api.util.XmlBeansUtil; import org.w3c.dom.Attr; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -41,7 +42,6 @@ import org.xml.sax.helpers.DefaultHandler; import javax.xml.parsers.SAXParser; -import javax.xml.parsers.SAXParserFactory; import java.io.File; import java.io.IOException; import java.io.InputStream; @@ -135,7 +135,7 @@ static public boolean isFlowJoWorkspace(File file) WorkspaceRecognizer recognizer = new WorkspaceRecognizer(); try { - SAXParser parser = SAXParserFactory.newInstance().newSAXParser(); + SAXParser parser = XmlBeansUtil.SAX_PARSER_FACTORY.newSAXParser(); parser.parse(file, recognizer); } @@ -371,7 +371,6 @@ public void fatalError(SAXParseException exception) throws SAXException static class FJParseFilter implements LSParserFilter { SymbolTable fSymbolTable = new SymbolTable(); - Set rejected = new HashSet<>(); @Override public short startElement(Element element) @@ -385,7 +384,6 @@ public short startElement(Element element) else if (nsURI != null && (GATINGML_1_5_NAMESPACES.contains(nsURI) || FJ_GATINGML_1_5_NAMEPSACE_FIXUP.containsKey(nsURI) || GATINGML_2_0_NAMESPACES.contains(nsURI))) filter = FILTER_ACCEPT; -// if (filter != FILTER_ACCEPT && rejected.add(element.getNodeName())) System.err.println((filter == FILTER_SKIP ? "SKIPPED: " : "REJECTED: ") + element.getNodeName()); return filter; } @@ -457,7 +455,7 @@ static FJDOMParser create() { super(st); fSymbolTable = st; - fSkippedElemStack = new Stack(); + fSkippedElemStack = new Stack<>(); fDOMFilter = new FJParseFilter(); try { diff --git a/ms2/src/org/labkey/ms2/reader/Q3AnalysisSummary.java b/ms2/src/org/labkey/ms2/reader/Q3AnalysisSummary.java index 7b614b100..429786b35 100644 --- a/ms2/src/org/labkey/ms2/reader/Q3AnalysisSummary.java +++ b/ms2/src/org/labkey/ms2/reader/Q3AnalysisSummary.java @@ -15,7 +15,6 @@ */ package org.labkey.ms2.reader; -import org.labkey.ms2.reader.SimpleXMLEventRewriter; import org.labkey.api.reader.SimpleXMLStreamReader; import org.apache.logging.log4j.Logger; diff --git a/ms2/src/org/labkey/ms2/reader/SimpleXMLEventRewriter.java b/ms2/src/org/labkey/ms2/reader/SimpleXMLEventRewriter.java index e9ed0f3df..2bb64527c 100644 --- a/ms2/src/org/labkey/ms2/reader/SimpleXMLEventRewriter.java +++ b/ms2/src/org/labkey/ms2/reader/SimpleXMLEventRewriter.java @@ -15,32 +15,10 @@ */ package org.labkey.ms2.reader; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.LogManager; - -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.PrintStream; -import java.util.ArrayList; -import java.util.Arrays; import java.util.Date; -import java.util.GregorianCalendar; import javax.xml.datatype.DatatypeConfigurationException; import javax.xml.datatype.DatatypeFactory; import javax.xml.datatype.XMLGregorianCalendar; -import javax.xml.stream.XMLEventFactory; -import javax.xml.stream.XMLEventReader; -import javax.xml.stream.XMLEventWriter; -import javax.xml.stream.XMLInputFactory; -import javax.xml.stream.XMLOutputFactory; -import javax.xml.stream.XMLStreamConstants; -import javax.xml.stream.XMLStreamException; -import javax.xml.stream.events.Attribute; -import javax.xml.stream.events.EndElement; -import javax.xml.stream.events.StartElement; -import javax.xml.stream.events.XMLEvent; /** * Helper class to pull events and rewrite them with modification or with new @@ -50,10 +28,7 @@ */ public class SimpleXMLEventRewriter { - private static final Logger _log = LogManager.getLogger(SimpleXMLEventRewriter.class); - - private static final XMLEventFactory eventFactory = XMLEventFactory.newInstance(); - private static DatatypeFactory typeFactory; + private static final DatatypeFactory typeFactory; static { @@ -68,331 +43,6 @@ public class SimpleXMLEventRewriter } } - private InputStream in = null; - private PrintStream out = null; - private String inFileName; - private String outFileName; - private XMLEventReader parser = null; - private XMLEventWriter writer = null; - - public SimpleXMLEventRewriter(String inFileName, String outFileName) - { - this.inFileName = inFileName; - this.outFileName = outFileName; - } - - /** - * - */ - private static XMLEventReader createParser(InputStream in) - throws XMLStreamException - { - XMLInputFactory inFactory = XMLInputFactory.newInstance(); - inFactory.setProperty(XMLInputFactory.SUPPORT_DTD, false); - return inFactory.createXMLEventReader(in); - } - - /** - * - */ - private static XMLEventWriter createWriter(OutputStream out) - throws XMLStreamException - { - XMLOutputFactory outFactory = XMLOutputFactory.newInstance(); - return outFactory.createXMLEventWriter(out); - } - - protected void emit(String content) - throws XMLStreamException - { - writer.flush(); - out.println(content); - } - - public void add(SimpleElement element) - throws XMLStreamException - { - writer.add(element.getEvent()); - } - - public void add(XMLEvent event) - throws XMLStreamException - { - writer.add(event); - } - - public void addNewline() - throws XMLStreamException - { - // TODO: Should really make line end style consistent for entire file - writer.add(eventFactory.createSpace("\n")); - } - - public void handleDefault(XMLEvent event) - throws XMLStreamException - { - add(event); - } - - public void handleDiscard(XMLEvent event) - { - // Discard; take no action - } - - public void handleStartDocument(XMLEvent event) - throws XMLStreamException - { - add(event); - } - - public void handleEndDocument(XMLEvent event) - throws XMLStreamException - { - add(event); - } - - public void handleStartElement(StartElement event) - throws XMLStreamException - { - add(event); - } - - public void handleEndElement(EndElement event) - throws XMLStreamException - { - add(event); - } - - /** - * - */ - public void rewrite() - throws IOException, XMLStreamException - { - try - { - in = new FileInputStream(inFileName); - out = new PrintStream(outFileName); - - parser = createParser(in); - writer = createWriter(out); - - while (parser.hasNext()) - { - XMLEvent event = parser.nextEvent(); - switch (event.getEventType()) - { - case XMLStreamConstants.ATTRIBUTE: - case XMLStreamConstants.CDATA: - case XMLStreamConstants.CHARACTERS: - case XMLStreamConstants.COMMENT: - case XMLStreamConstants.DTD: - case XMLStreamConstants.ENTITY_DECLARATION: - case XMLStreamConstants.ENTITY_REFERENCE: - case XMLStreamConstants.NAMESPACE: - case XMLStreamConstants.NOTATION_DECLARATION: - case XMLStreamConstants.PROCESSING_INSTRUCTION: - case XMLStreamConstants.SPACE: - handleDefault(event); - break; - case XMLStreamConstants.START_DOCUMENT: - handleStartDocument(event); - break; - case XMLStreamConstants.END_DOCUMENT: - handleEndDocument(event); - break; - case XMLStreamConstants.START_ELEMENT: - handleStartElement(event.asStartElement()); - break; - case XMLStreamConstants.END_ELEMENT: - handleEndElement(event.asEndElement()); - break; - default: - _log.error("Unrecognized event type " + event.getEventType()); - throw new XMLStreamException("Unrecognized event type " + event.getEventType()); - } - } - } - finally - { - close(); - } - } - - /** - * - */ - public void close() - { - try { - if (null != parser) parser.close(); - } catch (Exception e) { - } finally { - parser = null; - } - - try { - if (null != in) in.close(); - } catch (Exception e) { - } finally { - in = null; - } - - try { - if (null != writer) writer.close(); - } catch (Exception e) { - } finally { - writer = null; - } - - try { - if (null != out) out.close(); - } catch (Exception e) { - } finally { - out = null; - } - } - - /** - * - */ - protected interface SimpleElement - { - XMLEvent getEvent(); - } - - /** - * Helpers for consing up StartElements - */ - public static class SimpleStartElement implements SimpleElement - { - private String name; - private ArrayList attrs = null; - - /** - * Create a start tag with the given name - */ - public SimpleStartElement(String name) - { - this.name = name; - } - - /** - * Add an array of attributes to this start tag - */ - public SimpleStartElement(String name, Attribute[] attrs) - { - this.name = name; - this.attrs = new ArrayList<>(Arrays.asList(attrs)); - } - - /** - * Add a string valued attribute - */ - public void addAttribute(String name, String value) - { - if (null == attrs) - attrs = new ArrayList<>(); - attrs.add(eventFactory.createAttribute(name, value)); - } - - /** - * Add a char valued attribute - */ - public void addAttribute(String name, char value) - { - addAttribute(name, "" + value); - } - - /** - * Add a int valued attribute - */ - public void addAttribute(String name, int value) - { - addAttribute(name, "" + value); - } - - /** - * Add a floatvalued attribute - */ - public void addAttribute(String name, float value) - { - addAttribute(name, String.format("%f", value)); - } - - /** - * Add a double valued attribute - */ - public void addAttribute(String name, double value) - { - addAttribute(name, String.format("%f", value)); - } - - /** - * Add a timestamp attribute - * @throws NullPointerException if value is null. - */ - public void addAttribute(String name, GregorianCalendar value) - { - addAttribute(name, "" + typeFactory.newXMLGregorianCalendar(value).toXMLFormat()); - } - - /** - * Create an event for this element - * @return XMLEvent for this StartElement - */ - @Override - public XMLEvent getEvent() - { - return eventFactory.createStartElement("", "", name, attrs.iterator(), null); - } - } - - /** - * Helpers for creating end elements - */ - public static class SimpleEndElement implements SimpleElement - { - private String name; - - /** - * Create an end element with the given name - */ - public SimpleEndElement(String name) - { - this.name = name; - } - - /** - * Create an event for this element - * @return XMLEvent for this StartElement - */ - @Override - public XMLEvent getEvent() - { - return eventFactory.createEndElement("", "", name); - } - } - - /** - * Create a space element - */ - public static class SimpleSpaceElement implements SimpleElement - { - private String content; - - public SimpleSpaceElement(String content) - { - this.content = content; - } - - @Override - public XMLEvent getEvent() - { - return eventFactory.createSpace(content); - } - } - /** * Convert an XML time element to a Date */ @@ -401,22 +51,4 @@ public static Date convertXMLTimeToDate(String lexTime) XMLGregorianCalendar xgc = typeFactory.newXMLGregorianCalendar(lexTime); return xgc.toGregorianCalendar().getTime(); } - - /** - * - */ - public static void main(String[] av) - { - try - { - SimpleXMLEventRewriter s = new SimpleXMLEventRewriter("/home/mfitzgib/AcrylForMarc/data/L_04_IPAS0012_AX01_RP_SG04to10.pep.xml", "foo.pep.xml"); - s.rewrite(); - s.close(); - } - catch (Exception e) - { - e.printStackTrace(); - } - } - } diff --git a/ms2/src/org/labkey/ms2/reader/XPressAnalysisSummary.java b/ms2/src/org/labkey/ms2/reader/XPressAnalysisSummary.java index 70b1a102c..971ccb42e 100644 --- a/ms2/src/org/labkey/ms2/reader/XPressAnalysisSummary.java +++ b/ms2/src/org/labkey/ms2/reader/XPressAnalysisSummary.java @@ -16,12 +16,8 @@ package org.labkey.ms2.reader; import net.systemsbiology.regisWeb.pepXML.XpressratioSummaryDocument; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.LogManager; import org.apache.xmlbeans.XmlException; -import org.labkey.ms2.reader.RelativeQuantAnalysisSummary; import org.labkey.api.reader.SimpleXMLStreamReader; -import org.labkey.ms2.reader.SimpleXMLEventRewriter; import javax.xml.stream.XMLStreamException; @@ -30,8 +26,6 @@ */ public class XPressAnalysisSummary extends RelativeQuantAnalysisSummary { - private static final Logger _log = LogManager.getLogger(XPressAnalysisSummary.class); - public static final String analysisType = "xpress"; private String _sameScanRange;