You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@abdera.apache.org by jm...@apache.org on 2009/05/04 23:12:35 UTC
svn commit: r771446 - in /abdera/java/trunk:
core/src/main/java/org/apache/abdera/factory/StreamBuilder.java
core/src/main/java/org/apache/abdera/writer/StreamWriter.java
parser/src/main/java/org/apache/abdera/parser/stax/StaxStreamWriter.java
Author: jmsnell
Date: Mon May 4 21:12:34 2009
New Revision: 771446
URL: http://svn.apache.org/viewvc?rev=771446&view=rev
Log:
One fix for two issues:
https://issues.apache.org/jira/browse/ABDERA-213
https://issues.apache.org/jira/browse/ABDERA-211
No way to explicitly declare namespaces using StreamWriter interface
StreamWriter interface not outputting correct namespace for atom:link element in service docs
Modified:
abdera/java/trunk/core/src/main/java/org/apache/abdera/factory/StreamBuilder.java
abdera/java/trunk/core/src/main/java/org/apache/abdera/writer/StreamWriter.java
abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/StaxStreamWriter.java
Modified: abdera/java/trunk/core/src/main/java/org/apache/abdera/factory/StreamBuilder.java
URL: http://svn.apache.org/viewvc/abdera/java/trunk/core/src/main/java/org/apache/abdera/factory/StreamBuilder.java?rev=771446&r1=771445&r2=771446&view=diff
==============================================================================
--- abdera/java/trunk/core/src/main/java/org/apache/abdera/factory/StreamBuilder.java (original)
+++ abdera/java/trunk/core/src/main/java/org/apache/abdera/factory/StreamBuilder.java Mon May 4 21:12:34 2009
@@ -849,5 +849,15 @@
public StreamBuilder writeUpdated(String date) {
return (StreamBuilder)super.writeUpdated(date);
}
+
+ public StreamBuilder setPrefix(String prefix, String uri) {
+ if (!(current instanceof Element)) throw new IllegalStateException("Not currently an element");
+ ((Element)current).declareNS(uri, prefix);
+ return this;
+ }
+
+ public StreamBuilder writeNamespace(String prefix, String uri) {
+ return setPrefix(prefix,uri);
+ }
}
Modified: abdera/java/trunk/core/src/main/java/org/apache/abdera/writer/StreamWriter.java
URL: http://svn.apache.org/viewvc/abdera/java/trunk/core/src/main/java/org/apache/abdera/writer/StreamWriter.java?rev=771446&r1=771445&r2=771446&view=diff
==============================================================================
--- abdera/java/trunk/core/src/main/java/org/apache/abdera/writer/StreamWriter.java (original)
+++ abdera/java/trunk/core/src/main/java/org/apache/abdera/writer/StreamWriter.java Mon May 4 21:12:34 2009
@@ -1101,5 +1101,15 @@
* Write the xml:lang attribute
*/
StreamWriter writeLanguage(Locale locale);
+
+ /**
+ * Specify the namespace prefix
+ */
+ StreamWriter setPrefix(String prefix, String uri);
+
+ /**
+ * Write a namespace declaration
+ */
+ StreamWriter writeNamespace(String prefix, String uri);
}
Modified: abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/StaxStreamWriter.java
URL: http://svn.apache.org/viewvc/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/StaxStreamWriter.java?rev=771446&r1=771445&r2=771446&view=diff
==============================================================================
--- abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/StaxStreamWriter.java (original)
+++ abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/StaxStreamWriter.java Mon May 4 21:12:34 2009
@@ -26,6 +26,7 @@
import java.util.Stack;
import javax.xml.namespace.NamespaceContext;
+import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter;
@@ -69,27 +70,79 @@
public StreamWriter setWriter(java.io.Writer writer) {
try {
- this.writer = StAXUtils.createXMLStreamWriter(writer);
+ this.writer = createXMLStreamWriter(writer);
} catch (Exception e) {
throw new RuntimeException(e);
}
return this;
}
- public StreamWriter setOutputStream(java.io.OutputStream out) {
- try {
- this.writer = StAXUtils.createXMLStreamWriter(out,"UTF-8");
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- return this;
+
+ private static XMLStreamWriter createXMLStreamWriter(
+ Writer out)
+ throws XMLStreamException {
+ XMLOutputFactory outputFactory =
+ StAXUtils.getXMLOutputFactory();
+ Object curval =
+ outputFactory.getProperty(
+ XMLOutputFactory.IS_REPAIRING_NAMESPACES);
+ try {
+ outputFactory.setProperty(
+ XMLOutputFactory.IS_REPAIRING_NAMESPACES,
+ true);
+ XMLStreamWriter writer =
+ outputFactory.createXMLStreamWriter(out);
+ return writer;
+ } finally {
+ outputFactory.setProperty(
+ XMLOutputFactory.IS_REPAIRING_NAMESPACES,
+ curval);
+ StAXUtils.releaseXMLOutputFactory(outputFactory);
+ }
}
- public StreamWriter setOutputStream(java.io.OutputStream out, String charset) {
- try {
- this.writer = StAXUtils.createXMLStreamWriter(out,charset);
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- return this;
+
+ public StreamWriter setOutputStream(
+ java.io.OutputStream out) {
+ try {
+ this.writer = createXMLStreamWriter(out,"UTF-8");
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ return this;
+ }
+
+ private static XMLStreamWriter createXMLStreamWriter(
+ OutputStream out,
+ String encoding)
+ throws XMLStreamException {
+ XMLOutputFactory outputFactory =
+ StAXUtils.getXMLOutputFactory();
+ Object curval =
+ outputFactory.getProperty(
+ XMLOutputFactory.IS_REPAIRING_NAMESPACES);
+ try {
+ outputFactory.setProperty(
+ XMLOutputFactory.IS_REPAIRING_NAMESPACES,
+ true);
+ XMLStreamWriter writer =
+ outputFactory.createXMLStreamWriter(out, encoding);
+ return writer;
+ } finally {
+ outputFactory.setProperty(
+ XMLOutputFactory.IS_REPAIRING_NAMESPACES,
+ curval);
+ StAXUtils.releaseXMLOutputFactory(outputFactory);
+ }
+ }
+
+ public StreamWriter setOutputStream(
+ java.io.OutputStream out,
+ String charset) {
+ try {
+ this.writer = createXMLStreamWriter(out,charset);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ return this;
}
public StreamWriter startDocument(String xmlversion, String charset) {
@@ -154,8 +207,8 @@
private boolean needToWriteNamespace(String prefix, String namespace) {
NamespaceContext nc = writer.getNamespaceContext();
- String uri = nc.getNamespaceURI(prefix);
- return uri != null ? !uri.equals(namespace) : true;
+ String uri = nc.getNamespaceURI(prefix);
+ return uri != null ? !uri.equals(namespace) : true;
}
public StreamWriter startElement(
@@ -163,6 +216,8 @@
String namespace,
String prefix) {
try {
+ if (prefix == null || prefix.equals(""))
+ prefix = writer.getPrefix(namespace);
if (autoindent && textwritten == 0) indent();
push();
if (prefix != null && !prefix.equals("")) {
@@ -178,7 +233,7 @@
name,
namespace);
if (needToWriteNamespace(prefix,namespace))
- writer.writeDefaultNamespace(namespace);
+ writeNamespace(prefix,namespace,false);
} else {
writer.writeStartElement("",name,"");
writer.writeDefaultNamespace("");
@@ -343,4 +398,16 @@
throw new RuntimeException(e);
}
}
+
+ public StreamWriter setPrefix(
+ String prefix,
+ String uri) {
+ try {
+ writer.setPrefix(prefix, uri);
+ } catch (XMLStreamException e) {
+ throw new RuntimeException(e);
+ }
+ return this;
+ }
+
}