Author: veithen
Date: Sat Aug 18 10:35:25 2012
New Revision: 1374550

URL: http://svn.apache.org/viewvc?rev=1374550&view=rev
Log:
Fixed the qnameAliasMap stuff. It was not exactly working as expected because 
Axiom resets the namespace information after an element has been created. Moved 
the logic to FOMStAXFilter so that QName aliasing is entirely transparent to 
Axiom. Also added a test case.

Modified:
    
abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMBuilder.java
    
abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMStAXFilter.java
    
abdera/java/trunk/parser/src/test/java/org/apache/abdera/test/parser/stax/ParserOptionsTest.java
    abdera/java/trunk/parser/src/test/resources/parseroptionstest.xml

Modified: 
abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMBuilder.java
URL: 
http://svn.apache.org/viewvc/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMBuilder.java?rev=1374550&r1=1374549&r2=1374550&view=diff
==============================================================================
--- 
abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMBuilder.java
 (original)
+++ 
abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMBuilder.java
 Sat Aug 18 10:35:25 2012
@@ -17,8 +17,6 @@
  */
 package org.apache.abdera.parser.stax;
 
-import java.util.Map;
-
 import javax.xml.namespace.QName;
 import javax.xml.stream.XMLStreamReader;
 
@@ -130,14 +128,6 @@ public class FOMBuilder extends StAXOMBu
         }
     }
 
-    private QName getAlias(QName qname) {
-        Map<QName, QName> map = parserOptions.getQNameAliasMap();
-        if (map == null)
-            return qname;
-        QName alias = map.get(qname);
-        return alias != null ? alias : qname;
-    }
-
     protected OMElement constructNode(OMContainer parent, String name) {
         OMElement element = null;
         if (!indoc) {
@@ -145,9 +135,6 @@ public class FOMBuilder extends StAXOMBu
             indoc = true;
         }
         QName qname = parser.getName();
-        if (parserOptions.isQNameAliasMappingEnabled()) {
-            qname = getAlias(qname);
-        }
         element = fomfactory.createElement(qname, parent, this);
         if (element == null) {
             element = new FOMElement(qname, parent, fomfactory, this);

Modified: 
abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMStAXFilter.java
URL: 
http://svn.apache.org/viewvc/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMStAXFilter.java?rev=1374550&r1=1374549&r2=1374550&view=diff
==============================================================================
--- 
abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMStAXFilter.java
 (original)
+++ 
abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMStAXFilter.java
 Sat Aug 18 10:35:25 2012
@@ -17,6 +17,8 @@
  */
 package org.apache.abdera.parser.stax;
 
+import java.util.Map;
+
 import javax.xml.namespace.QName;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
@@ -47,6 +49,7 @@ class FOMStAXFilter extends XMLStreamRea
     private boolean ignorePI = false;
     private int depthInSkipElement;
     private int altEventType;
+    private QName altQName;
     private String altText;
     
     FOMStAXFilter(XMLStreamReader parent, ParserOptions parserOptions) {
@@ -65,6 +68,7 @@ class FOMStAXFilter extends XMLStreamRea
 
     private void resetEvent() {
         altEventType = -1;
+        altQName = null;
         altText = null;
     }
     
@@ -76,6 +80,15 @@ class FOMStAXFilter extends XMLStreamRea
             : true;
     }
 
+    private void translateQName() {
+        if (parserOptions.isQNameAliasMappingEnabled()) {
+            Map<QName,QName> map = parserOptions.getQNameAliasMap();
+            if (map != null) {
+                altQName = map.get(super.getName());
+            }
+        }
+    }
+    
     @Override
     public int next() throws XMLStreamException {
         resetEvent();
@@ -111,6 +124,10 @@ class FOMStAXFilter extends XMLStreamRea
                             depthInSkipElement = 1;
                             continue;
                         }
+                        translateQName();
+                        break;
+                    case END_ELEMENT:
+                        translateQName();
                         break;
                     case SPACE:
                         if (ignoreWhitespace) {
@@ -157,4 +174,19 @@ class FOMStAXFilter extends XMLStreamRea
     public String getText() {
         return altText != null ? altText : super.getText();
     }
+
+    @Override
+    public String getNamespaceURI() {
+        return altQName != null ? altQName.getNamespaceURI() : 
super.getNamespaceURI();
+    }
+
+    @Override
+    public String getLocalName() {
+        return altQName != null ? altQName.getLocalPart() : 
super.getLocalName();
+    }
+
+    @Override
+    public QName getName() {
+        return altQName != null ? altQName : super.getName();
+    }
 }

Modified: 
abdera/java/trunk/parser/src/test/java/org/apache/abdera/test/parser/stax/ParserOptionsTest.java
URL: 
http://svn.apache.org/viewvc/abdera/java/trunk/parser/src/test/java/org/apache/abdera/test/parser/stax/ParserOptionsTest.java?rev=1374550&r1=1374549&r2=1374550&view=diff
==============================================================================
--- 
abdera/java/trunk/parser/src/test/java/org/apache/abdera/test/parser/stax/ParserOptionsTest.java
 (original)
+++ 
abdera/java/trunk/parser/src/test/java/org/apache/abdera/test/parser/stax/ParserOptionsTest.java
 Sat Aug 18 10:35:25 2012
@@ -18,8 +18,14 @@
 package org.apache.abdera.test.parser.stax;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.xml.namespace.QName;
+
 import org.apache.abdera.Abdera;
 import org.apache.abdera.filter.ParseFilter;
 import org.apache.abdera.model.Document;
@@ -66,4 +72,17 @@ public class ParserOptionsTest {
                 "/parseroptionstest.xml"), options);
         assertEquals("", doc.getRoot().getEntries().get(0).getSummary());
     }
+    
+    @Test
+    public void test() {
+        Parser parser = abdera.getParser();
+        ParserOptions options = parser.getDefaultParserOptions();
+        Map<QName,QName> qnameAliases = new HashMap<QName,QName>();
+        qnameAliases.put(new QName("urn:test", "mylink"), new 
QName("http://www.w3.org/2005/Atom";, "link"));
+        options.setQNameAliasMap(qnameAliases);
+        options.setQNameAliasMappingEnabled(true);
+        Document<Feed> doc = 
parser.parse(ParserOptionsTest.class.getResourceAsStream(
+                "/parseroptionstest.xml"), options);
+        assertFalse(doc.getRoot().getEntries().get(0).getLinks().isEmpty());
+    }
 }

Modified: abdera/java/trunk/parser/src/test/resources/parseroptionstest.xml
URL: 
http://svn.apache.org/viewvc/abdera/java/trunk/parser/src/test/resources/parseroptionstest.xml?rev=1374550&r1=1374549&r2=1374550&view=diff
==============================================================================
--- abdera/java/trunk/parser/src/test/resources/parseroptionstest.xml (original)
+++ abdera/java/trunk/parser/src/test/resources/parseroptionstest.xml Sat Aug 
18 10:35:25 2012
@@ -4,7 +4,7 @@
     <?pi processing instruction?>
     <entry>
         <title>Atom-Powered Robots Run Amok</title>
-        <link href="http://example.org/2003/12/13/atom03"/>
+        <ns:mylink href="http://example.org/2003/12/13/atom03"; 
xmlns:ns="urn:test"/>
         <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>
         <updated>2003-12-13T18:30:02Z</updated>
         <summary>      </summary>


Reply via email to