You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by gn...@apache.org on 2006/06/13 16:00:16 UTC
svn commit: r413897 - in
/incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/jaxp:
DOMStreamReader.java DOMStreamWriter.java W3CDOMStreamReader.java
W3CDOMStreamWriter.java W3CNamespaceContext.java
Author: gnodet
Date: Tue Jun 13 07:00:15 2006
New Revision: 413897
URL: http://svn.apache.org/viewvc?rev=413897&view=rev
Log:
Add an XMLStreamWriter implementation on top of DOM (borrowed from xfire)
Added:
incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/jaxp/DOMStreamWriter.java
incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/jaxp/W3CDOMStreamWriter.java
incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/jaxp/W3CNamespaceContext.java
Modified:
incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/jaxp/DOMStreamReader.java
incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/jaxp/W3CDOMStreamReader.java
Modified: incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/jaxp/DOMStreamReader.java
URL: http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/jaxp/DOMStreamReader.java?rev=413897&r1=413896&r2=413897&view=diff
==============================================================================
--- incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/jaxp/DOMStreamReader.java (original)
+++ incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/jaxp/DOMStreamReader.java Tue Jun 13 07:00:15 2006
@@ -1,17 +1,6 @@
/*
- * Copyright 2005-2006 The Apache Software Foundation.
- *
- * Licensed 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.
+ * This implementation comes from the XFire project
+ * https://svn.codehaus.org/xfire/trunk/xfire/xfire-core/src/main/org/codehaus/xfire/util/stax/
*/
package org.apache.servicemix.jbi.jaxp;
@@ -33,228 +22,263 @@
* @author <a href="mailto:tsztelak@gmail.com">Tomasz Sztelak</a>
*/
public abstract class DOMStreamReader implements XMLStreamReader {
- public Map properties = new HashMap();
+ public Map properties = new HashMap();
- private FastStack frames = new FastStack();
+ private FastStack frames = new FastStack();
- private ElementFrame frame;
+ private ElementFrame frame;
- private int currentEvent = XMLStreamConstants.START_DOCUMENT;
+ private int currentEvent = XMLStreamConstants.START_DOCUMENT;
- /**
- *
- */
- public static class ElementFrame {
- public ElementFrame(Object element) {
- this.element = element;
- }
-
- Object element;
-
- boolean started = false;
-
- boolean ended = false;
-
- int currentChild = -1;
-
- int currentAttribute = -1;
-
- int currentNamespace = -1;
-
- List uris;
-
- List prefixes;
-
- List attributes;
- }
-
- /**
- * @param element
- */
- public DOMStreamReader(ElementFrame frame) {
- this.frame = frame;
- frames.push(this.frame);
- newFrame(frame);
- }
-
- protected ElementFrame getCurrentFrame() {
- return frame;
- }
-
- /* (non-Javadoc)
- * @see javax.xml.stream.XMLStreamReader#getProperty(java.lang.String)
- */
- public Object getProperty(String key) throws IllegalArgumentException {
- return properties.get(key);
- }
-
- /* (non-Javadoc)
- * @see javax.xml.stream.XMLStreamReader#next()
- */
- public int next() throws XMLStreamException {
-
- if (frame.ended) {
- frames.pop();
- if (!frames.isEmpty()) {
- frame = (ElementFrame) frames.peek();
- } else {
- currentEvent = END_DOCUMENT;
- return currentEvent;
- }
- }
-
- if (!frame.started) {
- frame.started = true;
- currentEvent = START_ELEMENT;
- } else if (frame.currentAttribute < getAttributeCount() - 1) {
- frame.currentAttribute++;
- currentEvent = ATTRIBUTE;
- } else if (frame.currentNamespace < getNamespaceCount() - 1) {
- frame.currentNamespace++;
- currentEvent = NAMESPACE;
- } else if (frame.currentChild < getChildCount() - 1) {
- frame.currentChild++;
-
- currentEvent = moveToChild(frame.currentChild);
-
- if (currentEvent == START_ELEMENT) {
- ElementFrame newFrame = getChildFrame(frame.currentChild);
- newFrame.started = true;
- frame = newFrame;
- frames.push(this.frame);
- currentEvent = START_ELEMENT;
-
- newFrame(newFrame);
- }
- } else {
- frame.ended = true;
- currentEvent = END_ELEMENT;
- endElement();
- }
- return currentEvent;
- }
-
- protected void newFrame(ElementFrame newFrame) {
- }
-
- protected void endElement() {
- }
-
- protected abstract int moveToChild(int currentChild);
-
- protected abstract ElementFrame getChildFrame(int currentChild);
-
- protected abstract int getChildCount();
-
- /* (non-Javadoc)
- * @see javax.xml.stream.XMLStreamReader#require(int, java.lang.String, java.lang.String)
- */
- public void require(int arg0, String arg1, String arg2)
- throws XMLStreamException {
- throw new UnsupportedOperationException();
- }
-
- /* (non-Javadoc)
- * @see javax.xml.stream.XMLStreamReader#getElementText()
- */
- public abstract String getElementText() throws XMLStreamException;
-
- /* (non-Javadoc)
- * @see javax.xml.stream.XMLStreamReader#nextTag()
- */
- public int nextTag() throws XMLStreamException {
- while (hasNext()) {
- if (START_ELEMENT == next()) {
- return START_ELEMENT;
- }
- }
- return currentEvent;
- }
-
- /* (non-Javadoc)
- * @see javax.xml.stream.XMLStreamReader#hasNext()
- */
- public boolean hasNext() throws XMLStreamException {
- return !(frames.size() == 0 && frame.ended);
- }
-
- /* (non-Javadoc)
- * @see javax.xml.stream.XMLStreamReader#close()
- */
- public void close() throws XMLStreamException {
- }
-
- /* (non-Javadoc)
- * @see javax.xml.stream.XMLStreamReader#getNamespaceURI(java.lang.String)
- */
- public abstract String getNamespaceURI(String prefix);
-
- /* (non-Javadoc)
- * @see javax.xml.stream.XMLStreamReader#isStartElement()
- */
- public boolean isStartElement() {
- return (currentEvent == START_ELEMENT);
- }
-
- /* (non-Javadoc)
- * @see javax.xml.stream.XMLStreamReader#isEndElement()
- */
- public boolean isEndElement() {
- return (currentEvent == END_ELEMENT);
- }
-
- /* (non-Javadoc)
- * @see javax.xml.stream.XMLStreamReader#isCharacters()
- */
- public boolean isCharacters() {
- return (currentEvent == CHARACTERS);
- }
-
- /* (non-Javadoc)
- * @see javax.xml.stream.XMLStreamReader#isWhiteSpace()
- */
- public boolean isWhiteSpace() {
- return (currentEvent == SPACE);
- }
-
- public int getEventType() {
- return currentEvent;
- }
-
- public int getTextCharacters(int sourceStart, char[] target,
- int targetStart, int length) throws XMLStreamException {
- throw new UnsupportedOperationException();
- }
-
- public boolean hasText() {
- return (currentEvent == CHARACTERS || currentEvent == DTD
- || currentEvent == ENTITY_REFERENCE || currentEvent == COMMENT
- || currentEvent == SPACE);
- }
-
- public Location getLocation() {
- return null;
- }
-
- public boolean hasName() {
- return (currentEvent == START_ELEMENT || currentEvent == END_ELEMENT);
- }
-
- public String getVersion() {
- return null;
- }
-
- public boolean isStandalone() {
- return false;
- }
-
- public boolean standaloneSet() {
- // TODO Auto-generated method stub
- return false;
- }
-
- public String getCharacterEncodingScheme() {
- // TODO Auto-generated method stub
- return null;
- }
+ /**
+ *
+ */
+ public static class ElementFrame {
+ public ElementFrame(Object element, ElementFrame parent) {
+ this.element = element;
+ this.parent = parent;
+ }
+
+ Object element;
+
+ boolean started = false;
+
+ boolean ended = false;
+
+ int currentChild = -1;
+
+ int currentAttribute = -1;
+
+ int currentNamespace = -1;
+
+ int currentElement = -1;
+
+ List uris;
+
+ List prefixes;
+
+ List attributes;
+
+ List allAttributes;
+
+ final ElementFrame parent;
+ }
+
+ /**
+ * @param element
+ */
+ public DOMStreamReader(ElementFrame frame) {
+ this.frame = frame;
+ frames.push(this.frame);
+ newFrame(frame);
+ }
+
+ protected ElementFrame getCurrentFrame() {
+ return frame;
+ }
+
+ /* (non-Javadoc)
+ * @see javax.xml.stream.XMLStreamReader#getProperty(java.lang.String)
+ */
+ public Object getProperty(String key) throws IllegalArgumentException {
+ return properties.get(key);
+ }
+
+ /* (non-Javadoc)
+ * @see javax.xml.stream.XMLStreamReader#next()
+ */
+ public int next() throws XMLStreamException {
+ if (frame.ended) {
+ frames.pop();
+ if (!frames.empty()) {
+ frame = (ElementFrame) frames.peek();
+ } else {
+ currentEvent = END_DOCUMENT;
+ return currentEvent;
+ }
+ }
+
+ if (!frame.started) {
+ frame.started = true;
+ currentEvent = START_ELEMENT;
+ } else if (frame.currentAttribute < getAttributeCount() - 1) {
+ frame.currentAttribute++;
+ currentEvent = ATTRIBUTE;
+ } else if (frame.currentNamespace < getNamespaceCount() - 1) {
+ frame.currentNamespace++;
+ currentEvent = NAMESPACE;
+ } else if (frame.currentChild < getChildCount() - 1) {
+ frame.currentChild++;
+
+ currentEvent = moveToChild(frame.currentChild);
+
+ if (currentEvent == START_ELEMENT) {
+ ElementFrame newFrame = getChildFrame(frame.currentChild);
+ newFrame.started = true;
+ frame = newFrame;
+ frames.push(this.frame);
+ currentEvent = START_ELEMENT;
+
+ newFrame(newFrame);
+ }
+ } else {
+ frame.ended = true;
+ currentEvent = END_ELEMENT;
+ endElement();
+ }
+ return currentEvent;
+ }
+
+ protected void newFrame(ElementFrame newFrame) {
+ }
+
+ protected void endElement() {
+ }
+
+ protected abstract int moveToChild(int currentChild);
+
+ protected abstract ElementFrame getChildFrame(int currentChild);
+
+ protected abstract int getChildCount();
+
+ /* (non-Javadoc)
+ * @see javax.xml.stream.XMLStreamReader#require(int, java.lang.String, java.lang.String)
+ */
+ public void require(int arg0, String arg1, String arg2) throws XMLStreamException {
+ throw new UnsupportedOperationException();
+ }
+
+ /* (non-Javadoc)
+ * @see javax.xml.stream.XMLStreamReader#getElementText()
+ */
+ public abstract String getElementText() throws XMLStreamException;
+
+ /* (non-Javadoc)
+ * @see javax.xml.stream.XMLStreamReader#nextTag()
+ */
+ public int nextTag() throws XMLStreamException {
+ while (hasNext()) {
+ if (START_ELEMENT == next())
+ return START_ELEMENT;
+ }
+
+ return currentEvent;
+ }
+
+ /* (non-Javadoc)
+ * @see javax.xml.stream.XMLStreamReader#hasNext()
+ */
+ public boolean hasNext() throws XMLStreamException {
+ return !(frames.size() == 0 && frame.ended);
+
+ }
+
+ /* (non-Javadoc)
+ * @see javax.xml.stream.XMLStreamReader#close()
+ */
+ public void close() throws XMLStreamException {
+ }
+
+ /* (non-Javadoc)
+ * @see javax.xml.stream.XMLStreamReader#getNamespaceURI(java.lang.String)
+ */
+ public abstract String getNamespaceURI(String prefix);
+
+ /* (non-Javadoc)
+ * @see javax.xml.stream.XMLStreamReader#isStartElement()
+ */
+ public boolean isStartElement() {
+ return (currentEvent == START_ELEMENT);
+ }
+
+ /* (non-Javadoc)
+ * @see javax.xml.stream.XMLStreamReader#isEndElement()
+ */
+ public boolean isEndElement() {
+ return (currentEvent == END_ELEMENT);
+ }
+
+ /* (non-Javadoc)
+ * @see javax.xml.stream.XMLStreamReader#isCharacters()
+ */
+ public boolean isCharacters() {
+ return (currentEvent == CHARACTERS);
+ }
+
+ /* (non-Javadoc)
+ * @see javax.xml.stream.XMLStreamReader#isWhiteSpace()
+ */
+ public boolean isWhiteSpace() {
+ return (currentEvent == SPACE);
+ }
+
+ public int getEventType() {
+ return currentEvent;
+ }
+
+ public int getTextCharacters(int sourceStart, char[] target, int targetStart, int length) throws XMLStreamException {
+ char[] src = getText().toCharArray();
+
+ if (sourceStart + length >= src.length)
+ length = src.length - sourceStart;
+
+ for (int i = 0; i < length; i++) {
+ target[targetStart + i] = src[i + sourceStart];
+ }
+
+ return length;
+ }
+
+ public boolean hasText() {
+ return (currentEvent == CHARACTERS || currentEvent == DTD || currentEvent == ENTITY_REFERENCE
+ || currentEvent == COMMENT || currentEvent == SPACE);
+ }
+
+ public Location getLocation() {
+ return new Location() {
+
+ public int getCharacterOffset() {
+ return 0;
+ }
+
+ public int getColumnNumber() {
+ return 0;
+ }
+
+ public int getLineNumber() {
+ return 0;
+ }
+
+ public String getPublicId() {
+ return null;
+ }
+
+ public String getSystemId() {
+ return null;
+ }
+
+ };
+ }
+
+ public boolean hasName() {
+ return (currentEvent == START_ELEMENT || currentEvent == END_ELEMENT);
+ }
+
+ public String getVersion() {
+ return null;
+ }
+
+ public boolean isStandalone() {
+ return false;
+ }
+
+ public boolean standaloneSet() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ public String getCharacterEncodingScheme() {
+ // TODO Auto-generated method stub
+ return null;
+ }
}
Added: incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/jaxp/DOMStreamWriter.java
URL: http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/jaxp/DOMStreamWriter.java?rev=413897&view=auto
==============================================================================
--- incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/jaxp/DOMStreamWriter.java (added)
+++ incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/jaxp/DOMStreamWriter.java Tue Jun 13 07:00:15 2006
@@ -0,0 +1,22 @@
+/*
+ * This implementation comes from the XFire project
+ * https://svn.codehaus.org/xfire/trunk/xfire/xfire-core/src/main/org/codehaus/xfire/util/stax/
+ */
+package org.apache.servicemix.jbi.jaxp;
+
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamWriter;
+
+public abstract class DOMStreamWriter implements XMLStreamWriter
+{
+
+ public void close()
+ throws XMLStreamException
+ {
+ }
+
+ public void flush()
+ throws XMLStreamException
+ {
+ }
+}
Modified: incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/jaxp/W3CDOMStreamReader.java
URL: http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/jaxp/W3CDOMStreamReader.java?rev=413897&r1=413896&r2=413897&view=diff
==============================================================================
--- incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/jaxp/W3CDOMStreamReader.java (original)
+++ incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/jaxp/W3CDOMStreamReader.java Tue Jun 13 07:00:15 2006
@@ -1,17 +1,6 @@
/*
- * Copyright 2005-2006 The Apache Software Foundation.
- *
- * Licensed 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.
+ * This implementation comes from the XFire project
+ * https://svn.codehaus.org/xfire/trunk/xfire/xfire-core/src/main/org/codehaus/xfire/util/stax/
*/
package org.apache.servicemix.jbi.jaxp;
@@ -36,11 +25,13 @@
private Document document;
+ private W3CNamespaceContext context;
+
/**
* @param element
*/
public W3CDOMStreamReader(Element element) {
- super(new ElementFrame(element));
+ super(new ElementFrame(element, null));
this.document = element.getOwnerDocument();
}
@@ -64,8 +55,14 @@
frame.prefixes = new ArrayList();
frame.attributes = new ArrayList();
+ if (context == null)
+ context = new W3CNamespaceContext();
+
+ context.setElement(element);
+
NamedNodeMap nodes = element.getAttributes();
+ String nsURI = element.getNamespaceURI();
String ePrefix = element.getPrefix();
if (ePrefix == null) {
ePrefix = "";
@@ -77,6 +74,7 @@
String localName = node.getLocalName();
String value = node.getNodeValue();
String name = node.getNodeName();
+ String uri = node.getNamespaceURI();
if (prefix == null)
prefix = "";
@@ -106,7 +104,7 @@
}
protected ElementFrame getChildFrame(int currentChild) {
- return new ElementFrame(getCurrentElement().getChildNodes().item(currentChild));
+ return new ElementFrame(getCurrentElement().getChildNodes().item(currentChild), getCurrentFrame());
}
protected int getChildCount() {
@@ -135,11 +133,18 @@
}
public String getNamespaceURI(String prefix) {
- int index = getCurrentFrame().prefixes.indexOf(prefix);
- if (index == -1)
- return null;
+ ElementFrame frame = getCurrentFrame();
+
+ while (null != frame) {
+ int index = frame.prefixes.indexOf(prefix);
+ if (index != -1) {
+ return (String) frame.uris.get(index);
+ }
+
+ frame = frame.parent;
+ }
- return (String) getCurrentFrame().uris.get(index);
+ return null;
}
public String getAttributeValue(String ns, String local) {
@@ -227,7 +232,7 @@
}
public NamespaceContext getNamespaceContext() {
- throw new UnsupportedOperationException();
+ return context;
}
public String getText() {
Added: incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/jaxp/W3CDOMStreamWriter.java
URL: http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/jaxp/W3CDOMStreamWriter.java?rev=413897&view=auto
==============================================================================
--- incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/jaxp/W3CDOMStreamWriter.java (added)
+++ incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/jaxp/W3CDOMStreamWriter.java Tue Jun 13 07:00:15 2006
@@ -0,0 +1,270 @@
+/*
+ * This implementation comes from the XFire project
+ * https://svn.codehaus.org/xfire/trunk/xfire/xfire-core/src/main/org/codehaus/xfire/util/stax/
+ */
+package org.apache.servicemix.jbi.jaxp;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Stack;
+
+import javax.xml.namespace.NamespaceContext;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.stream.XMLStreamException;
+
+import org.w3c.dom.Attr;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+public class W3CDOMStreamWriter
+ extends DOMStreamWriter
+{
+ static final String XML_NS = "http://www.w3.org/2000/xmlns/";
+ private Stack stack = new Stack();
+ private Document document;
+ private Element currentNode;
+ private NamespaceContext context;
+ private Map properties = new HashMap();
+
+ public W3CDOMStreamWriter() throws ParserConfigurationException
+ {
+ this(DocumentBuilderFactory.newInstance().newDocumentBuilder());
+ }
+
+ public W3CDOMStreamWriter(DocumentBuilder builder)
+ {
+ document = builder.newDocument();
+ }
+
+ public W3CDOMStreamWriter(Document document)
+ {
+ this.document = document;
+ }
+
+ public Document getDocument()
+ {
+ return document;
+ }
+
+ public void writeStartElement(String local)
+ throws XMLStreamException
+ {
+ newChild(document.createElement(local));
+ }
+
+ private void newChild(Element element)
+ {
+ if (currentNode != null)
+ {
+ stack.push(currentNode);
+ currentNode.appendChild(element);
+ }
+ else
+ {
+ document.appendChild(element);
+ }
+
+ W3CNamespaceContext context = new W3CNamespaceContext();
+ context.setElement(element);
+ this.context = context;
+
+ currentNode = element;
+ }
+
+ public void writeStartElement(String namespace, String local)
+ throws XMLStreamException
+ {
+ newChild(document.createElementNS(namespace, local));
+ }
+
+ public void writeStartElement(String prefix, String local, String namespace)
+ throws XMLStreamException
+ {
+ if (prefix == null || prefix.equals(""))
+ {
+ writeStartElement(namespace, local);
+ }
+ else
+ {
+ newChild(document.createElementNS(namespace, prefix + ":" + local));
+ }
+ }
+
+ public void writeEmptyElement(String namespace, String local)
+ throws XMLStreamException
+ {
+ writeStartElement(namespace, local);
+ }
+
+ public void writeEmptyElement(String prefix, String namespace, String local)
+ throws XMLStreamException
+ {
+ writeStartElement(prefix, namespace, local);
+ }
+
+ public void writeEmptyElement(String local)
+ throws XMLStreamException
+ {
+ writeStartElement(local);
+ }
+
+ public void writeEndElement()
+ throws XMLStreamException
+ {
+ if (stack.size() > 0)
+ currentNode = (Element) stack.pop();
+ else
+ currentNode = null;
+ }
+
+ public void writeEndDocument()
+ throws XMLStreamException
+ {
+ }
+
+ public void writeAttribute(String local, String value)
+ throws XMLStreamException
+ {
+ Attr a = document.createAttribute(local);
+ a.setValue(value);
+ currentNode.setAttributeNode(a);
+ }
+
+ public void writeAttribute(String prefix, String namespace, String local, String value)
+ throws XMLStreamException
+ {
+ if (prefix.length() > 0)
+ local = prefix + ":" + local;
+
+ Attr a = document.createAttributeNS(namespace, local);
+ a.setValue(value);
+ currentNode.setAttributeNodeNS(a);
+ }
+
+ public void writeAttribute(String namespace, String local, String value)
+ throws XMLStreamException
+ {
+ Attr a = document.createAttributeNS(namespace, local);
+ a.setValue(value);
+ currentNode.setAttributeNodeNS(a);
+ }
+
+ public void writeNamespace(String prefix, String namespace)
+ throws XMLStreamException
+ {
+ if (prefix.length() == 0)
+ {
+ writeDefaultNamespace(namespace);
+ }
+ else
+ {
+ currentNode.setAttributeNS(XML_NS, "xmlns:" + prefix, namespace);
+ }
+ }
+
+ public void writeDefaultNamespace(String namespace)
+ throws XMLStreamException
+ {
+ currentNode.setAttributeNS(XML_NS, "xmlns", namespace);
+ }
+
+ public void writeComment(String value)
+ throws XMLStreamException
+ {
+ currentNode.appendChild(document.createComment(value));
+ }
+
+ public void writeProcessingInstruction(String target)
+ throws XMLStreamException
+ {
+ currentNode.appendChild(document.createProcessingInstruction(target, null));
+ }
+
+ public void writeProcessingInstruction(String target, String data)
+ throws XMLStreamException
+ {
+ currentNode.appendChild(document.createProcessingInstruction(target, data));
+ }
+
+ public void writeCData(String data)
+ throws XMLStreamException
+ {
+ currentNode.appendChild(document.createCDATASection(data));
+ }
+
+ public void writeDTD(String arg0)
+ throws XMLStreamException
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ public void writeEntityRef(String ref)
+ throws XMLStreamException
+ {
+ currentNode.appendChild(document.createEntityReference(ref));
+ }
+
+ public void writeStartDocument()
+ throws XMLStreamException
+ {
+ }
+
+ public void writeStartDocument(String version)
+ throws XMLStreamException
+ {
+ writeStartDocument();
+ }
+
+ public void writeStartDocument(String encoding, String version)
+ throws XMLStreamException
+ {
+ writeStartDocument();
+ }
+
+ public void writeCharacters(String text)
+ throws XMLStreamException
+ {
+ currentNode.appendChild(document.createTextNode(text));
+ }
+
+ public void writeCharacters(char[] text, int start, int len)
+ throws XMLStreamException
+ {
+ writeCharacters(new String(text, start, len));
+ }
+
+ public String getPrefix(String uri)
+ throws XMLStreamException
+ {
+ return context.getPrefix(uri);
+ }
+
+ public void setPrefix(String arg0, String arg1)
+ throws XMLStreamException
+ {
+ }
+
+ public void setDefaultNamespace(String arg0)
+ throws XMLStreamException
+ {
+ }
+
+ public void setNamespaceContext(NamespaceContext context)
+ throws XMLStreamException
+ {
+ this.context = context;
+ }
+
+ public NamespaceContext getNamespaceContext()
+ {
+ return context;
+ }
+
+ public Object getProperty(String prop)
+ throws IllegalArgumentException
+ {
+ return properties.get(prop);
+ }
+}
Added: incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/jaxp/W3CNamespaceContext.java
URL: http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/jaxp/W3CNamespaceContext.java?rev=413897&view=auto
==============================================================================
--- incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/jaxp/W3CNamespaceContext.java (added)
+++ incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/jaxp/W3CNamespaceContext.java Tue Jun 13 07:00:15 2006
@@ -0,0 +1,98 @@
+/**
+ *
+ */
+package org.apache.servicemix.jbi.jaxp;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.xml.namespace.NamespaceContext;
+
+import org.w3c.dom.Attr;
+import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+
+public class W3CNamespaceContext implements NamespaceContext
+{
+ private Element currentNode;
+
+ public String getNamespaceURI(String prefix)
+ {
+ String name = prefix;
+ if (name.length() == 0) name = "xmlns";
+ else name = "xmlns:" + prefix;
+
+ return getNamespaceURI(currentNode, name);
+ }
+
+ private String getNamespaceURI(Element e, String name)
+ {
+ Attr attr = e.getAttributeNode(name);
+ if (attr == null)
+ {
+ Node n = e.getParentNode();
+ if (n instanceof Element && n != e)
+ {
+ return getNamespaceURI((Element) n, name);
+ }
+ }
+ else
+ {
+ return attr.getValue();
+ }
+
+ return null;
+ }
+
+ public String getPrefix(String uri)
+ {
+ return getPrefix(currentNode, uri);
+ }
+
+ private String getPrefix(Element e, String uri)
+ {
+ NamedNodeMap attributes = e.getAttributes();
+ for (int i = 0; i < attributes.getLength(); i++)
+ {
+ Attr a = (Attr) attributes.item(i);
+
+ String val = a.getValue();
+ if (val != null && val.equals(uri))
+ {
+ String name = a.getNodeName();
+ if (name.equals("xmlns")) return "";
+ else return name.substring(6);
+ }
+ }
+
+ Node n = e.getParentNode();
+ if (n instanceof Element && n != e)
+ {
+ return getPrefix((Element) n, uri);
+ }
+
+ return null;
+ }
+
+ public Iterator getPrefixes(String uri)
+ {
+ List prefixes = new ArrayList();
+
+ String prefix = getPrefix(uri);
+ if (prefix != null) prefixes.add(prefix);
+
+ return prefixes.iterator();
+ }
+
+ public Element getElement()
+ {
+ return currentNode;
+ }
+
+ public void setElement(Element currentNode)
+ {
+ this.currentNode = currentNode;
+ }
+}
\ No newline at end of file