You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ws.apache.org by ve...@apache.org on 2015/11/07 13:38:15 UTC

svn commit: r1713115 - in /webservices/axiom/trunk: axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/ axiom-api/src/test/java/org/apache/axiom/util/stax/dialect/ systests/integration-tests/src/test/java/org/apache/axiom/om/ testing/xml-testsu...

Author: veithen
Date: Sat Nov  7 12:38:14 2015
New Revision: 1713115

URL: http://svn.apache.org/viewvc?rev=1713115&view=rev
Log:
AXIOM-475: Extend the support for DTDReader to more StAX implementations.

Added:
    webservices/axiom/trunk/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/AbstractDTDReader.java
      - copied, changed from r1711547, webservices/axiom/trunk/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/XLXP1DTDReaderImpl.java
    webservices/axiom/trunk/axiom-api/src/test/java/org/apache/axiom/util/stax/dialect/TestDTDReader.java   (with props)
    webservices/axiom/trunk/testing/xml-testsuite/src/main/resources/org/apache/axiom/ts/xml/dtd-full.dtd
    webservices/axiom/trunk/testing/xml-testsuite/src/main/resources/org/apache/axiom/ts/xml/dtd-full.xml   (with props)
Removed:
    webservices/axiom/trunk/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/XLXP1DTDReaderImpl.java
Modified:
    webservices/axiom/trunk/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/SJSXPStreamReaderWrapper.java
    webservices/axiom/trunk/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/Woodstox3StreamReaderWrapper.java
    webservices/axiom/trunk/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/XLXP1StreamReaderWrapper.java
    webservices/axiom/trunk/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/XLXPStreamReaderWrapper.java
    webservices/axiom/trunk/axiom-api/src/test/java/org/apache/axiom/util/stax/dialect/DialectTestSuite.java
    webservices/axiom/trunk/axiom-api/src/test/java/org/apache/axiom/util/stax/dialect/DialectTestSuiteBuilder.java
    webservices/axiom/trunk/systests/integration-tests/src/test/java/org/apache/axiom/om/SAXResultSAXParserTest.java
    webservices/axiom/trunk/testing/xml-testsuite/src/main/java/org/apache/axiom/ts/xml/XMLSample.java
    webservices/axiom/trunk/testing/xml-testsuite/src/main/java/org/apache/axiom/ts/xml/XMLSampleProperties.java

Copied: webservices/axiom/trunk/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/AbstractDTDReader.java (from r1711547, webservices/axiom/trunk/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/XLXP1DTDReaderImpl.java)
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/AbstractDTDReader.java?p2=webservices/axiom/trunk/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/AbstractDTDReader.java&p1=webservices/axiom/trunk/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/XLXP1DTDReaderImpl.java&r1=1711547&r2=1713115&rev=1713115&view=diff
==============================================================================
--- webservices/axiom/trunk/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/XLXP1DTDReaderImpl.java (original)
+++ webservices/axiom/trunk/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/AbstractDTDReader.java Sat Nov  7 12:38:14 2015
@@ -23,20 +23,22 @@ import javax.xml.stream.XMLStreamReader;
 
 import org.apache.axiom.ext.stax.DTDReader;
 
