You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@abdera.apache.org by ve...@apache.org on 2012/08/19 09:57:55 UTC
svn commit: r1374703 - in /abdera/java/branches/axiom-upgrade: ./
dependencies/i18n/src/main/java/org/apache/abdera/i18n/text/io/
parser/src/main/java/org/apache/abdera/parser/stax/
parser/src/test/java/org/apache/abdera/test/parser/stax/ parser/src/te...
Author: veithen
Date: Sun Aug 19 07:57:55 2012
New Revision: 1374703
URL: http://svn.apache.org/viewvc?rev=1374703&view=rev
Log:
Merged latest changes from trunk.
Modified:
abdera/java/branches/axiom-upgrade/ (props changed)
abdera/java/branches/axiom-upgrade/dependencies/i18n/src/main/java/org/apache/abdera/i18n/text/io/CompressionUtil.java (props changed)
abdera/java/branches/axiom-upgrade/parser/src/main/java/org/apache/abdera/parser/stax/FOMBuilder.java
abdera/java/branches/axiom-upgrade/parser/src/main/java/org/apache/abdera/parser/stax/FOMDocument.java
abdera/java/branches/axiom-upgrade/parser/src/main/java/org/apache/abdera/parser/stax/FOMStAXFilter.java
abdera/java/branches/axiom-upgrade/parser/src/test/java/org/apache/abdera/test/parser/stax/ParserOptionsTest.java
abdera/java/branches/axiom-upgrade/parser/src/test/resources/parseroptionstest.xml
abdera/java/branches/axiom-upgrade/server/src/main/java/org/apache/abdera/protocol/server/filters/OpenSearchFilter.java (props changed)
Propchange: abdera/java/branches/axiom-upgrade/
------------------------------------------------------------------------------
Merged /abdera/java/trunk:r1372274-1374702
Propchange: abdera/java/branches/axiom-upgrade/dependencies/i18n/src/main/java/org/apache/abdera/i18n/text/io/CompressionUtil.java
------------------------------------------------------------------------------
Merged /abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/text/io/CompressionUtil.java:r1372274-1374702
Modified: abdera/java/branches/axiom-upgrade/parser/src/main/java/org/apache/abdera/parser/stax/FOMBuilder.java
URL: http://svn.apache.org/viewvc/abdera/java/branches/axiom-upgrade/parser/src/main/java/org/apache/abdera/parser/stax/FOMBuilder.java?rev=1374703&r1=1374702&r2=1374703&view=diff
==============================================================================
--- abdera/java/branches/axiom-upgrade/parser/src/main/java/org/apache/abdera/parser/stax/FOMBuilder.java (original)
+++ abdera/java/branches/axiom-upgrade/parser/src/main/java/org/apache/abdera/parser/stax/FOMBuilder.java Sun Aug 19 07:57:55 2012
@@ -17,12 +17,9 @@
*/
package org.apache.abdera.parser.stax;
-import java.util.Map;
-
import javax.xml.namespace.QName;
import javax.xml.stream.XMLStreamReader;
-import org.apache.abdera.filter.ParseFilter;
import org.apache.abdera.model.Content;
import org.apache.abdera.model.Document;
import org.apache.abdera.model.Element;
@@ -34,12 +31,10 @@ import org.apache.axiom.om.OMContainer;
import org.apache.axiom.om.OMDocument;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMException;
-import org.apache.axiom.om.OMNamespace;
import org.apache.axiom.om.OMNode;
import org.apache.axiom.om.impl.OMContainerEx;
import org.apache.axiom.om.impl.OMNodeEx;
import org.apache.axiom.om.impl.builder.StAXOMBuilder;
-import org.apache.axiom.om.impl.util.OMSerializerUtil;
@SuppressWarnings( {"unchecked", "deprecation"})
public class FOMBuilder extends StAXOMBuilder implements Constants {
@@ -87,14 +82,6 @@ public class FOMBuilder extends StAXOMBu
return ctype;
}
- private boolean isAcceptableToParse(QName qname, boolean attribute) {
- if (parserOptions == null)
- return true;
- ParseFilter filter = parserOptions.getParseFilter();
- return (filter != null) ? (!attribute) ? filter.acceptable(qname) : filter.acceptable(parser.getName(), qname)
- : true;
- }
-
/**
* Method next.
*
@@ -110,14 +97,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;
- }
-
@Override
protected OMElement constructNode(OMContainer parent, String name) {
OMElement element = null;
@@ -126,9 +105,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);
@@ -136,30 +112,6 @@ public class FOMBuilder extends StAXOMBu
return element;
}
- @Override
- protected void processAttributes(OMElement node) {
- int attribCount = parser.getAttributeCount();
- for (int i = 0; i < attribCount; i++) {
- QName attr = parser.getAttributeName(i);
- if (isAcceptableToParse(attr, true)) {
- String uri = parser.getAttributeNamespace(i);
- String prefix = parser.getAttributePrefix(i);
- OMNamespace namespace = null;
- if (uri != null && uri.length() > 0) {
- namespace = node.findNamespace(uri, prefix);
- if (namespace == null) {
- if (prefix == null || "".equals(prefix)) {
- prefix = OMSerializerUtil.getNextNSPrefix();
- }
- namespace = node.declareNamespace(uri, prefix);
- }
- }
- String value = parser.getAttributeValue(i);
- node.addAttribute(parser.getAttributeLocalName(i), value, namespace);
- }
- }
- }
-
public <T extends Element> Document<T> getFomDocument() {
while (!indoc && !done) {
next();
Modified: abdera/java/branches/axiom-upgrade/parser/src/main/java/org/apache/abdera/parser/stax/FOMDocument.java
URL: http://svn.apache.org/viewvc/abdera/java/branches/axiom-upgrade/parser/src/main/java/org/apache/abdera/parser/stax/FOMDocument.java?rev=1374703&r1=1374702&r2=1374703&view=diff
==============================================================================
--- abdera/java/branches/axiom-upgrade/parser/src/main/java/org/apache/abdera/parser/stax/FOMDocument.java (original)
+++ abdera/java/branches/axiom-upgrade/parser/src/main/java/org/apache/abdera/parser/stax/FOMDocument.java Sun Aug 19 07:57:55 2012
@@ -192,10 +192,12 @@ public class FOMDocument<T extends Eleme
OMComment comment = (OMComment)node;
factory.createOMComment(omdoc, comment.getValue());
break;
- case OMNode.DTD_NODE:
- OMDocType doctype = (OMDocType)node;
- factory.createOMDocType(omdoc, doctype.getValue());
- break;
+ // TODO: Decide what to do with this code; it will no longer work in Axiom 1.2.14 (because of AXIOM-437).
+ // On the other hand, since we filter out DTDs, this code is never triggered.
+// case OMNode.DTD_NODE:
+// OMDocType doctype = (OMDocType)node;
+// factory.createOMDocType(omdoc, doctype.getValue());
+// break;
case OMNode.ELEMENT_NODE:
Element el = (Element)node;
omdoc.addChild((OMNode)el.clone());
Modified: abdera/java/branches/axiom-upgrade/parser/src/main/java/org/apache/abdera/parser/stax/FOMStAXFilter.java
URL: http://svn.apache.org/viewvc/abdera/java/branches/axiom-upgrade/parser/src/main/java/org/apache/abdera/parser/stax/FOMStAXFilter.java?rev=1374703&r1=1374702&r2=1374703&view=diff
==============================================================================
--- abdera/java/branches/axiom-upgrade/parser/src/main/java/org/apache/abdera/parser/stax/FOMStAXFilter.java (original)
+++ abdera/java/branches/axiom-upgrade/parser/src/main/java/org/apache/abdera/parser/stax/FOMStAXFilter.java Sun Aug 19 07:57:55 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,7 +49,10 @@ class FOMStAXFilter extends XMLStreamRea
private boolean ignorePI = false;
private int depthInSkipElement;
private int altEventType;
+ private QName altQName;
private String altText;
+ private int[] attributeMap;
+ private int attributeCount;
FOMStAXFilter(XMLStreamReader parent, ParserOptions parserOptions) {
super(parent);
@@ -58,6 +63,7 @@ class FOMStAXFilter extends XMLStreamRea
ignoreWhitespace = parseFilter.getIgnoreWhitespace();
ignoreComments = parseFilter.getIgnoreComments();
ignorePI = parseFilter.getIgnoreProcessingInstructions();
+ attributeMap = new int[8];
}
}
resetEvent();
@@ -65,17 +71,39 @@ class FOMStAXFilter extends XMLStreamRea
private void resetEvent() {
altEventType = -1;
+ altQName = null;
altText = null;
+ attributeCount = -1;
}
- private boolean isAcceptableToParse(QName qname, boolean attribute) {
- if (parserOptions == null)
- return true;
- ParseFilter filter = parserOptions.getParseFilter();
- return (filter != null) ? (!attribute) ? filter.acceptable(qname) : filter.acceptable(getName(), qname)
- : true;
+ private void translateQName() {
+ if (parserOptions.isQNameAliasMappingEnabled()) {
+ Map<QName,QName> map = parserOptions.getQNameAliasMap();
+ if (map != null) {
+ altQName = map.get(super.getName());
+ }
+ }
}
-
+
+ private void mapAttributes() {
+ attributeCount = 0;
+ int orgAttCount = super.getAttributeCount();
+ if (orgAttCount > 0) {
+ QName elementQName = super.getName();
+ ParseFilter filter = parserOptions.getParseFilter();
+ for (int i=0; i<orgAttCount; i++) {
+ if (filter.acceptable(elementQName, super.getAttributeName(i))) {
+ if (attributeCount == attributeMap.length) {
+ int[] newAttributeMap = new int[attributeMap.length*2];
+ System.arraycopy(attributeMap, 0, newAttributeMap, 0, attributeMap.length);
+ attributeMap = newAttributeMap;
+ }
+ attributeMap[attributeCount++] = i;
+ }
+ }
+ }
+ }
+
@Override
public int next() throws XMLStreamException {
resetEvent();
@@ -107,10 +135,18 @@ class FOMStAXFilter extends XMLStreamRea
// shouldn't be that big of a problem
continue;
case START_ELEMENT:
- if (!isAcceptableToParse(getName(), false)) {
+ ParseFilter filter = parserOptions.getParseFilter();
+ if (filter != null && !filter.acceptable(super.getName())) {
depthInSkipElement = 1;
continue;
}
+ translateQName();
+ if (attributeMap != null) {
+ mapAttributes();
+ }
+ break;
+ case END_ELEMENT:
+ translateQName();
break;
case SPACE:
if (ignoreWhitespace) {
@@ -157,4 +193,54 @@ 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();
+ }
+
+ @Override
+ public int getAttributeCount() {
+ return attributeCount != -1 ? attributeCount : super.getAttributeCount();
+ }
+
+ @Override
+ public String getAttributeNamespace(int index) {
+ return attributeCount != -1 ? super.getAttributeNamespace(attributeMap[index]) : super.getAttributeNamespace(index);
+ }
+
+ @Override
+ public String getAttributeLocalName(int index) {
+ return attributeCount != -1 ? super.getAttributeLocalName(attributeMap[index]) : super.getAttributeLocalName(index);
+ }
+
+ @Override
+ public String getAttributePrefix(int index) {
+ return attributeCount != -1 ? super.getAttributePrefix(attributeMap[index]) : super.getAttributePrefix(index);
+ }
+
+ @Override
+ public QName getAttributeName(int index) {
+ return attributeCount != -1 ? super.getAttributeName(attributeMap[index]) : super.getAttributeName(index);
+ }
+
+ @Override
+ public String getAttributeType(int index) {
+ return attributeCount != -1 ? super.getAttributeType(attributeMap[index]) : super.getAttributeType(index);
+ }
+
+ @Override
+ public String getAttributeValue(int index) {
+ return attributeCount != -1 ? super.getAttributeValue(attributeMap[index]) : super.getAttributeValue(index);
+ }
}
Modified: abdera/java/branches/axiom-upgrade/parser/src/test/java/org/apache/abdera/test/parser/stax/ParserOptionsTest.java
URL: http://svn.apache.org/viewvc/abdera/java/branches/axiom-upgrade/parser/src/test/java/org/apache/abdera/test/parser/stax/ParserOptionsTest.java?rev=1374703&r1=1374702&r2=1374703&view=diff
==============================================================================
--- abdera/java/branches/axiom-upgrade/parser/src/test/java/org/apache/abdera/test/parser/stax/ParserOptionsTest.java (original)
+++ abdera/java/branches/axiom-upgrade/parser/src/test/java/org/apache/abdera/test/parser/stax/ParserOptionsTest.java Sun Aug 19 07:57:55 2012
@@ -18,14 +18,23 @@
package org.apache.abdera.test.parser.stax;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
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;
+import org.apache.abdera.model.Entry;
import org.apache.abdera.model.Feed;
import org.apache.abdera.parser.Parser;
import org.apache.abdera.parser.ParserOptions;
+import org.apache.abdera.util.filter.AbstractParseFilter;
import org.junit.Test;
public class ParserOptionsTest {
@@ -66,4 +75,37 @@ public class ParserOptionsTest {
"/parseroptionstest.xml"), options);
assertEquals("", doc.getRoot().getEntries().get(0).getSummary());
}
+
+ @Test
+ public void testAttributeFiltering() {
+ final QName filteredAttribute = new QName("urn:test", "attr");
+ Parser parser = abdera.getParser();
+ ParserOptions options = parser.getDefaultParserOptions();
+ options.setParseFilter(new AbstractParseFilter() {
+ public boolean acceptable(QName qname) {
+ return true;
+ }
+
+ public boolean acceptable(QName qname, QName attribute) {
+ return !filteredAttribute.equals(attribute);
+ }
+ });
+ Document<Feed> doc = parser.parse(ParserOptionsTest.class.getResourceAsStream(
+ "/parseroptionstest.xml"), options);
+ Entry entry = doc.getRoot().getEntries().get(0);
+ assertNull(entry.getAttributeValue(filteredAttribute));
+ }
+
+ @Test
+ public void testQNameAliasMapping() {
+ 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/branches/axiom-upgrade/parser/src/test/resources/parseroptionstest.xml
URL: http://svn.apache.org/viewvc/abdera/java/branches/axiom-upgrade/parser/src/test/resources/parseroptionstest.xml?rev=1374703&r1=1374702&r2=1374703&view=diff
==============================================================================
--- abdera/java/branches/axiom-upgrade/parser/src/test/resources/parseroptionstest.xml (original)
+++ abdera/java/branches/axiom-upgrade/parser/src/test/resources/parseroptionstest.xml Sun Aug 19 07:57:55 2012
@@ -2,9 +2,9 @@
<feed xmlns="http://www.w3.org/2005/Atom">
<!-- comment -->
<?pi processing instruction?>
- <entry>
+ <entry x:attr="value" xmlns:x="urn:test">
<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>
Propchange: abdera/java/branches/axiom-upgrade/server/src/main/java/org/apache/abdera/protocol/server/filters/OpenSearchFilter.java
------------------------------------------------------------------------------
Merged /abdera/java/trunk/server/src/main/java/org/apache/abdera/protocol/server/filters/OpenSearchFilter.java:r1372274-1374702