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 2016/03/04 21:05:18 UTC

svn commit: r1733645 - in /webservices/axiom/branches/stax-stream/aspects: core-aspects/src/main/java/org/apache/axiom/core/stream/ core-aspects/src/main/java/org/apache/axiom/core/stream/stax/ om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/

Author: veithen
Date: Fri Mar  4 20:05:18 2016
New Revision: 1733645

URL: http://svn.apache.org/viewvc?rev=1733645&view=rev
Log:
Make more test cases pass.

Added:
    webservices/axiom/branches/stax-stream/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/NamespaceURIInterningFilterHandler.java   (with props)
Modified:
    webservices/axiom/branches/stax-stream/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/stax/StAXPivot.java
    webservices/axiom/branches/stax-stream/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomContainerSupport.aj

Added: webservices/axiom/branches/stax-stream/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/NamespaceURIInterningFilterHandler.java
URL: http://svn.apache.org/viewvc/webservices/axiom/branches/stax-stream/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/NamespaceURIInterningFilterHandler.java?rev=1733645&view=auto
==============================================================================
--- webservices/axiom/branches/stax-stream/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/NamespaceURIInterningFilterHandler.java (added)
+++ webservices/axiom/branches/stax-stream/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/NamespaceURIInterningFilterHandler.java Fri Mar  4 20:05:18 2016
@@ -0,0 +1,40 @@
+/*
+ * 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.core.stream;
+
+public final class NamespaceURIInterningFilterHandler extends XmlHandlerWrapper {
+    public NamespaceURIInterningFilterHandler(XmlHandler parent) {
+        super(parent);
+    }
+
+    @Override
+    public void startElement(String namespaceURI, String localName, String prefix) throws StreamException {
+        super.startElement(namespaceURI.intern(), localName, prefix);
+    }
+
+    @Override
+    public void processAttribute(String namespaceURI, String localName, String prefix, String value, String type, boolean specified) throws StreamException {
+        super.processAttribute(namespaceURI.intern(), localName, prefix, value, type, specified);
+    }
+
+    @Override
+    public void processNamespaceDeclaration(String prefix, String namespaceURI) throws StreamException {
+        super.processNamespaceDeclaration(prefix, namespaceURI.intern());
+    }
+}

Propchange: webservices/axiom/branches/stax-stream/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/NamespaceURIInterningFilterHandler.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: webservices/axiom/branches/stax-stream/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/stax/StAXPivot.java
URL: http://svn.apache.org/viewvc/webservices/axiom/branches/stax-stream/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/stax/StAXPivot.java?rev=1733645&r1=1733644&r2=1733645&view=diff
==============================================================================
--- webservices/axiom/branches/stax-stream/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/stax/StAXPivot.java (original)
+++ webservices/axiom/branches/stax-stream/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/stax/StAXPivot.java Fri Mar  4 20:05:18 2016
@@ -174,7 +174,8 @@ public final class StAXPivot implements
     private String rootName;
     private String publicId;
     private String systemId;
-    private Object text;
+    private Object characterData;
+    private String text;
     // Entity reference name or processing instruction target
     private String name;
     
@@ -312,13 +313,22 @@ public final class StAXPivot implements
 
     @Override
     public void processCharacterData(Object data, boolean ignorable) throws StreamException {
-        if (state == STATE_COLLECT_TEXT) {
-            accumulator.append(data);
-        } else {
-            checkState();
-            eventType = ignorable ? SPACE : CHARACTERS;
-            text = data;
-            state = STATE_EVENT_COMPLETE;
+        switch (state) {
+            case STATE_DEFAULT:
+                eventType = ignorable ? SPACE : CHARACTERS;
+                characterData = data;
+                state = STATE_EVENT_COMPLETE;
+                return;
+            case STATE_COLLECT_TEXT:
+                accumulator.append(data);
+                return;
+            case STATE_NEXT_TAG:
+                // TODO: check that the character data only contains whitespace!
+                break;
+            case STATE_SKIP_CONTENT:
+                break;
+            default:
+                throw new IllegalStateException();
         }
     }
 
@@ -400,6 +410,17 @@ public final class StAXPivot implements
     public int next() throws XMLStreamException {
         try {
             switch (eventType) {
+                case CHARACTERS:
+                case SPACE:
+                    characterData = null;
+                    // Fall through
+                case CDATA:
+                case COMMENT:
+                case PROCESSING_INSTRUCTION:
+                case DTD:
+                case ENTITY_REFERENCE:
+                    text = null;
+                    break;
                 case START_ELEMENT:
                     depth++;
                     break;
@@ -466,8 +487,8 @@ public final class StAXPivot implements
 
     @Override
     public int nextTag() throws XMLStreamException {
-        // TODO Auto-generated method stub
-        return 0;
+        state = STATE_NEXT_TAG;
+        return next();
     }
 
     @Override
@@ -530,7 +551,7 @@ public final class StAXPivot implements
                 // points to a character data event that consists of all whitespace". This
                 // means that this method may return true for a CHARACTER event and we need
                 // to scan the text of the node.
-                String text = this.text.toString();
+                String text = internalGetText();
                 for (int i=0; i<text.length(); i++) {
                     char c = text.charAt(i);
                     if (c != ' ' && c != '\t' && c != '\r' && c != '\n') {
@@ -678,6 +699,13 @@ public final class StAXPivot implements
         return eventType;
     }
 
+    private String internalGetText() {
+        if (text == null && characterData != null) {
+            text = characterData.toString();
+        }
+        return text;
+    }
+    
     @Override
     public String getText() {
         switch (eventType) {
@@ -687,7 +715,7 @@ public final class StAXPivot implements
             case COMMENT:
             case DTD:
             case ENTITY_REFERENCE:
-                return text == null ? null : text.toString();
+                return internalGetText();
             default:
                 throw new IllegalStateException();
         }
@@ -701,17 +729,18 @@ public final class StAXPivot implements
             case SPACE:
             case COMMENT:
                 // TODO: optimize this
-                return text.toString().toCharArray();
+                return internalGetText().toCharArray();
             default:
                 throw new IllegalStateException();
         }
     }
 
     @Override
-    public int getTextCharacters(int sourceStart, char[] target, int targetStart, int length)
-            throws XMLStreamException {
-        // TODO Auto-generated method stub
-        return 0;
+    public int getTextCharacters(int sourceStart, char[] target, int targetStart, int length) throws XMLStreamException {
+        String text = internalGetText();
+        int copied = Math.min(length, text.length()-sourceStart);
+        text.getChars(sourceStart, sourceStart + copied, target, targetStart);
+        return copied;
     }
 
     @Override
@@ -735,7 +764,7 @@ public final class StAXPivot implements
             case SPACE:
             case COMMENT:
                 // TODO: optimize this
-                return text.toString().length();
+                return internalGetText().length();
             default:
                 throw new IllegalStateException();
         }
@@ -824,7 +853,7 @@ public final class StAXPivot implements
     @Override
     public String getPIData() {
         if (eventType == PROCESSING_INSTRUCTION) {
-            return text.toString();
+            return text;
         } else {
             throw new IllegalStateException();
         }
@@ -847,6 +876,6 @@ public final class StAXPivot implements
 
     @Override
     public Object getCharacterData() {
-        return text;
+        return characterData;
     }
 }

Modified: webservices/axiom/branches/stax-stream/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomContainerSupport.aj
URL: http://svn.apache.org/viewvc/webservices/axiom/branches/stax-stream/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomContainerSupport.aj?rev=1733645&r1=1733644&r2=1733645&view=diff
==============================================================================
--- webservices/axiom/branches/stax-stream/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomContainerSupport.aj (original)
+++ webservices/axiom/branches/stax-stream/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomContainerSupport.aj Fri Mar  4 20:05:18 2016
@@ -38,6 +38,7 @@ import org.apache.axiom.core.CoreNode;
 import org.apache.axiom.core.ElementMatcher;
 import org.apache.axiom.core.Mapper;
 import org.apache.axiom.core.stream.NamespaceRepairingFilterHandler;
+import org.apache.axiom.core.stream.NamespaceURIInterningFilterHandler;
 import org.apache.axiom.core.stream.StreamException;
 import org.apache.axiom.core.stream.XmlHandler;
 import org.apache.axiom.core.stream.sax.XmlHandlerContentHandler;
@@ -61,6 +62,7 @@ import org.apache.axiom.om.impl.common.O
 import org.apache.axiom.om.impl.common.SAXResultContentHandler;
 import org.apache.axiom.om.impl.common.serializer.pull.OMXMLStreamReaderExAdapter;
 import org.apache.axiom.om.impl.common.serializer.pull.PullSerializer;
+import org.apache.axiom.om.impl.common.serializer.push.NamespaceContextPreservationFilterHandler;
 import org.apache.axiom.om.impl.common.serializer.push.XmlDeclarationRewriterHandler;
 import org.apache.axiom.om.impl.common.serializer.push.XsiTypeFilterHandler;
 import org.apache.axiom.om.impl.common.serializer.push.sax.XMLReaderImpl;
@@ -128,8 +130,18 @@ public aspect AxiomContainerSupport {
 //        return reader;
         
         StAXPivot pivot = new StAXPivot(AxiomXMLStreamReaderExtensionFactory.INSTANCE);
+        XmlHandler handler = pivot;
+        if (configuration.isNamespaceURIInterning()) {
+            handler = new NamespaceURIInterningFilterHandler(handler);
+        }
+        if (configuration.isPreserveNamespaceContext()) {
+            CoreElement contextElement = getContextElement();
+            if (contextElement != null) {
+                handler = new NamespaceContextPreservationFilterHandler(handler, contextElement);
+            }
+        }
         try {
-            pivot.setReader(coreGetReader(pivot, cache));
+            pivot.setReader(coreGetReader(handler, cache));
         } catch (StreamException ex) {
             throw new OMException(ex);
         }