-final class XLXP1DTDReaderImpl implements DTDReader {
+abstract class AbstractDTDReader implements DTDReader {
     private final XMLStreamReader reader;
     private String rootName;
     private String publicId;
     private String systemId;
 
-    XLXP1DTDReaderImpl(XMLStreamReader reader) {
+    AbstractDTDReader(XMLStreamReader reader) {
         this.reader = reader;
     }
 
+    protected abstract String getDocumentTypeDeclaration(XMLStreamReader reader);
+
     private void parse() {
         if (rootName == null) {
             try {
-                Scanner scanner = new Scanner((String)reader.getProperty("javax.xml.stream.dtd.declaration"));
+                Scanner scanner = new Scanner(getDocumentTypeDeclaration(reader));
                 scanner.expect("<!DOCTYPE");
                 scanner.skipSpace();
                 rootName = scanner.getName();

Modified: webservices/axiom/trunk/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/SJSXPStreamReaderWrapper.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/SJSXPStreamReaderWrapper.java?rev=1713115&r1=1713114&r2=1713115&view=diff
==============================================================================
--- webservices/axiom/trunk/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/SJSXPStreamReaderWrapper.java (original)
+++ webservices/axiom/trunk/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/SJSXPStreamReaderWrapper.java Sat Nov  7 12:38:14 2015
@@ -24,6 +24,7 @@ import javax.xml.namespace.QName;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 
+import org.apache.axiom.ext.stax.DTDReader;
 import org.apache.axiom.ext.stax.DelegatingXMLStreamReader;
 import org.apache.axiom.util.stax.wrapper.XMLStreamReaderWrapper;
 
@@ -32,6 +33,20 @@ class SJSXPStreamReaderWrapper extends X
         super(parent);
     }
 
+    @Override
+    public Object getProperty(String name) {
+        if (DTDReader.PROPERTY.equals(name)) {
+            return new AbstractDTDReader(getParent()) {
+                @Override
+                protected String getDocumentTypeDeclaration(XMLStreamReader reader) {
+                    return reader.getText();
+                }
+            };
+        } else {
+            return super.getProperty(name);
+        }
+    }
+
     public String getCharacterEncodingScheme() {
         if (getEventType() == START_DOCUMENT) {
             return super.getCharacterEncodingScheme();

Modified: webservices/axiom/trunk/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/Woodstox3StreamReaderWrapper.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/Woodstox3StreamReaderWrapper.java?rev=1713115&r1=1713114&r2=1713115&view=diff
==============================================================================
--- webservices/axiom/trunk/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/Woodstox3StreamReaderWrapper.java (original)
+++ webservices/axiom/trunk/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/Woodstox3StreamReaderWrapper.java Sat Nov  7 12:38:14 2015
@@ -22,8 +22,9 @@ import javax.xml.namespace.NamespaceCont
 import javax.xml.stream.XMLStreamReader;
 
 import org.apache.axiom.ext.stax.DelegatingXMLStreamReader;
+import org.apache.axiom.util.stax.wrapper.XMLStreamReaderWrapper;
 
-class Woodstox3StreamReaderWrapper extends StAX2StreamReaderWrapper implements DelegatingXMLStreamReader {
+class Woodstox3StreamReaderWrapper extends XMLStreamReaderWrapper implements DelegatingXMLStreamReader {
     public Woodstox3StreamReaderWrapper(XMLStreamReader reader) {
         super(reader);
     }

Modified: webservices/axiom/trunk/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/XLXP1StreamReaderWrapper.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/XLXP1StreamReaderWrapper.java?rev=1713115&r1=1713114&r2=1713115&view=diff
==============================================================================
--- webservices/axiom/trunk/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/XLXP1StreamReaderWrapper.java (original)
+++ webservices/axiom/trunk/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/XLXP1StreamReaderWrapper.java Sat Nov  7 12:38:14 2015
@@ -22,21 +22,11 @@ package org.apache.axiom.util.stax.diale
 import javax.xml.namespace.NamespaceContext;
 import javax.xml.stream.XMLStreamReader;
 
-import org.apache.axiom.ext.stax.DTDReader;
-
 class XLXP1StreamReaderWrapper extends XLXPStreamReaderWrapper {
     public XLXP1StreamReaderWrapper(XMLStreamReader parent) {
         super(parent);
     }
 
-    public Object getProperty(String name) {
-        if (DTDReader.PROPERTY.equals(name)) {
-            return new XLXP1DTDReaderImpl(getParent());
-        } else {
-            return super.getProperty(name);
-        }
-    }
-
     public String getEncoding() {
         // Under some circumstances, some versions of XLXP return an empty string instead of null
         String encoding = super.getEncoding();

Modified: webservices/axiom/trunk/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/XLXPStreamReaderWrapper.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/XLXPStreamReaderWrapper.java?rev=1713115&r1=1713114&r2=1713115&view=diff
==============================================================================
--- webservices/axiom/trunk/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/XLXPStreamReaderWrapper.java (original)
+++ webservices/axiom/trunk/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/XLXPStreamReaderWrapper.java Sat Nov  7 12:38:14 2015
@@ -20,6 +20,7 @@ package org.apache.axiom.util.stax.diale
 
 import javax.xml.stream.XMLStreamReader;
 
+import org.apache.axiom.ext.stax.DTDReader;
 import org.apache.axiom.ext.stax.DelegatingXMLStreamReader;
 import org.apache.axiom.util.stax.wrapper.XMLStreamReaderWrapper;
 
@@ -28,6 +29,20 @@ class XLXPStreamReaderWrapper extends XM
         super(parent);
     }
 
+    @Override
+    public Object getProperty(String name) {
+        if (DTDReader.PROPERTY.equals(name)) {
+            return new AbstractDTDReader(getParent()) {
+                @Override
+                protected String getDocumentTypeDeclaration(XMLStreamReader reader) {
+                    return (String)reader.getProperty("javax.xml.stream.dtd.declaration");
+                }
+            };
+        } else {
+            return super.getProperty(name);
+        }
+    }
+
     public boolean isCharacters() {
         // XLXP returns true for SPACE events as well; this is not correct
         return getEventType() == CHARACTERS;

Modified: webservices/axiom/trunk/axiom-api/src/test/java/org/apache/axiom/util/stax/dialect/DialectTestSuite.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/axiom-api/src/test/java/org/apache/axiom/util/stax/dialect/DialectTestSuite.java?rev=1713115&r1=1713114&r2=1713115&view=diff
==============================================================================
--- webservices/axiom/trunk/axiom-api/src/test/java/org/apache/axiom/util/stax/dialect/DialectTestSuite.java (original)
+++ webservices/axiom/trunk/axiom-api/src/test/java/org/apache/axiom/util/stax/dialect/DialectTestSuite.java Sat Nov  7 12:38:14 2015
@@ -63,6 +63,9 @@ public class DialectTestSuite extends Te
         // SJSXP and XLXP don't report whitespace in prolog
         builder.exclude(TestGetTextInProlog.class, "(|(implementation=sjsxp-1.0.1.jar)(implementation=com.ibm.ws.prereq.xlxp.jar)(implementation=xml.jar))");
         
+        // DTDReader is not supported for all StAX implementations
+        builder.exclude(TestDTDReader.class, "(|(implementation=stax-1.2.0.jar)(implementation=wstx-asl-3.*))");
+        
         // TODO: investigate why this fails; didn't occur with the old TestCloseInputStream test
         builder.exclude(TestClose.class, "(&(implementation=stax-1.2.0.jar)(type=InputStream))");
         

Modified: webservices/axiom/trunk/axiom-api/src/test/java/org/apache/axiom/util/stax/dialect/DialectTestSuiteBuilder.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/axiom-api/src/test/java/org/apache/axiom/util/stax/dialect/DialectTestSuiteBuilder.java?rev=1713115&r1=1713114&r2=1713115&view=diff
==============================================================================
--- webservices/axiom/trunk/axiom-api/src/test/java/org/apache/axiom/util/stax/dialect/DialectTestSuiteBuilder.java (original)
+++ webservices/axiom/trunk/axiom-api/src/test/java/org/apache/axiom/util/stax/dialect/DialectTestSuiteBuilder.java Sat Nov  7 12:38:14 2015
@@ -52,6 +52,7 @@ public class DialectTestSuiteBuilder ext
         addTest(new TestDisallowDoctypeDeclWithDenialOfService(staxImpl));
         addTest(new TestDisallowDoctypeDeclWithExternalSubset(staxImpl));
         addTest(new TestDisallowDoctypeDeclWithInternalSubset(staxImpl));
+        addTest(new TestDTDReader(staxImpl));
         addTest(new TestEnableCDataReporting(staxImpl));
         addTest(new TestGetAttributeNamespaceWithNoPrefix(staxImpl));
         addTest(new TestGetCharacterEncodingScheme(staxImpl));

Added: webservices/axiom/trunk/axiom-api/src/test/java/org/apache/axiom/util/stax/dialect/TestDTDReader.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/axiom-api/src/test/java/org/apache/axiom/util/stax/dialect/TestDTDReader.java?rev=1713115&view=auto
==============================================================================
--- webservices/axiom/trunk/axiom-api/src/test/java/org/apache/axiom/util/stax/dialect/TestDTDReader.java (added)
+++ webservices/axiom/trunk/axiom-api/src/test/java/org/apache/axiom/util/stax/dialect/TestDTDReader.java Sat Nov  7 12:38:14 2015
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.axiom.util.stax.dialect;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import java.io.InputStream;
+
+import javax.xml.stream.XMLStreamReader;
+
+import org.apache.axiom.ext.stax.DTDReader;
+import org.apache.axiom.ts.xml.XMLSample;
+
+public class TestDTDReader extends DialectTestCase {
+    public TestDTDReader(StAXImplementation staxImpl) {
+        super(staxImpl);
+    }
+
+    @Override
+    protected void runTest() throws Throwable {
+        InputStream in = XMLSample.DTD_FULL.getInputStream();
+        try {
+            XMLStreamReader reader = staxImpl.newNormalizedXMLInputFactory().createXMLStreamReader(XMLSample.DTD_FULL.getUrl().toString(), in);
+            while (reader.next() != XMLStreamReader.DTD) {
+                // Just loop
+            }
+            DTDReader dtdReader = (DTDReader)reader.getProperty(DTDReader.PROPERTY);
+            assertThat(dtdReader).isNotNull();
+            assertThat(dtdReader.getRootName()).isEqualTo("root");
+            assertThat(dtdReader.getSystemId()).isEqualTo("dtd-full.dtd");
+            assertThat(dtdReader.getPublicId()).isEqualTo("-//TEST//Dummy DTD//EN");
+            reader.close();
+        } finally {
+            in.close();
+        }
+    }
+}

Propchange: webservices/axiom/trunk/axiom-api/src/test/java/org/apache/axiom/util/stax/dialect/TestDTDReader.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: webservices/axiom/trunk/systests/integration-tests/src/test/java/org/apache/axiom/om/SAXResultSAXParserTest.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/systests/integration-tests/src/test/java/org/apache/axiom/om/SAXResultSAXParserTest.java?rev=1713115&r1=1713114&r2=1713115&view=diff
==============================================================================
--- webservices/axiom/trunk/systests/integration-tests/src/test/java/org/apache/axiom/om/SAXResultSAXParserTest.java (original)
+++ webservices/axiom/trunk/systests/integration-tests/src/test/java/org/apache/axiom/om/SAXResultSAXParserTest.java Sat Nov  7 12:38:14 2015
@@ -75,7 +75,7 @@ public class SAXResultSAXParserTest exte
     private static void addTests(TestSuite suite, SAXParserFactory factory, String name) throws Exception {
         for (XMLSample file : getInstances(XMLSample.class)) {
             // TODO
-            if (file.getName().equals("entity-reference-external-subset.xml") && name.equals("crimson")) {
+            if (file.hasExternalSubset() && name.equals("crimson")) {
                 continue;
             }
             suite.addTest(new SAXResultSAXParserTest(

Modified: webservices/axiom/trunk/testing/xml-testsuite/src/main/java/org/apache/axiom/ts/xml/XMLSample.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/testing/xml-testsuite/src/main/java/org/apache/axiom/ts/xml/XMLSample.java?rev=1713115&r1=1713114&r2=1713115&view=diff
==============================================================================
--- webservices/axiom/trunk/testing/xml-testsuite/src/main/java/org/apache/axiom/ts/xml/XMLSample.java (original)
+++ webservices/axiom/trunk/testing/xml-testsuite/src/main/java/org/apache/axiom/ts/xml/XMLSample.java Sat Nov  7 12:38:14 2015
@@ -45,6 +45,12 @@ public class XMLSample extends MessageSa
     
     public static final XMLSample ENTITY_REFERENCE_NESTED = new XMLSample("entity-reference-nested.xml");
     
+    /**
+     * An XML document that has a document type declaration with a system ID, public ID and internal
+     * subset.
+     */
+    public static final XMLSample DTD_FULL = new XMLSample("dtd-full.xml");
+    
     private static final DocumentBuilder documentBuilder;
     
     static {

Modified: webservices/axiom/trunk/testing/xml-testsuite/src/main/java/org/apache/axiom/ts/xml/XMLSampleProperties.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/testing/xml-testsuite/src/main/java/org/apache/axiom/ts/xml/XMLSampleProperties.java?rev=1713115&r1=1713114&r2=1713115&view=diff
==============================================================================
--- webservices/axiom/trunk/testing/xml-testsuite/src/main/java/org/apache/axiom/ts/xml/XMLSampleProperties.java (original)
+++ webservices/axiom/trunk/testing/xml-testsuite/src/main/java/org/apache/axiom/ts/xml/XMLSampleProperties.java Sat Nov  7 12:38:14 2015
@@ -67,7 +67,7 @@ final class XMLSampleProperties {
             }
             reader.close();
         } catch (XMLStreamException ex) {
-            throw new Error("Unable to parse " + sample.getUrl());
+            throw new Error("Unable to parse " + sample.getUrl(), ex);
         }
         this.hasDTD = hasDTD;
         this.hasExternalSubset = hasExternalSubset;

Added: webservices/axiom/trunk/testing/xml-testsuite/src/main/resources/org/apache/axiom/ts/xml/dtd-full.dtd
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/testing/xml-testsuite/src/main/resources/org/apache/axiom/ts/xml/dtd-full.dtd?rev=1713115&view=auto
==============================================================================
--- webservices/axiom/trunk/testing/xml-testsuite/src/main/resources/org/apache/axiom/ts/xml/dtd-full.dtd (added)
+++ webservices/axiom/trunk/testing/xml-testsuite/src/main/resources/org/apache/axiom/ts/xml/dtd-full.dtd Sat Nov  7 12:38:14 2015
@@ -0,0 +1 @@
+<!ELEMENT root (#PCDATA)>

Added: webservices/axiom/trunk/testing/xml-testsuite/src/main/resources/org/apache/axiom/ts/xml/dtd-full.xml
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/testing/xml-testsuite/src/main/resources/org/apache/axiom/ts/xml/dtd-full.xml?rev=1713115&view=auto
==============================================================================
--- webservices/axiom/trunk/testing/xml-testsuite/src/main/resources/org/apache/axiom/ts/xml/dtd-full.xml (added)
+++ webservices/axiom/trunk/testing/xml-testsuite/src/main/resources/org/apache/axiom/ts/xml/dtd-full.xml Sat Nov  7 12:38:14 2015
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE root PUBLIC "-//TEST//Dummy DTD//EN" "dtd-full.dtd" [
+  <!ENTITY testentref "test">
+]>
+<root>
+    &testentref;
+</root>

Propchange: webservices/axiom/trunk/testing/xml-testsuite/src/main/resources/org/apache/axiom/ts/xml/dtd-full.xml
------------------------------------------------------------------------------
    svn:eol-style = native