jetty.project icon indicating copy to clipboard operation
jetty.project copied to clipboard

XML parsing fails with jetty 10

Open smitagarg1 opened this issue 2 years ago • 2 comments

old Jetty version used : 9.4.43.v20210629 New Jetty version : 10.0.12

I have Junit test written where below is returned as mock response and then parsed using org.eclipse.jetty.xml.XmlParser

org.apache.http.HttpEntity responseEntity = new org.apache.http.entity.StringEntity(
              "\<VarrayCapacityDetail>\n" +
                    "\<Varray>\n" +
                        "\<VarrayId>\n" +
                            "urn:storageos:***:a19*******4f\n" +
                        "\</VarrayId>\n" +
                        "\<TotalCapacity>3</TotalCapacity>\n" +
                        "\<UsedCapacity>2</UsedCapacity>\n" +
                    "\</Varray>\n" +
                "\</VarrayCapacityDetail>");
				
				
when(response.getEntity()).thenReturn(responseEntity);				
InputStream stream = response.getEntity().getContent();				
XmlParser.Node VArrayCapacitynode=null;
				try {
					VArrayCapacitynode = xmlParser.parse(stream);
				} catch (SAXException e) {
					e.printStackTrace();
					_log.error("Error Occured in parsing the varray Capacity xml", e);
			}

This works fine with jetty 9.4.43.v20210629 but fails with jetty 10.0.12 and gives below error

com.emc.storageos.data.ssmclientapp.util.DtQueryUtilTest > testGetVarray_success STANDARD_ERROR
    org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 24; cvc-elt.1.a: Cannot find the declaration of element 'VarrayCapacityDetail'.
        at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:204)
        at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:135)
        at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:396)
        at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327)
        at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:284)
        at java.xml/com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handleStartElement(XMLSchemaValidator.java:2132)
        at java.xml/com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.startElement(XMLSchemaValidator.java:829)
        at java.xml/com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:374)
        at java.xml/com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDriver.scanRootElementHook(XMLNSDocumentScannerImpl.java:613)
        at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3063)
        at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:836)
        at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605)
        at java.xml/com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:112)
        at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:534)
        at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:888)
        at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:824)
        at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
        at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1216)
        at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:635)
        at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.parse(SAXParserImpl.java:324)
        at org.eclipse.jetty.xml.XmlParser.parse(XmlParser.java:202)
        at org.eclipse.jetty.xml.XmlParser.parse(XmlParser.java:251)

smitagarg1 avatar May 07 '23 15:05 smitagarg1

Your XML is badly formed as the TotalCapacity and UsedCapacity elements are not closed. You also may need to turn off validation.

I fixed the XML and wrote the following, which works fine:



    @Test
    public void testIssue() throws Exception
    {
        XmlParser parser = new XmlParser();
        parser.setValidating(false);

        XmlParser.Node parsed = parser.parse(
            new ByteArrayInputStream((
                "<VarrayCapacityDetail>\n" +
                "<Varray>\n" +
                "  <VarrayId>\n" +
                "    urn:storageos::a19****4f\n" +
                "  </VarrayId>\n" +
                "  <TotalCapacity>3</TotalCapacity>\n" +
                "  <UsedCapacity>2</UsedCapacity>\n" +
                "</Varray>\n" +
                "</VarrayCapacityDetail>").getBytes(StandardCharsets.ISO_8859_1)));
        System.err.println(parsed);
    }

gregw avatar May 07 '23 17:05 gregw

This issue has been automatically marked as stale because it has been a full year without activity. It will be closed if no further activity occurs. Thank you for your contributions.

github-actions[bot] avatar May 07 '24 00:05 github-actions[bot]

Closing, it works when you turn off validation.

joakime avatar May 07 '24 10:05 joakime