You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@abdera.apache.org by James M Snell <ja...@gmail.com> on 2008/03/22 21:26:39 UTC
Re: svn commit: r640073 - /incubator/abdera/java/branches/abdera-0.4.0-incubating/parser/src/main/java/org/apache/abdera/parser/stax/StaxStreamWriter.java
This fix needs to go out with the 0.4.0 release. The bug would lead to
invalid Atom documents being produced in certain circumstances using the
StreamWriter.
- James
jmsnell@apache.org wrote:
> Author: jmsnell
> Date: Sat Mar 22 13:23:52 2008
> New Revision: 640073
>
> URL: http://svn.apache.org/viewvc?rev=640073&view=rev
> Log:
> Fix a pretty serious bug in the StreamWriter implementation that messed up the serialization of default namespaces and would produce invalid Atom documents
>
> Modified:
> incubator/abdera/java/branches/abdera-0.4.0-incubating/parser/src/main/java/org/apache/abdera/parser/stax/StaxStreamWriter.java
>
> Modified: incubator/abdera/java/branches/abdera-0.4.0-incubating/parser/src/main/java/org/apache/abdera/parser/stax/StaxStreamWriter.java
> URL: http://svn.apache.org/viewvc/incubator/abdera/java/branches/abdera-0.4.0-incubating/parser/src/main/java/org/apache/abdera/parser/stax/StaxStreamWriter.java?rev=640073&r1=640072&r2=640073&view=diff
> ==============================================================================
> --- incubator/abdera/java/branches/abdera-0.4.0-incubating/parser/src/main/java/org/apache/abdera/parser/stax/StaxStreamWriter.java (original)
> +++ incubator/abdera/java/branches/abdera-0.4.0-incubating/parser/src/main/java/org/apache/abdera/parser/stax/StaxStreamWriter.java Sat Mar 22 13:23:52 2008
> @@ -25,6 +25,7 @@
> import java.util.Map;
> import java.util.Stack;
>
> +import javax.xml.namespace.NamespaceContext;
> import javax.xml.stream.XMLStreamException;
> import javax.xml.stream.XMLStreamWriter;
>
> @@ -150,6 +151,12 @@
> }
> }
>
> + private boolean needToWriteNamespace(String prefix, String namespace) {
> + NamespaceContext nc = writer.getNamespaceContext();
> + String uri = nc.getNamespaceURI(prefix);
> + return uri != null ? !uri.equals(namespace) : true;
> + }
> +
> public StreamWriter startElement(
> String name,
> String namespace,
> @@ -157,21 +164,24 @@
> try {
> if (autoindent && textwritten == 0) indent();
> push();
> - if (prefix != null) {
> + if (prefix != null && !prefix.equals("")) {
> writer.writeStartElement(
> prefix,
> name,
> namespace);
> + if (needToWriteNamespace(prefix,namespace))
> + writeNamespace(prefix,namespace,false);
> } else if (namespace != null) {
> writer.writeStartElement(
> "",
> name,
> namespace);
> + if (needToWriteNamespace(prefix,namespace))
> + writer.writeDefaultNamespace(namespace);
> } else {
> writer.writeStartElement("",name,"");
> writer.writeDefaultNamespace("");
> }
> - writeNamespace(prefix,namespace,false);
> if (autoflush) writer.flush();
> } catch(XMLStreamException e) {
> throw new RuntimeException(e);
> @@ -227,6 +237,26 @@
> return writeId(FOMHelper.generateUuid());
> }
>
> + public StreamWriter writeDefaultNamespace(String uri) {
> + try {
> + writer.writeDefaultNamespace(uri);
> + } catch (XMLStreamException e) {
> + throw new RuntimeException(e);
> + }
> + return this;
> + }
> +
> + public StreamWriter writeNamespace(
> + String prefix,
> + String uri) {
> + try {
> + writer.writeNamespace(prefix, uri);
> + } catch (XMLStreamException e) {
> + throw new RuntimeException(e);
> + }
> + return this;
> + }
> +
> public StreamWriter writeAttribute(
> String name,
> String namespace,
>
>
>