You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by rf...@apache.org on 2007/10/17 20:04:51 UTC
svn commit: r585611 - in /incubator/tuscany/java/sca/modules/databinding: ./
src/main/java/org/apache/tuscany/sca/databinding/javabeans/
src/main/java/org/apache/tuscany/sca/databinding/xml/
src/test/java/org/apache/tuscany/sca/databinding/xml/
Author: rfeng
Date: Wed Oct 17 11:04:49 2007
New Revision: 585611
URL: http://svn.apache.org/viewvc?rev=585611&view=rev
Log:
Improve the tree-based XMLStreamReader and convert Bean & DOM to use this approach
Use the xmlunit to test the equality of XML
Added:
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/BeanXMLStreamReaderImpl.java (with props)
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/SimpleXmlNodeImpl.java (with props)
incubator/tuscany/java/sca/modules/databinding/src/test/java/org/apache/tuscany/sca/databinding/xml/BeanXMLStreamReaderTestCase.java (with props)
Removed:
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/BeanUtil.java
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/XmlAttribute.java
Modified:
incubator/tuscany/java/sca/modules/databinding/LICENSE
incubator/tuscany/java/sca/modules/databinding/pom.xml
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBean2XMLStreamReader.java
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/DOMXMLStreamReader.java
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/DOMXmlNodeImpl.java
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Node2XMLStreamReader.java
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/WrappingXMLStreamReader.java
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/XMLFragmentStreamReaderImpl.java
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/XmlNode.java
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/XmlTreeStreamReaderImpl.java
incubator/tuscany/java/sca/modules/databinding/src/test/java/org/apache/tuscany/sca/databinding/xml/DOM2StAXTestCase.java
incubator/tuscany/java/sca/modules/databinding/src/test/java/org/apache/tuscany/sca/databinding/xml/JavaBean2XMLStreamReaderTestCase.java
incubator/tuscany/java/sca/modules/databinding/src/test/java/org/apache/tuscany/sca/databinding/xml/StAXHelperTestCase.java
incubator/tuscany/java/sca/modules/databinding/src/test/java/org/apache/tuscany/sca/databinding/xml/XmlTreeStreamReaderTestCase.java
Modified: incubator/tuscany/java/sca/modules/databinding/LICENSE
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/LICENSE?rev=585611&r1=585610&r2=585611&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/LICENSE (original)
+++ incubator/tuscany/java/sca/modules/databinding/LICENSE Wed Oct 17 11:04:49 2007
@@ -201,5 +201,44 @@
See the License for the specific language governing permissions and
limitations under the License.
+-----------------------------------------------------------------
+The test cases use xmlunit with the following license:
+-----------------------------------------------------------------
+
+/*
+******************************************************************
+Copyright (c) 2001-2007, Jeff Martin, Tim Bacon
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of the xmlunit.sourceforge.net nor the names
+ of its contributors may be used to endorse or promote products
+ derived from this software without specific prior written
+ permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+******************************************************************
+*/
Modified: incubator/tuscany/java/sca/modules/databinding/pom.xml
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/pom.xml?rev=585611&r1=585610&r2=585611&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/pom.xml (original)
+++ incubator/tuscany/java/sca/modules/databinding/pom.xml Wed Oct 17 11:04:49 2007
@@ -1,51 +1,59 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
-->
<project>
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.apache.tuscany.sca</groupId>
- <artifactId>tuscany-modules</artifactId>
- <version>1.1-incubating-SNAPSHOT</version>
- <relativePath>../pom.xml</relativePath>
- </parent>
- <artifactId>tuscany-databinding</artifactId>
- <name>Apache Tuscany SCA DataBinding Framework</name>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-modules</artifactId>
+ <version>1.1-incubating-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+ <artifactId>tuscany-databinding</artifactId>
+ <name>Apache Tuscany SCA DataBinding Framework</name>
- <dependencies>
- <dependency>
- <groupId>org.apache.tuscany.sca</groupId>
- <artifactId>tuscany-interface</artifactId>
- <version>1.1-incubating-SNAPSHOT</version>
- </dependency>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-interface</artifactId>
+ <version>1.1-incubating-SNAPSHOT</version>
+ </dependency>
- <dependency>
- <groupId>stax</groupId>
- <artifactId>stax-api</artifactId>
- <version>1.0.1</version>
- </dependency>
+ <dependency>
+ <groupId>stax</groupId>
+ <artifactId>stax-api</artifactId>
+ <version>1.0.1</version>
+ </dependency>
- <dependency>
- <groupId>org.codehaus.woodstox</groupId>
- <artifactId>wstx-asl</artifactId>
- <version>3.2.1</version>
- <scope>runtime</scope>
- </dependency>
- </dependencies>
+ <dependency>
+ <groupId>org.codehaus.woodstox</groupId>
+ <artifactId>wstx-asl</artifactId>
+ <version>3.2.1</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>xmlunit</groupId>
+ <artifactId>xmlunit</artifactId>
+ <version>1.1</version>
+ <scope>test</scope>
+ </dependency>
+
+ </dependencies>
</project>
Modified: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBean2XMLStreamReader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBean2XMLStreamReader.java?rev=585611&r1=585610&r2=585611&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBean2XMLStreamReader.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBean2XMLStreamReader.java Wed Oct 17 11:04:49 2007
@@ -24,15 +24,22 @@
import org.apache.tuscany.sca.databinding.TransformationContext;
import org.apache.tuscany.sca.databinding.TransformationException;
import org.apache.tuscany.sca.databinding.impl.BaseTransformer;
-import org.apache.tuscany.sca.databinding.xml.BeanUtil;
-import org.apache.tuscany.sca.databinding.xml.XMLDocumentStreamReader;
+import org.apache.tuscany.sca.databinding.xml.BeanXMLStreamReaderImpl;
+import org.apache.tuscany.sca.interfacedef.util.XMLType;
public class JavaBean2XMLStreamReader extends BaseTransformer<Object, XMLStreamReader> implements
PullTransformer<Object, XMLStreamReader> {
public XMLStreamReader transform(Object source, TransformationContext context) {
try {
- return new XMLDocumentStreamReader(BeanUtil.getXMLStreamReader(source));
+ javax.xml.namespace.QName name = null;
+ if (context != null) {
+ Object logical = context.getSourceDataType().getLogical();
+ if (logical instanceof XMLType) {
+ name = ((XMLType)logical).getElementName();
+ }
+ }
+ return new BeanXMLStreamReaderImpl(name, source);
} catch (Exception e) {
throw new TransformationException(e);
}
Added: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/BeanXMLStreamReaderImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/BeanXMLStreamReaderImpl.java?rev=585611&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/BeanXMLStreamReaderImpl.java (added)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/BeanXMLStreamReaderImpl.java Wed Oct 17 11:04:49 2007
@@ -0,0 +1,173 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ */
+
+package org.apache.tuscany.sca.databinding.xml;
+
+import java.beans.BeanInfo;
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.Array;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.xml.namespace.QName;
+
+import org.apache.tuscany.sca.databinding.impl.SimpleTypeMapperImpl;
+import org.apache.tuscany.sca.interfacedef.util.TypeInfo;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class BeanXMLStreamReaderImpl extends XmlTreeStreamReaderImpl {
+
+ public static class BeanXmlNodeImpl extends SimpleXmlNodeImpl implements XmlNode {
+ private static final Object[] NULL = null;
+ private static final SimpleTypeMapperImpl MAPPER = new SimpleTypeMapperImpl();
+
+ public BeanXmlNodeImpl(Object bean) {
+ super(getName(bean == null ? null : bean.getClass()), bean);
+ }
+
+ public BeanXmlNodeImpl(QName name, Object bean) {
+ super(name, bean);
+ }
+
+ private static boolean isSimpleType(Class<?> javaType) {
+ return SimpleTypeMapperImpl.getXMLType(javaType) != null;
+ }
+
+ private static String getStringValue(Object o) {
+ if (o == null) {
+ return null;
+ }
+ TypeInfo info = SimpleTypeMapperImpl.getXMLType(o.getClass());
+ if (info != null) {
+ return MAPPER.toXMLLiteral(info.getQName(), o, null);
+ } else {
+ return String.valueOf(o);
+ }
+ }
+
+ public Iterator<XmlNode> children() {
+ if (name == null) {
+ return null;
+ }
+ if (value == null) {
+ return super.children();
+ }
+ if (isSimpleType(value.getClass())) {
+ XmlNode textNode = new BeanXmlNodeImpl(null, value);
+ return Arrays.asList(textNode).iterator();
+ }
+ try {
+ BeanInfo beanInfo = Introspector.getBeanInfo(value.getClass());
+ PropertyDescriptor[] propDescs = beanInfo.getPropertyDescriptors();
+
+ List<XmlNode> props = new ArrayList<XmlNode>();
+ for (int i = 0; i < propDescs.length; i++) {
+ PropertyDescriptor propDesc = propDescs[i];
+ Class<?> pType = propDesc.getPropertyType();
+ if ("class".equals(propDesc.getName())) {
+ continue;
+ }
+ QName pName = new QName(name.getNamespaceURI(), propDesc.getName());
+ Object pValue = propDesc.getReadMethod().invoke(value, NULL);
+ if (pType.isArray()) {
+ if (pValue != null) {
+ int i1 = Array.getLength(pValue);
+ for (int j = 0; j < i1; j++) {
+ Object o = Array.get(pValue, j);
+ props.add(new BeanXmlNodeImpl(pName, getStringValue(o)));
+ }
+ } else {
+ // TODO: How to handle null?
+ }
+ } else if (Collection.class.isAssignableFrom(pType)) {
+ Collection objList = (Collection)pValue;
+ if (objList != null && objList.size() > 0) {
+ for (Iterator j = objList.iterator(); j.hasNext();) {
+ Object o = j.next();
+ if (isSimpleType(o.getClass())) {
+ props.add(new BeanXmlNodeImpl(pName, getStringValue(o)));
+ } else {
+ props.add(new BeanXmlNodeImpl(pName, o));
+ }
+ }
+
+ } else {
+ // How to handle null
+ }
+ } else {
+ props.add(new BeanXmlNodeImpl(pName, pValue));
+ }
+ }
+ return props.iterator();
+ } catch (Exception e) {
+ throw new IllegalArgumentException(e);
+ }
+ }
+
+ public QName getName() {
+ return name;
+ }
+
+ public String getValue() {
+ return getStringValue(value);
+ }
+
+ public static QName getName(Class<?> cls) {
+ if (cls == null) {
+ return null;
+ }
+ Package pkg = cls.getPackage();
+ if (pkg == null) {
+ return new QName("", cls.getSimpleName());
+ }
+ StringBuffer ns = new StringBuffer("http://");
+ String[] names = pkg.getName().split("\\.");
+ for (int i = names.length - 1; i >= 0; i--) {
+ ns.append(names[i]);
+ if (i != 0) {
+ ns.append('.');
+ }
+ }
+ ns.append('/');
+ return new QName(ns.toString(), cls.getSimpleName());
+ }
+
+ }
+
+ public BeanXMLStreamReaderImpl(QName name, Object bean) {
+ super(getXmlNode(name, bean));
+ }
+
+ private static BeanXmlNodeImpl getXmlNode(QName name, Object bean) {
+ BeanXmlNodeImpl root = null;
+ if (name != null) {
+ root = new BeanXmlNodeImpl(name, bean);
+ } else {
+ root = new BeanXmlNodeImpl(bean);
+ }
+ return root;
+ }
+
+}
Propchange: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/BeanXMLStreamReaderImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/BeanXMLStreamReaderImpl.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/DOMXMLStreamReader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/DOMXMLStreamReader.java?rev=585611&r1=585610&r2=585611&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/DOMXMLStreamReader.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/DOMXMLStreamReader.java Wed Oct 17 11:04:49 2007
@@ -18,112 +18,19 @@
*/
package org.apache.tuscany.sca.databinding.xml;
-import static javax.xml.XMLConstants.DEFAULT_NS_PREFIX;
-import static javax.xml.XMLConstants.XMLNS_ATTRIBUTE_NS_URI;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.xml.namespace.QName;
-
-import org.w3c.dom.Attr;
-import org.w3c.dom.CharacterData;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-public class DOMXMLStreamReader extends XMLFragmentStreamReaderImpl {
- private Element rootElement;
+public class DOMXMLStreamReader extends XmlTreeStreamReaderImpl {
public DOMXMLStreamReader(Node node) {
- super(null);
+ super(new DOMXmlNodeImpl(node));
switch (node.getNodeType()) {
case Node.DOCUMENT_NODE:
- this.rootElement = ((Document)node).getDocumentElement();
break;
case Node.ELEMENT_NODE:
- this.rootElement = (Element)node;
break;
default:
- throw new IllegalArgumentException("Illegal Node");
- }
- String ns = rootElement.getNamespaceURI();
- String prefix = rootElement.getPrefix();
- String name = rootElement.getLocalName();
- elementQName = new QName(ns == null ? "" : ns, name, prefix == null ? "" : prefix);
- }
-
- @Override
- protected final NamedProperty[] getAttributes() {
- if (attributes == null) {
- List<NamedProperty> attributeList = new ArrayList<NamedProperty>();
- NamedNodeMap nodeMap = rootElement.getAttributes();
- for (int i = 0; i < nodeMap.getLength(); i++) {
- Attr attr = (Attr)nodeMap.item(i);
- String ns = attr.getNamespaceURI();
- String prefix = attr.getPrefix();
- if (!XMLNS_ATTRIBUTE_NS_URI.equals(ns)) {
- QName attrName = new QName(ns == null ? "" : ns, attr.getLocalName(), prefix != null ? prefix : "");
- NamedProperty pair = new NamedProperty(attrName, attr.getValue());
- attributeList.add(pair);
- }
- }
- attributes = new NamedProperty[attributeList.size()];
- attributeList.toArray(attributes);
- }
- return attributes;
- }
-
- @Override
- protected QName[] getNamespaces() {
- List<QName> nsList = new ArrayList<QName>();
- NamedNodeMap nodeMap = rootElement.getAttributes();
- for (int i = 0; i < nodeMap.getLength(); i++) {
- Attr attr = (Attr)nodeMap.item(i);
- String ns = attr.getNamespaceURI();
- if (XMLNS_ATTRIBUTE_NS_URI.equals(ns)) {
- String prefix = attr.getPrefix();
- if (prefix == null) {
- // xmlns="http://ns"
- nsList.add(new QName(attr.getValue(), "", DEFAULT_NS_PREFIX));
- } else {
- // xmlns:ns="http://ns"
- nsList.add(new QName(attr.getValue(), "", attr.getLocalName()));
- }
- }
- }
- QName[] nss = new QName[nsList.size()];
- nsList.toArray(nss);
- return nss;
- }
-
- @Override
- protected NamedProperty[] getElements() {
- if (elements == null) {
- List<NamedProperty> elementList = new ArrayList<NamedProperty>();
- NodeList nodeList = rootElement.getChildNodes();
- for (int i = 0; i < nodeList.getLength(); i++) {
- Node node = nodeList.item(i);
- switch (node.getNodeType()) {
- case Node.TEXT_NODE:
- case Node.CDATA_SECTION_NODE:
- NamedProperty pair = new NamedProperty(ELEMENT_TEXT, ((CharacterData)node).getData());
- elementList.add(pair);
- break;
-
- case Node.ELEMENT_NODE:
- Element element = (Element)node;
- QName elementName = new QName(element.getNamespaceURI(), element.getLocalName());
- pair = new NamedProperty(elementName, new DOMXMLStreamReader(element));
- elementList.add(pair);
- break;
- }
- }
- elements = new NamedProperty[elementList.size()];
- elementList.toArray(elements);
+ throw new IllegalArgumentException("Illegal node type: " + node);
}
- return elements;
}
}
Modified: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/DOMXmlNodeImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/DOMXmlNodeImpl.java?rev=585611&r1=585610&r2=585611&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/DOMXmlNodeImpl.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/DOMXmlNodeImpl.java Wed Oct 17 11:04:49 2007
@@ -39,6 +39,7 @@
public class DOMXmlNodeImpl implements XmlNode {
private Node node;
private Map<String, String> namespaces;
+ private Type type;
/**
* @param element
@@ -50,18 +51,32 @@
} else {
this.node = element;
}
+ switch (node.getNodeType()) {
+ case Node.CDATA_SECTION_NODE:
+ this.type = Type.CHARACTERS;
+ break;
+ case Node.ELEMENT_NODE:
+ this.type = Type.ELEMENT;
+ break;
+ case Node.TEXT_NODE:
+ this.type = Type.CHARACTERS;
+ break;
+ }
}
/**
* @see org.apache.tuscany.sca.databinding.xml.XmlNode#attributes()
*/
- public List<XmlAttribute> attributes() {
+ public List<XmlNode> attributes() {
+ if (type != Type.ELEMENT) {
+ return null;
+ }
NamedNodeMap attrs = node.getAttributes();
- List<XmlAttribute> xmlAttrs = new ArrayList<XmlAttribute>();
+ List<XmlNode> xmlAttrs = new ArrayList<XmlNode>();
for (int i = 0; i < attrs.getLength(); i++) {
Attr attr = (Attr)attrs.item(i);
if (!attr.getName().equals("xmlns") && !attr.getName().startsWith("xmlns:")) {
- xmlAttrs.add(new DOMAttribute(attr));
+ xmlAttrs.add(new SimpleXmlNodeImpl(getQName(attr), attr.getValue(), XmlNode.Type.ATTRIBUTE));
}
}
return xmlAttrs;
@@ -71,11 +86,15 @@
* @see org.apache.tuscany.sca.databinding.xml.XmlNode#children()
*/
public Iterator<XmlNode> children() {
+ if (type != Type.ELEMENT) {
+ return null;
+ }
NodeList nodes = node.getChildNodes();
List<XmlNode> xmlNodes = new ArrayList<XmlNode>();
for (int i = 0; i < nodes.getLength(); i++) {
Node child = (Node)nodes.item(i);
- if (child.getNodeType() == Node.ELEMENT_NODE || child.getNodeType() == Node.TEXT_NODE) {
+ int nodeType = child.getNodeType();
+ if (nodeType == Node.ELEMENT_NODE || nodeType == Node.TEXT_NODE || nodeType == Node.CDATA_SECTION_NODE) {
xmlNodes.add(new DOMXmlNodeImpl(child));
}
}
@@ -108,16 +127,12 @@
}
/**
- * @see org.apache.tuscany.sca.databinding.xml.XmlNode#isLeaf()
- */
- public boolean isLeaf() {
- return node.getNodeType() != Node.ELEMENT_NODE;
- }
-
- /**
* @see org.apache.tuscany.sca.databinding.xml.XmlNode#namespaces()
*/
public Map<String, String> namespaces() {
+ if (type != Type.ELEMENT) {
+ return null;
+ }
if (namespaces == null) {
namespaces = new HashMap<String, String>();
NamedNodeMap attrs = node.getAttributes();
@@ -134,33 +149,8 @@
return namespaces;
}
- public static class DOMAttribute implements XmlAttribute {
- private Attr attr;
-
- /**
- * @param attr
- */
- public DOMAttribute(Attr attr) {
- super();
- this.attr = attr;
- }
-
- /**
- * @see org.apache.tuscany.sca.databinding.xml.XmlAttribute#getName()
- */
- public QName getName() {
- // TODO Auto-generated method stub
- return getQName(attr);
- }
-
- /**
- * @see org.apache.tuscany.sca.databinding.xml.XmlAttribute#getValue()
- */
- public String getValue() {
- // TODO Auto-generated method stub
- return attr.getValue();
- }
-
+ public Type getType() {
+ return type;
}
}
Modified: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Node2XMLStreamReader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Node2XMLStreamReader.java?rev=585611&r1=585610&r2=585611&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Node2XMLStreamReader.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Node2XMLStreamReader.java Wed Oct 17 11:04:49 2007
@@ -35,7 +35,7 @@
public XMLStreamReader transform(Node source, TransformationContext context) {
try {
DOMXMLStreamReader reader = new DOMXMLStreamReader(source);
- return new XMLDocumentStreamReader(reader);
+ return reader;
} catch (Exception e) {
throw new TransformationException(e);
}
Added: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/SimpleXmlNodeImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/SimpleXmlNodeImpl.java?rev=585611&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/SimpleXmlNodeImpl.java (added)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/SimpleXmlNodeImpl.java Wed Oct 17 11:04:49 2007
@@ -0,0 +1,112 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ */
+
+package org.apache.tuscany.sca.databinding.xml;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.namespace.QName;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class SimpleXmlNodeImpl implements XmlNode {
+ private final static String XSI_PREFIX = "xsi";
+ private final static String XSI_NS = "http://www.w3.org/2001/XMLSchema-instance";
+ private final static QName XSI_NIL = new QName(XSI_NS, "nil", XSI_PREFIX);
+ private final static Map<String, String> NS_MAP = new HashMap<String, String>();
+ static {
+ NS_MAP.put(XSI_PREFIX, XSI_NS);
+ }
+
+ protected Type type;
+ protected QName name;
+ protected Object value;
+
+ public SimpleXmlNodeImpl(QName name, Object value) {
+ this(name, value, name != null ? Type.ELEMENT : Type.CHARACTERS);
+ }
+
+ public SimpleXmlNodeImpl(QName name, Object value, Type type) {
+ super();
+ this.type = type;
+ this.name = name;
+ this.value = value;
+ }
+
+ /**
+ * @see org.apache.tuscany.sca.databinding.xml.XmlNode#attributes()
+ */
+ public List<XmlNode> attributes() {
+ if (type == Type.ELEMENT && value == null) {
+ // Nil element
+ XmlNode attr = new SimpleXmlNodeImpl(XSI_NIL, "true");
+ return Arrays.asList(attr);
+ }
+ return null;
+ }
+
+ /**
+ * @see org.apache.tuscany.sca.databinding.xml.XmlNode#children()
+ */
+ public Iterator<XmlNode> children() {
+ if (type == Type.ELEMENT && value != null) {
+ // Nil element
+ XmlNode node = new SimpleXmlNodeImpl(null, value);
+ return Arrays.asList(node).iterator();
+ }
+ return null;
+ }
+
+ /**
+ * @see org.apache.tuscany.sca.databinding.xml.XmlNode#getName()
+ */
+ public QName getName() {
+ return name;
+ }
+
+ /**
+ * @see org.apache.tuscany.sca.databinding.xml.XmlNode#getValue()
+ */
+ public String getValue() {
+ return value == null ? null : String.valueOf(value);
+ }
+
+ /**
+ * @see org.apache.tuscany.sca.databinding.xml.XmlNode#namespaces()
+ */
+ public Map<String, String> namespaces() {
+ if (type == Type.ELEMENT && value == null) {
+ return NS_MAP;
+ }
+ return null;
+ }
+
+ public Type getType() {
+ return type;
+ }
+
+ public void setType(Type type) {
+ this.type = type;
+ }
+}
Propchange: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/SimpleXmlNodeImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/SimpleXmlNodeImpl.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/WrappingXMLStreamReader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/WrappingXMLStreamReader.java?rev=585611&r1=585610&r2=585611&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/WrappingXMLStreamReader.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/WrappingXMLStreamReader.java Wed Oct 17 11:04:49 2007
@@ -19,207 +19,69 @@
package org.apache.tuscany.sca.databinding.xml;
import javax.xml.namespace.NamespaceContext;
-import javax.xml.namespace.QName;
-import javax.xml.stream.Location;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.util.StreamReaderDelegate;
-public class WrappingXMLStreamReader implements XMLFragmentStreamReader {
+public class WrappingXMLStreamReader extends StreamReaderDelegate implements XMLFragmentStreamReader {
- private XMLStreamReader reader;
+ private boolean done;
+ private int level;
- public WrappingXMLStreamReader(XMLStreamReader reader) {
- this.reader = reader;
- }
-
- public boolean isDone() {
- try {
- return !hasNext();
- } catch (XMLStreamException e) {
- throw new RuntimeException(e);
+ public WrappingXMLStreamReader(XMLStreamReader realReader) throws XMLStreamException {
+ super(realReader);
+ if (realReader == null) {
+ throw new UnsupportedOperationException("Reader cannot be null");
}
- }
- public Object getProperty(String string) throws IllegalArgumentException {
- return reader.getProperty(string);
- }
-
- public int next() throws XMLStreamException {
- return reader.next();
- }
-
- public void require(int i, String string, String string1) throws XMLStreamException {
- // nothing to do
- }
-
- public String getElementText() throws XMLStreamException {
- return reader.getElementText();
- }
+ if (realReader instanceof XMLFragmentStreamReader) {
+ ((XMLFragmentStreamReader)realReader).init();
+ }
- public int nextTag() throws XMLStreamException {
- return reader.nextTag();
+ if (realReader.getEventType() == START_DOCUMENT) {
+ // Position to the 1st element
+ realReader.nextTag();
+ }
+ if (realReader.getEventType() != START_ELEMENT) {
+ throw new IllegalStateException("The reader is not positioned at START_DOCUMENT or START_ELEMENT");
+ }
+ this.done = false;
+ this.level = 1;
}
public boolean hasNext() throws XMLStreamException {
- return reader.hasNext();
- }
-
- public void close() throws XMLStreamException {
- reader.close();
- }
-
- public String getNamespaceURI(String string) {
- return reader.getNamespaceURI(string);
- }
-
- public boolean isStartElement() {
- return reader.isStartElement();
- }
-
- public boolean isEndElement() {
- return reader.isEndElement();
- }
-
- public boolean isCharacters() {
- return reader.isCharacters();
- }
-
- public boolean isWhiteSpace() {
- return reader.isWhiteSpace();
- }
-
- public String getAttributeValue(String string, String string1) {
- return reader.getAttributeValue(string, string1);
- }
-
- public int getAttributeCount() {
- return reader.getAttributeCount();
- }
-
- public QName getAttributeName(int i) {
- return reader.getAttributeName(i);
- }
-
- public String getAttributeNamespace(int i) {
- return reader.getAttributeNamespace(i);
- }
-
- public String getAttributeLocalName(int i) {
- return reader.getAttributeLocalName(i);
- }
-
- public String getAttributePrefix(int i) {
- return reader.getAttributeLocalName(i);
- }
-
- public String getAttributeType(int i) {
- return reader.getAttributeType(i);
- }
-
- public String getAttributeValue(int i) {
- return reader.getAttributeValue(i);
- }
-
- public boolean isAttributeSpecified(int i) {
- return reader.isAttributeSpecified(i);
- }
-
- public int getNamespaceCount() {
- return reader.getNamespaceCount();
- }
-
- public String getNamespacePrefix(int i) {
- return reader.getNamespacePrefix(i);
+ return !done && super.hasNext();
}
- public String getNamespaceURI(int i) {
- return reader.getNamespaceURI(i);
- }
-
- public NamespaceContext getNamespaceContext() {
- return reader.getNamespaceContext();
- }
-
- public int getEventType() {
- return reader.getEventType();
- }
-
- public String getText() {
- return reader.getText();
- }
-
- public char[] getTextCharacters() {
- return reader.getTextCharacters();
- }
-
- public int getTextCharacters(int i, char[] chars, int i1, int i2) throws XMLStreamException {
- return reader.getTextCharacters(i, chars, i1, i2);
- }
-
- public int getTextStart() {
- return reader.getTextStart();
- }
-
- public int getTextLength() {
- return reader.getTextLength();
- }
-
- public String getEncoding() {
- return reader.getEncoding();
- }
-
- public boolean hasText() {
- return reader.hasText();
- }
-
- public Location getLocation() {
- return reader.getLocation();
- }
-
- public QName getName() {
- return reader.getName();
- }
-
- public String getLocalName() {
- return reader.getLocalName();
- }
-
- public boolean hasName() {
- return reader.hasName();
- }
-
- public String getNamespaceURI() {
- return reader.getNamespaceURI();
- }
-
- public String getPrefix() {
- return reader.getPrefix();
- }
-
- public String getVersion() {
- return reader.getVersion();
- }
-
- public boolean isStandalone() {
- return reader.isStandalone();
- }
-
- public boolean standaloneSet() {
- return reader.standaloneSet();
- }
-
- public String getCharacterEncodingScheme() {
- return reader.getCharacterEncodingScheme();
- }
-
- public String getPITarget() {
- return reader.getPITarget();
+ public int next() throws XMLStreamException {
+ if (!hasNext()) {
+ throw new IllegalStateException("No more events");
+ }
+ int event = super.next();
+ if (!super.hasNext()) {
+ done = true;
+ }
+ if (event == START_ELEMENT) {
+ level++;
+ } else if (event == END_ELEMENT) {
+ level--;
+ if (level == 0) {
+ done = true;
+ }
+ }
+ return event;
}
- public String getPIData() {
- return reader.getPIData();
+ public int nextTag() throws XMLStreamException {
+ int event = 0;
+ while (true) {
+ event = next();
+ if (event == START_ELEMENT || event == END_ELEMENT) {
+ return event;
+ }
+ }
}
-
+
public void setParentNamespaceContext(NamespaceContext nsContext) {
// nothing to do here
}
@@ -227,4 +89,9 @@
public void init() {
// Nothing to do here
}
+
+ public boolean isDone() {
+ return done;
+ }
+
}
Modified: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/XMLFragmentStreamReaderImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/XMLFragmentStreamReaderImpl.java?rev=585611&r1=585610&r2=585611&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/XMLFragmentStreamReaderImpl.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/XMLFragmentStreamReaderImpl.java Wed Oct 17 11:04:49 2007
@@ -834,7 +834,7 @@
} else {
// all special possiblilities has been tried! Let's treat
// the thing as a bean and try generating events from it
- childReader = new WrappingXMLStreamReader(BeanUtil.getXMLStreamReader(propertyValue, propertyQName));
+ childReader = new WrappingXMLStreamReader(new BeanXMLStreamReaderImpl(propertyQName, propertyValue));
// we cannot register the namespace context here
}
Modified: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/XmlNode.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/XmlNode.java?rev=585611&r1=585610&r2=585611&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/XmlNode.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/XmlNode.java Wed Oct 17 11:04:49 2007
@@ -29,11 +29,7 @@
* @version $Rev$ $Date$
*/
public interface XmlNode {
- /**
- * Returns true if the receiver is a leaf.
- */
- boolean isLeaf();
-
+ enum Type {ELEMENT, ATTRIBUTE, CHARACTERS, READER};
/**
* Returns the children of the receiver as an <code>Iterator</code>.
*/
@@ -45,7 +41,7 @@
*
* @return
*/
- List<XmlAttribute> attributes();
+ List<XmlNode> attributes();
/**
* Retunrs a map of prefix to namespace URI
@@ -63,5 +59,11 @@
* Return the text value of the leaf element
* @return
*/
- String getValue();
+ <T> T getValue();
+
+ /**
+ * Return the type of the XML node
+ * @return
+ */
+ Type getType();
}
Modified: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/XmlTreeStreamReaderImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/XmlTreeStreamReaderImpl.java?rev=585611&r1=585610&r2=585611&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/XmlTreeStreamReaderImpl.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/XmlTreeStreamReaderImpl.java Wed Oct 17 11:04:49 2007
@@ -19,23 +19,28 @@
package org.apache.tuscany.sca.databinding.xml;
import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
import java.util.Map;
import javax.xml.namespace.NamespaceContext;
import javax.xml.namespace.QName;
import javax.xml.stream.Location;
import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
/**
*
* @version $Rev$ $Date$
*/
-public class XmlTreeStreamReaderImpl implements XMLFragmentStreamReader {
+public class XmlTreeStreamReaderImpl implements XMLStreamReader {
protected int state;
protected XmlNodeIterator iterator;
protected XmlNode current;
+ protected XMLStreamReader reader;
+
/*
* we need to pass in a namespace context since when delegated, we've no
* idea of the current namespace context. So it needs to be passed on here!
@@ -44,26 +49,43 @@
this.iterator = new XmlNodeIterator(root);
this.current = null;
this.state = START_DOCUMENT;
+ this.reader = null;
}
public void close() throws XMLStreamException {
- // do nothing here - we have no resources to free
+ if (reader != null) {
+ reader.close();
+ }
}
private void checkElementState() {
- if (current == null || current.getName() == null) {
+ if (getEventType() != START_ELEMENT && getEventType() != END_ELEMENT) {
throw new IllegalStateException();
}
}
+ private List<XmlNode> getAttributes() {
+ if (current != null && current.attributes() != null) {
+ return current.attributes();
+ } else {
+ return Collections.emptyList();
+ }
+ }
+
public int getAttributeCount() {
checkElementState();
- return current.attributes().size();
+ if (reader != null) {
+ return reader.getAttributeCount();
+ }
+ return getAttributes().size();
}
public String getAttributeLocalName(int i) {
checkElementState();
- return current.attributes().get(i).getName().getLocalPart();
+ if (reader != null) {
+ return reader.getAttributeLocalName(i);
+ }
+ return getAttributes().get(i).getName().getLocalPart();
}
/**
@@ -71,29 +93,48 @@
*/
public QName getAttributeName(int i) {
checkElementState();
- return current.attributes().get(i).getName();
+ if (reader != null) {
+ return reader.getAttributeName(i);
+ }
+ return getAttributes().get(i).getName();
}
public String getAttributeNamespace(int i) {
checkElementState();
- return current.attributes().get(i).getName().getNamespaceURI();
+ if (reader != null) {
+ return reader.getAttributeNamespace(i);
+ }
+ return getAttributes().get(i).getName().getNamespaceURI();
}
public String getAttributePrefix(int i) {
checkElementState();
- return current.attributes().get(i).getName().getPrefix();
+ if (reader != null) {
+ return reader.getAttributePrefix(i);
+ }
+ return getAttributes().get(i).getName().getPrefix();
}
public String getAttributeType(int i) {
+ if (reader != null) {
+ return reader.getAttributeType(i);
+ }
return null; // not supported
}
public String getAttributeValue(int i) {
checkElementState();
- return current.attributes().get(i).getValue();
+ if (reader != null) {
+ return reader.getAttributeValue(i);
+ }
+ return getAttributes().get(i).getValue();
}
public String getAttributeValue(String nsUri, String localName) {
+ checkElementState();
+ if (reader != null) {
+ return reader.getAttributeValue(nsUri, localName);
+ }
int count = getAttributeCount();
String value = null;
QName attrQName;
@@ -117,15 +158,24 @@
}
public String getCharacterEncodingScheme() {
- return null; // todo - should we return something for this ?
+ if (reader != null) {
+ return reader.getCharacterEncodingScheme();
+ }
+ return "UTF-8";
}
public String getElementText() throws XMLStreamException {
checkElementState();
+ if (reader != null) {
+ return reader.getElementText();
+ }
return current.getValue();
}
public String getEncoding() {
+ if (reader != null) {
+ return reader.getEncoding();
+ }
return "UTF-8";
}
@@ -135,12 +185,18 @@
public String getLocalName() {
checkElementState();
+ if (reader != null) {
+ return reader.getLocalName();
+ }
return current.getName().getLocalPart();
}
/**
*/
public Location getLocation() {
+ if (reader != null) {
+ return reader.getLocation();
+ }
// return a default location
return new Location() {
public int getCharacterOffset() {
@@ -167,16 +223,33 @@
public QName getName() {
checkElementState();
+ if (reader != null) {
+ return reader.getName();
+ }
return current.getName();
}
public NamespaceContext getNamespaceContext() {
+ if (reader != null) {
+ return reader.getNamespaceContext();
+ }
return iterator.getNamespaceContext();
}
+ private Map<String, String> getNamespaces() {
+ if (current != null && current.namespaces() != null) {
+ return current.namespaces();
+ } else {
+ return Collections.emptyMap();
+ }
+ }
+
public int getNamespaceCount() {
checkElementState();
- return current.namespaces().size();
+ if (reader != null) {
+ return reader.getNamespaceCount();
+ }
+ return getNamespaces().size();
}
/**
@@ -184,31 +257,53 @@
*/
public String getNamespacePrefix(int i) {
checkElementState();
- return new ArrayList<Map.Entry<String, String>>(current.namespaces().entrySet()).get(i).getKey();
+ if (reader != null) {
+ return reader.getNamespacePrefix(i);
+ }
+ return new ArrayList<Map.Entry<String, String>>(getNamespaces().entrySet()).get(i).getKey();
}
public String getNamespaceURI() {
+ checkElementState();
+ if (reader != null) {
+ return reader.getNamespaceURI();
+ }
return current.getName().getNamespaceURI();
}
public String getNamespaceURI(int i) {
checkElementState();
- return new ArrayList<Map.Entry<String, String>>(current.namespaces().entrySet()).get(i).getValue();
+ if (reader != null) {
+ return reader.getNamespaceURI(i);
+ }
+ return new ArrayList<Map.Entry<String, String>>(getNamespaces().entrySet()).get(i).getValue();
}
public String getNamespaceURI(String prefix) {
+ if (reader != null) {
+ return reader.getNamespaceURI(prefix);
+ }
return getNamespaceContext().getNamespaceURI(prefix);
}
public String getPIData() {
+ if (reader != null) {
+ return reader.getPIData();
+ }
throw new UnsupportedOperationException("Yet to be implemented !!");
}
public String getPITarget() {
+ if (reader != null) {
+ return reader.getPITarget();
+ }
throw new UnsupportedOperationException("Yet to be implemented !!");
}
public String getPrefix() {
+ if (reader != null) {
+ return reader.getPrefix();
+ }
if (state == START_ELEMENT || state == END_ELEMENT) {
String prefix = current.getName().getPrefix();
return "".equals(prefix) ? null : prefix;
@@ -224,14 +319,23 @@
* @throws IllegalArgumentException
*/
public Object getProperty(String key) throws IllegalArgumentException {
+ if (reader != null) {
+ return reader.getProperty(key);
+ }
return null;
}
public String getText() {
+ if (reader != null) {
+ return reader.getText();
+ }
return current.getValue();
}
public char[] getTextCharacters() {
+ if (reader != null) {
+ return reader.getTextCharacters();
+ }
String value = current.getValue();
return value == null ? new char[0] : value.toCharArray();
}
@@ -250,14 +354,23 @@
}
public int getTextCharacters(int i, char[] chars, int i1, int i2) throws XMLStreamException {
+ if (reader != null) {
+ return reader.getTextCharacters(i, chars, i1, i2);
+ }
return copy(i, chars, i1, i2);
}
public int getTextLength() {
+ if (reader != null) {
+ return reader.getTextLength();
+ }
return getTextCharacters().length;
}
public int getTextStart() {
+ if (reader != null) {
+ return reader.getTextStart();
+ }
return 0;
}
@@ -266,6 +379,9 @@
}
public boolean hasName() {
+ if (reader != null) {
+ return reader.hasName();
+ }
return current.getName() != null;
}
@@ -273,43 +389,34 @@
* @throws XMLStreamException
*/
public boolean hasNext() throws XMLStreamException {
- return iterator.hasNext() || state != END_DOCUMENT;
+ return iterator.hasNext() || state != END_DOCUMENT || (reader != null && reader.hasNext());
}
public boolean hasText() {
- return current.getName() == null;
- }
-
- /**
- * we need to split out the calling to the populate namespaces seperately
- * since this needs to be done *after* setting the parent namespace context.
- * We cannot assume it will happen at construction!
- */
- public void init() {
- // here we have an extra issue to attend to. we need to look at the
- // prefixes and uris (the combination) and populate a hashmap of
- // namespaces. The hashmap of namespaces will be used to serve the
- // namespace context
-
- // populateNamespaceContext();
+ if (reader != null) {
+ return reader.hasText();
+ }
+ return current.getType() == XmlNode.Type.CHARACTERS;
}
public boolean isAttributeSpecified(int i) {
+ if (reader != null) {
+ return reader.isAttributeSpecified(i);
+ }
return false; // not supported
}
public boolean isCharacters() {
- return current.getName() == null;
- }
-
- /**
- * are we done ?
- */
- public boolean isDone() {
- return !iterator.hasNext();
+ if (reader != null) {
+ return reader.isCharacters();
+ }
+ return current.getType() == XmlNode.Type.CHARACTERS;
}
public boolean isEndElement() {
+ if (reader != null) {
+ return reader.isEndElement();
+ }
return getEventType() == END_ELEMENT;
}
@@ -318,10 +425,16 @@
}
public boolean isStartElement() {
+ if (reader != null) {
+ return reader.isStartElement();
+ }
return getEventType() == START_ELEMENT;
}
public boolean isWhiteSpace() {
+ if (reader != null) {
+ return reader.isWhiteSpace();
+ }
return false;
}
@@ -333,25 +446,42 @@
if (!hasNext()) {
throw new IllegalStateException("No more events");
}
+ if (reader != null) {
+ if (!reader.hasNext()) {
+ this.reader = null;
+ } else {
+ // Go to the delegation mode
+ state = reader.next();
+ return state;
+ }
+ }
if (!iterator.hasNext()) {
state = END_DOCUMENT;
current = null;
return state;
}
current = iterator.next();
+ XmlNode.Type type = current.getType();
+
int itState = iterator.getState();
if (itState == XmlNodeIterator.END) {
- if (current.getName() != null) {
+ if (type == XmlNode.Type.ELEMENT) {
state = END_ELEMENT;
} else {
+ // Ignore the pop
state = next();
}
}
if (itState == XmlNodeIterator.START) {
- if (current.getName() != null) {
+ if (type == XmlNode.Type.ELEMENT) {
state = START_ELEMENT;
- } else {
+ } else if (type == XmlNode.Type.CHARACTERS) {
state = CHARACTERS;
+ } else if (type == XmlNode.Type.READER) {
+ XMLStreamReader value = current.getValue();
+ this.reader = new WrappingXMLStreamReader(value);
+ state = reader.getEventType();
+ return state;
}
}
return state;
@@ -372,6 +502,10 @@
}
public void require(int i, String ns, String localPart) throws XMLStreamException {
+ if (reader != null) {
+ reader.require(i, ns, localPart);
+ return;
+ }
int event = getEventType();
if (event != i) {
throw new IllegalStateException("Event type is " + event + " (!=" + i + ")");
@@ -392,14 +526,6 @@
public boolean standaloneSet() {
return true;
- }
-
- /**
- * @see org.apache.tuscany.sca.databinding.xml.XMLFragmentStreamReader#setParentNamespaceContext(javax.xml.namespace.NamespaceContext)
- */
- public void setParentNamespaceContext(NamespaceContext nsContext) {
- // TODO Auto-generated method stub
-
}
}
Added: incubator/tuscany/java/sca/modules/databinding/src/test/java/org/apache/tuscany/sca/databinding/xml/BeanXMLStreamReaderTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/test/java/org/apache/tuscany/sca/databinding/xml/BeanXMLStreamReaderTestCase.java?rev=585611&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/test/java/org/apache/tuscany/sca/databinding/xml/BeanXMLStreamReaderTestCase.java (added)
+++ incubator/tuscany/java/sca/modules/databinding/src/test/java/org/apache/tuscany/sca/databinding/xml/BeanXMLStreamReaderTestCase.java Wed Oct 17 11:04:49 2007
@@ -0,0 +1,164 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ */
+package org.apache.tuscany.sca.databinding.xml;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.stream.XMLStreamReader;
+
+import junit.framework.TestCase;
+
+import org.custommonkey.xmlunit.XMLAssert;
+
+public class BeanXMLStreamReaderTestCase extends TestCase {
+ private final static String XML_RESULT =
+ "<?xml version='1.0' encoding='UTF-8'?>"
+ +"<MyBean xmlns=\"http://xml.databinding.sca.tuscany.apache.org/\">"
+ +"<nil xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:nil=\"true\" />"
+ +"<i>1</i><list>Item1</list><list>Item2</list><arr>1</arr><arr>2</arr><arr>3</arr>"
+ +"<bean><name>Name</name></bean><str>ABC</str></MyBean>";
+ /**
+ * @see junit.framework.TestCase#setUp()
+ */
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ }
+
+ public void testTransformation() throws Exception {
+ MyBean bean = new MyBean();
+ bean.str = "ABC";
+ bean.i = 1;
+ bean.arr = new long[] {1, 2, 3};
+ bean.bean = new AnotherBean();
+ bean.bean.setName("Name");
+ bean.list.add("Item1");
+ bean.list.add("Item2");
+ XMLStreamReader reader = new BeanXMLStreamReaderImpl(null, bean);
+ XMLStreamReader2String t3 = new XMLStreamReader2String();
+ String xml = t3.transform(reader, null);
+ XMLAssert.assertXMLEqual(XML_RESULT, xml);
+ /* assertTrue(xml.contains("<JavaBean2XMLStreamReaderTestCase$MyBean>"
+ + "<arr>1</arr><arr>2</arr><arr>3</arr><bean><name>Name</name></bean>"
+ + "<i>1</i><str>ABC</str></JavaBean2XMLStreamReaderTestCase$MyBean>"));
+ */
+ }
+
+ private static class MyBean {
+ private String str;
+ private int i;
+ private String nil;
+ private long arr[];
+ private List<String> list = new ArrayList();
+ private AnotherBean bean;
+
+ /**
+ * @return the arr
+ */
+ public long[] getArr() {
+ return arr;
+ }
+
+ /**
+ * @param arr the arr to set
+ */
+ public void setArr(long[] arr) {
+ this.arr = arr;
+ }
+
+ /**
+ * @return the i
+ */
+ public int getI() {
+ return i;
+ }
+
+ /**
+ * @param i the i to set
+ */
+ public void setI(int i) {
+ this.i = i;
+ }
+
+ /**
+ * @return the str
+ */
+ public String getStr() {
+ return str;
+ }
+
+ /**
+ * @param str the str to set
+ */
+ public void setStr(String str) {
+ this.str = str;
+ }
+
+ /**
+ * @return the bean
+ */
+ public AnotherBean getBean() {
+ return bean;
+ }
+
+ /**
+ * @param bean the bean to set
+ */
+ public void setBean(AnotherBean bean) {
+ this.bean = bean;
+ }
+
+ public List<String> getList() {
+ return list;
+ }
+
+ public void setList(List<String> list) {
+ this.list = list;
+ }
+
+ public String getNil() {
+ return nil;
+ }
+
+ public void setNil(String nil) {
+ this.nil = nil;
+ }
+
+ }
+
+ private static class AnotherBean {
+ private String name;
+
+ /**
+ * @return the name
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * @param name the name to set
+ */
+ public void setName(String name) {
+ this.name = name;
+ }
+ }
+
+}
Propchange: incubator/tuscany/java/sca/modules/databinding/src/test/java/org/apache/tuscany/sca/databinding/xml/BeanXMLStreamReaderTestCase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/modules/databinding/src/test/java/org/apache/tuscany/sca/databinding/xml/BeanXMLStreamReaderTestCase.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: incubator/tuscany/java/sca/modules/databinding/src/test/java/org/apache/tuscany/sca/databinding/xml/DOM2StAXTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/test/java/org/apache/tuscany/sca/databinding/xml/DOM2StAXTestCase.java?rev=585611&r1=585610&r2=585611&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/test/java/org/apache/tuscany/sca/databinding/xml/DOM2StAXTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/test/java/org/apache/tuscany/sca/databinding/xml/DOM2StAXTestCase.java Wed Oct 17 11:04:49 2007
@@ -22,6 +22,7 @@
import junit.framework.TestCase;
+import org.custommonkey.xmlunit.XMLAssert;
import org.w3c.dom.Node;
public class DOM2StAXTestCase extends TestCase {
@@ -66,35 +67,38 @@
super.setUp();
}
- public void testTransformation() {
+ public void testTransformation() throws Exception {
String2Node t1 = new String2Node();
Node node = t1.transform(IPO_XML, null);
Node2XMLStreamReader t2 = new Node2XMLStreamReader();
XMLStreamReader reader = t2.transform(node, null);
XMLStreamReader2String t3 = new XMLStreamReader2String();
String xml = t3.transform(reader, null);
- assertTrue(xml != null && xml.indexOf("<shipDate>1999-12-05</shipDate>") != -1);
+ XMLAssert.assertXMLEqual(IPO_XML, xml);
+ // assertTrue(xml != null && xml.indexOf("<shipDate>1999-12-05</shipDate>") != -1);
}
- public void testTransformation2() {
+ public void testTransformation2() throws Exception {
String2Node t1 = new String2Node();
Node node = t1.transform(CRAZY_XML, null);
Node2XMLStreamReader t2 = new Node2XMLStreamReader();
XMLStreamReader reader = t2.transform(node, null);
XMLStreamReader2String t3 = new XMLStreamReader2String();
String xml = t3.transform(reader, null);
- System.out.println(xml);
+ // System.out.println(xml);
+ XMLAssert.assertXMLEqual(CRAZY_XML, xml);
assertTrue(xml.contains("<p:e2 xmlns:p=\"http://p2\""));
}
- public void testTransformation3() {
+ public void testTransformation3() throws Exception {
String2Node t1 = new String2Node();
Node node = t1.transform(IPO_XML, null);
DOMXmlNodeImpl element = new DOMXmlNodeImpl(node);
XmlTreeStreamReaderImpl reader = new XmlTreeStreamReaderImpl(element);
XMLStreamReader2String t3 = new XMLStreamReader2String();
String xml = t3.transform(reader, null);
- assertTrue(xml != null && xml.indexOf("<shipDate>1999-12-05</shipDate>") != -1);
+ XMLAssert.assertXMLEqual(IPO_XML, xml);
+ // assertTrue(xml != null && xml.indexOf("<shipDate>1999-12-05</shipDate>") != -1);
}
}
Modified: incubator/tuscany/java/sca/modules/databinding/src/test/java/org/apache/tuscany/sca/databinding/xml/JavaBean2XMLStreamReaderTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/test/java/org/apache/tuscany/sca/databinding/xml/JavaBean2XMLStreamReaderTestCase.java?rev=585611&r1=585610&r2=585611&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/test/java/org/apache/tuscany/sca/databinding/xml/JavaBean2XMLStreamReaderTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/test/java/org/apache/tuscany/sca/databinding/xml/JavaBean2XMLStreamReaderTestCase.java Wed Oct 17 11:04:49 2007
@@ -23,8 +23,15 @@
import junit.framework.TestCase;
import org.apache.tuscany.sca.databinding.javabeans.JavaBean2XMLStreamReader;
+import org.custommonkey.xmlunit.XMLAssert;
public class JavaBean2XMLStreamReaderTestCase extends TestCase {
+ private final static String XML_RESULT =
+ "<?xml version='1.0' encoding='UTF-8'?>"
+ + "<MyBean xmlns=\"http://xml.databinding.sca.tuscany.apache.org/\">"
+ + "<i>1</i><arr>1</arr><arr>2</arr><arr>3</arr><str>ABC</str><bean><name>Name</name></bean>"
+ + "</MyBean>";
+
/**
* @see junit.framework.TestCase#setUp()
*/
@@ -33,7 +40,7 @@
super.setUp();
}
- public void testTransformation() {
+ public void testTransformation() throws Exception {
JavaBean2XMLStreamReader t2 = new JavaBean2XMLStreamReader();
MyBean bean = new MyBean();
bean.str = "ABC";
@@ -44,9 +51,8 @@
XMLStreamReader reader = t2.transform(bean, null);
XMLStreamReader2String t3 = new XMLStreamReader2String();
String xml = t3.transform(reader, null);
- assertTrue(xml.contains("<JavaBean2XMLStreamReaderTestCase$MyBean>"
- + "<arr>1</arr><arr>2</arr><arr>3</arr><bean><name>Name</name></bean>"
- + "<i>1</i><str>ABC</str></JavaBean2XMLStreamReaderTestCase$MyBean>"));
+ XMLAssert.assertXMLEqual(XML_RESULT, xml);
+
}
private static class MyBean {
Modified: incubator/tuscany/java/sca/modules/databinding/src/test/java/org/apache/tuscany/sca/databinding/xml/StAXHelperTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/test/java/org/apache/tuscany/sca/databinding/xml/StAXHelperTestCase.java?rev=585611&r1=585610&r2=585611&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/test/java/org/apache/tuscany/sca/databinding/xml/StAXHelperTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/test/java/org/apache/tuscany/sca/databinding/xml/StAXHelperTestCase.java Wed Oct 17 11:04:49 2007
@@ -23,12 +23,15 @@
import junit.framework.TestCase;
+import org.custommonkey.xmlunit.XMLAssert;
+
/**
* Test Case for StAXHelper
*/
public class StAXHelperTestCase extends TestCase {
private static final String XML =
- "<a:foo xmlns:a='http://a' name='foo'><bar name='bar'>" + "<doo a:name='doo' xmlns:a='http://doo'/>"
+ "<a:foo xmlns:a='http://a' name='foo'><bar name='bar'>"
+ + "<doo a:name='doo' xmlns:a='http://doo'/>"
+ "</bar></a:foo>";
/**
@@ -42,7 +45,9 @@
public void testHelper() throws Exception {
XMLStreamReader reader = StAXHelper.createXMLStreamReader(XML);
String xml = StAXHelper.save(reader);
+ XMLAssert.assertXMLEqual(XML, xml);
reader = StAXHelper.createXMLStreamReader(xml);
+ assertNotNull(reader);
}
}
Modified: incubator/tuscany/java/sca/modules/databinding/src/test/java/org/apache/tuscany/sca/databinding/xml/XmlTreeStreamReaderTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/test/java/org/apache/tuscany/sca/databinding/xml/XmlTreeStreamReaderTestCase.java?rev=585611&r1=585610&r2=585611&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/test/java/org/apache/tuscany/sca/databinding/xml/XmlTreeStreamReaderTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/test/java/org/apache/tuscany/sca/databinding/xml/XmlTreeStreamReaderTestCase.java Wed Oct 17 11:04:49 2007
@@ -19,6 +19,7 @@
package org.apache.tuscany.sca.databinding.xml;
+import java.io.StringReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
@@ -27,11 +28,12 @@
import java.util.Map;
import javax.xml.namespace.QName;
-import javax.xml.stream.XMLStreamConstants;
-import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamReader;
import junit.framework.Assert;
+import org.custommonkey.xmlunit.XMLAssert;
import org.junit.Before;
import org.junit.Test;
@@ -39,30 +41,80 @@
* @version $Rev$ $Date$
*/
public class XmlTreeStreamReaderTestCase {
- private XmlElementImpl root;
+ private static final String IPO_XML =
+ "<?xml version=\"1.0\"?>" + "<ipo:purchaseOrder"
+ + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""
+ + " xmlns:ipo=\"http://www.example.com/IPO\""
+ + " xsi:schemaLocation=\"http://www.example.com/IPO ipo.xsd\""
+ + " orderDate=\"1999-12-01\">"
+ + " <shipTo exportCode=\"1\" xsi:type=\"ipo:UKAddress\">"
+ + " <name>Helen Zoe</name>"
+ + " <street>47 Eden Street</street>"
+ + " <city>Cambridge</city>"
+ + " <postcode>CB1 1JR</postcode>"
+ + " </shipTo>"
+ + " <billTo xsi:type=\"ipo:USAddress\">"
+ + " <name>Robert Smith</name>"
+ + " <street>8 Oak Avenue</street>"
+ + " <city>Old Town</city>"
+ + " <state>PA</state>"
+ + " <zip>95819</zip>"
+ + " </billTo>"
+ + " <items>"
+ + " <item partNum=\"833-AA\">"
+ + " <productName>Lapis necklace</productName>"
+ + " <quantity>1</quantity>"
+ + " <USPrice>99.95</USPrice>"
+ + " <ipo:comment>Want this for the holidays</ipo:comment>"
+ + " <shipDate>1999-12-05</shipDate>"
+ + " </item>"
+ + " </items>"
+ + "</ipo:purchaseOrder>";
+
+ private final static String XML_RESULT =
+ "<?xml version='1.0' encoding='UTF-8'?>" + "<p1:e1 xmlns:p1=\"http://ns\">"
+ + "<p2:e11 xmlns:p2=\"http://ns1\">MyText</p2:e11>"
+ + "<p1:e12><p1:e121 /></p1:e12>"
+ + "<ipo:purchaseOrder xmlns:ipo=\"http://www.example.com/IPO\" "
+ + "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "
+ + "xsi:schemaLocation=\"http://www.example.com/IPO ipo.xsd\" orderDate=\"1999-12-01\"> "
+ + "<shipTo exportCode=\"1\" xsi:type=\"ipo:UKAddress\"> "
+ + "<name>Helen Zoe</name> <street>47 Eden Street</street> "
+ + "<city>Cambridge</city> <postcode>CB1 1JR</postcode> </shipTo> "
+ + "<billTo xsi:type=\"ipo:USAddress\"> <name>Robert Smith</name> "
+ + "<street>8 Oak Avenue</street> <city>Old Town</city> <state>PA</state> "
+ + "<zip>95819</zip> </billTo> <items> <item partNum=\"833-AA\"> "
+ + "<productName>Lapis necklace</productName> <quantity>1</quantity> "
+ + "<USPrice>99.95</USPrice> <ipo:comment>Want this for the holidays</ipo:comment> "
+ + "<shipDate>1999-12-05</shipDate> </item> </items></ipo:purchaseOrder></p1:e1>";
+ private XmlNodeImpl root;
@Before
- public void setUp() {
- root = new XmlElementImpl();
+ public void setUp() throws Exception {
+ root = new XmlNodeImpl();
root.name = new QName("http://ns", "e1", "p1");
- XmlElementImpl e11 = new XmlElementImpl();
+ XmlNodeImpl e11 = new XmlNodeImpl();
e11.name = new QName("http://ns1", "e11", "p2");
- XmlElementImpl e12 = new XmlElementImpl();
+ XmlNodeImpl e12 = new XmlNodeImpl();
e12.name = new QName("http://ns", "e12");
root.children.add(e11);
root.children.add(e12);
- XmlElementImpl e121 = new XmlElementImpl();
+ XmlNodeImpl e121 = new XmlNodeImpl();
e121.name = new QName("http://ns", "e121");
e12.children.add(e121);
- XmlElementImpl e111 = new XmlElementImpl();
+ XmlNodeImpl e111 = new XmlNodeImpl();
e111.value = "MyText";
e11.children.add(e111);
+ XmlNodeImpl e13 = new XmlNodeImpl();
+ e13.value = XMLInputFactory.newInstance().createXMLStreamReader(new StringReader(IPO_XML));
+ root.children.add(e13);
+
}
@Test
@@ -72,58 +124,34 @@
for (; i.hasNext();) {
XmlNode e = i.next();
elements.add(e.getName());
- // System.out.println(i.getNamespaceContext());
}
+ // System.out.println(elements);
QName[] names =
{new QName("http://ns", "e1"), new QName("http://ns1", "e11"), null, null, new QName("http://ns1", "e11"),
new QName("http://ns", "e12"), new QName("http://ns", "e121"), new QName("http://ns", "e121"),
- new QName("http://ns", "e12"), new QName("http://ns", "e1")};
+ new QName("http://ns", "e12"), null, null, new QName("http://ns", "e1")};
Assert.assertEquals(Arrays.asList(names), elements);
}
@Test
- public void testReader() throws XMLStreamException {
+ public void testReader() throws Exception {
XmlTreeStreamReaderImpl reader = new XmlTreeStreamReaderImpl(root);
- List<String> seq = new ArrayList<String>();
- while (true) {
- int e = reader.getEventType();
- if (e == XMLStreamConstants.START_DOCUMENT) {
- seq.add("START_DOCUMENT");
- } else if (e == XMLStreamConstants.END_DOCUMENT) {
- seq.add("END_DOCUMENT");
- } else if (e == XMLStreamConstants.CHARACTERS) {
- seq.add(reader.getText());
- } else {
- seq.add(e + ": " + reader.getName());
- }
- if (!reader.hasNext()) {
- break;
- } else {
- reader.next();
- }
- }
-
- String[] events =
- {"START_DOCUMENT", "1: {http://ns}e1", "1: {http://ns1}e11", "MyText", "2: {http://ns1}e11",
- "1: {http://ns}e12", "1: {http://ns}e121", "2: {http://ns}e121", "2: {http://ns}e12", "2: {http://ns}e1",
- "END_DOCUMENT"
- };
-
- Assert.assertEquals(Arrays.asList(events), seq);
+ XMLStreamReader2String t = new XMLStreamReader2String();
+ String xml = t.transform(reader, null);
+ XMLAssert.assertXMLEqual(XML_RESULT, xml);
}
- private static class XmlElementImpl implements XmlNode {
+ private static class XmlNodeImpl implements XmlNode {
private List<XmlNode> children = new ArrayList<XmlNode>();
- private List<XmlAttribute> attrs = new ArrayList<XmlAttribute>();
+ private List<XmlNode> attrs = new ArrayList<XmlNode>();
private Map<String, String> namespaces = new HashMap<String, String>();
private QName name;
- private boolean isLeaf;
- private String value = "123";
+ private Object value = "123";
/**
* @see org.apache.tuscany.sca.databinding.xml.XmlNode#attributes()
*/
- public List<XmlAttribute> attributes() {
+ public List<XmlNode> attributes() {
return attrs;
}
@@ -144,15 +172,8 @@
/**
* @see org.apache.tuscany.sca.databinding.xml.XmlNode#getValue()
*/
- public String getValue() {
- return value;
- }
-
- /**
- * @see org.apache.tuscany.sca.databinding.xml.XmlNode#isLeaf()
- */
- public boolean isLeaf() {
- return isLeaf;
+ public <T> T getValue() {
+ return (T)value;
}
/**
@@ -164,6 +185,13 @@
public String toString() {
return String.valueOf(name);
+ }
+
+ public Type getType() {
+ if (value instanceof XMLStreamReader) {
+ return Type.READER;
+ }
+ return name == null ? Type.CHARACTERS : Type.ELEMENT;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org