[Practicalxml-commits] SF.net SVN: practicalxml:[120] branches/dev-1.1/src
Brought to you by:
kdgregory
|
From: Auto-Generated S. C. M. <pra...@li...> - 2009-08-18 20:25:55
|
Revision: 120
http://practicalxml.svn.sourceforge.net/practicalxml/?rev=120&view=rev
Author: kdgregory
Date: 2009-08-18 20:25:47 +0000 (Tue, 18 Aug 2009)
Log Message:
-----------
refactoring - introduce ConversionStrings
Modified Paths:
--------------
branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Bean2XmlAppenders.java
branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Bean2XmlDriver.java
branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Xml2BeanDriver.java
branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/internal/DomUtilToo.java
branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/TestXml2BeanDriver.java
Added Paths:
-----------
branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/internal/ConversionStrings.java
Modified: branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Bean2XmlAppenders.java
===================================================================
--- branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Bean2XmlAppenders.java 2009-08-18 19:54:24 UTC (rev 119)
+++ branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Bean2XmlAppenders.java 2009-08-18 20:25:47 UTC (rev 120)
@@ -19,6 +19,7 @@
import net.sf.practicalxml.DomUtil;
import net.sf.practicalxml.converter.ConversionException;
+import net.sf.practicalxml.converter.internal.ConversionStrings;
import net.sf.practicalxml.converter.internal.DomUtilToo;
@@ -168,7 +169,7 @@
{
Element child = super.appendValue(name, type, value);
if (child != null)
- child.setAttribute("index", String.valueOf(_index++));
+ child.setAttribute(ConversionStrings.AT_ARRAY_INDEX, String.valueOf(_index++));
return child;
}
}
@@ -198,9 +199,9 @@
}
else
{
- child = super.appendValue("data", type, value);
+ child = super.appendValue(ConversionStrings.EL_COLLECTION_ITEM, type, value);
if (child != null)
- child.setAttribute("key", name);
+ child.setAttribute(ConversionStrings.AT_MAP_KEY, name);
}
return child;
}
Modified: branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Bean2XmlDriver.java
===================================================================
--- branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Bean2XmlDriver.java 2009-08-18 19:54:24 UTC (rev 119)
+++ branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Bean2XmlDriver.java 2009-08-18 20:25:47 UTC (rev 120)
@@ -29,6 +29,7 @@
import net.sf.practicalxml.DomUtil;
import net.sf.practicalxml.converter.ConversionException;
import net.sf.practicalxml.converter.bean.Bean2XmlAppenders.*;
+import net.sf.practicalxml.converter.internal.ConversionStrings;
import net.sf.practicalxml.converter.internal.DomUtilToo;
import net.sf.practicalxml.converter.internal.PrimitiveConversionHelper;
@@ -117,12 +118,6 @@
}
- private String getJavaXsiType(Object obj)
- {
- return "java:" + obj.getClass().getName();
- }
-
-
/**
* Introduces the XML Schema Instance namespace into the DOM tree using a
* meaningless attribute. The Xerces serializer does not attempt to promote
@@ -171,13 +166,13 @@
if (!array.getClass().isArray())
return false;
- Element parent = appender.appendContainer(name, getJavaXsiType(array));
+ Element parent = appender.appendContainer(name, DomUtilToo.getXsiTypeForJavaObject(array));
Appender childAppender = new IndexedAppender(parent, _options);
int length = Array.getLength(array);
for (int idx = 0 ; idx < length ; idx++)
{
Object value = Array.get(array, idx);
- convert(value, "data", childAppender);
+ convert(value, ConversionStrings.EL_COLLECTION_ITEM, childAppender);
}
return true;
}
@@ -188,7 +183,7 @@
if (!(obj instanceof Map))
return false;
- Element parent = appender.appendContainer(name, getJavaXsiType(obj));
+ Element parent = appender.appendContainer(name, DomUtilToo.getXsiTypeForJavaObject(obj));
Appender childAppender = new MapAppender(parent, _options);
for (Map.Entry<?,?> entry : ((Map<?,?>)obj).entrySet())
{
@@ -203,11 +198,11 @@
if (!(obj instanceof Collection))
return false;
- Element parent = appender.appendContainer(name, getJavaXsiType(obj));
+ Element parent = appender.appendContainer(name, DomUtilToo.getXsiTypeForJavaObject(obj));
Appender childAppender = new IndexedAppender(parent, _options);
for (Object value : (Collection<?>)obj)
{
- convert(value, "data", childAppender);
+ convert(value, ConversionStrings.EL_COLLECTION_ITEM, childAppender);
}
return true;
}
@@ -215,7 +210,7 @@
private boolean tryToConvertAsBean(Object bean, String name, Appender appender)
{
- Element parent = appender.appendContainer(name, getJavaXsiType(bean));
+ Element parent = appender.appendContainer(name, DomUtilToo.getXsiTypeForJavaObject(bean));
Appender childAppender = new BasicAppender(parent, _options);
try
{
Modified: branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Xml2BeanDriver.java
===================================================================
--- branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Xml2BeanDriver.java 2009-08-18 19:54:24 UTC (rev 119)
+++ branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Xml2BeanDriver.java 2009-08-18 20:25:47 UTC (rev 120)
@@ -35,6 +35,7 @@
import net.sf.practicalxml.DomUtil;
import net.sf.practicalxml.converter.ConversionException;
+import net.sf.practicalxml.converter.internal.ConversionStrings;
import net.sf.practicalxml.converter.internal.DomUtilToo;
import net.sf.practicalxml.converter.internal.PrimitiveConversionHelper;
import net.sf.practicalxml.internal.StringUtils;
@@ -84,8 +85,6 @@
// Internal Conversion Methods
//----------------------------------------------------------------------------
-
-
/**
* Attempts to convert the passed DOM subtree into an object of the
* specified class. Note that this version does not use generics,
@@ -184,7 +183,7 @@
List<Element> children = DomUtil.getChildren(elem);
for (Element child : children)
{
- String key = child.getAttribute("key");
+ String key = child.getAttribute(ConversionStrings.AT_MAP_KEY);
if (StringUtils.isEmpty(key))
key = DomUtil.getLocalName(child);
Class<?> childClass = getClassFromXsiType(child);
@@ -244,9 +243,9 @@
if (xsiType == null)
return null;
- if (xsiType.startsWith("java:"))
+ String javaType = DomUtilToo.getJavaClassFromXsiType(xsiType);
+ if (javaType != null)
{
- String javaType = xsiType.substring(5);
try
{
return Class.forName(javaType);
@@ -257,6 +256,7 @@
"invalid Java type specification: " + javaType, elem, ee);
}
}
+
return _helper.getJavaType(xsiType);
}
Added: branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/internal/ConversionStrings.java
===================================================================
--- branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/internal/ConversionStrings.java (rev 0)
+++ branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/internal/ConversionStrings.java 2009-08-18 20:25:47 UTC (rev 120)
@@ -0,0 +1,47 @@
+// Copyright 2008-2009 severally by the contributors
+//
+// 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.
+
+package net.sf.practicalxml.converter.internal;
+
+
+/**
+ * Contains constants for various string values used by the conversion
+ * routines. The goal is to have all converters use the same strings
+ * (without typos) in the same location.
+ */
+public class ConversionStrings
+{
+ /**
+ * Element name used to hold unnamed items from collections and arrays.
+ */
+ public final static String EL_COLLECTION_ITEM = "data";
+
+
+ /**
+ * Attribute used to hold the element index number for collections and arrays.
+ */
+ public final static String AT_ARRAY_INDEX = "index";
+
+
+ /**
+ * Attribute used to hold the item key value for maps.
+ */
+ public final static String AT_MAP_KEY = "key";
+
+
+ /**
+ * Used to prefix Java type names in an <code>xsi:type</code> attribute.
+ */
+ public final static String JAVA_TYPE_PREFIX = "java:";
+}
Modified: branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/internal/DomUtilToo.java
===================================================================
--- branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/internal/DomUtilToo.java 2009-08-18 19:54:24 UTC (rev 119)
+++ branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/internal/DomUtilToo.java 2009-08-18 20:25:47 UTC (rev 120)
@@ -27,7 +27,7 @@
* are not generally useful to anyone who isn't writing a converter. But if you
* are writing a converter, you'll probably use them a lot ...
* <p>
- * Note: where methods in this class reference a namespaced element or attribute
+ * Note: where methods in this class reference a namespaced element or attribute
* (eg, <code>xsi:type</code>), they do not use a prefix unless explicitly noted.
* This prevents the possibility of collisions, where the same prefix is used
* elsewhere in the DOM for elements not managed by the converter. A serializer
@@ -36,44 +36,80 @@
public class DomUtilToo
{
/**
+ * Sets the <code>xsi:nil</code> attribute to the passed value.
+ */
+ public static void setXsiNil(Element elem, boolean isNil)
+ {
+ String value = isNil ? "true" : "false";
+ elem.setAttributeNS(XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI, "nil", value);
+ }
+
+
+ /**
+ * Returns the value of the <code>xsi:nil</code> attribute on the passed
+ * element, <code>false</code> if the attribute is not set.
+ */
+ public static boolean getXsiNil(Element elem)
+ {
+ String attr = elem.getAttributeNS(XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI, "nil");
+ return attr.equals("true");
+ }
+
+
+ /**
* Sets the <code>xsi:type</code> attribute to the passed value.
*/
public static void setXsiType(Element elem, String xsiType)
{
elem.setAttributeNS(XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI, "type", xsiType);
}
-
-
+
+
/**
* Returns the value of the <code>xsi:type</code> attribute on the passed
* element, <code>null</code> if the attribute is not set.
*/
public static String getXsiType(Element elem)
- {
+ {
String xsiType = elem.getAttributeNS(XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI, "type");
return StringUtils.isEmpty(xsiType)
? null
: xsiType;
}
-
-
+
+
/**
- * Sets the <code>xsi:nil</code> attribute to the passed value.
+ * Returns the Java classname corresponding to an <code>xsi:type</code>
+ * value, <code>null</code> if the attribute is missing or doesn't follow
+ * the pattern for Java type names.
*/
- public static void setXsiNil(Element elem, boolean isNil)
+ public static String getJavaClassFromXsiType(String xsiType)
{
- String value = isNil ? "true" : "false";
- elem.setAttributeNS(XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI, "nil", value);
+ if (!xsiType.startsWith(ConversionStrings.JAVA_TYPE_PREFIX))
+ return null;
+ return xsiType.substring(ConversionStrings.JAVA_TYPE_PREFIX.length());
}
-
-
+
+
/**
- * Returns the value of the <code>xsi:nil</code> attribute on the passed
- * element, <code>false</code> if the attribute is not set.
+ * Returns the type name to be stored in <code>xsi:type</code> for a Java
+ * class (this is a companion to {@link #getJavaClassFromXsiType}).
*/
- public static boolean getXsiNil(Element elem)
+ public static String getXsiTypeForJavaObject(Class<?> klass)
{
- String attr = elem.getAttributeNS(XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI, "nil");
- return attr.equals("true");
+ return ConversionStrings.JAVA_TYPE_PREFIX + klass.getName();
}
+
+
+ /**
+ * Returns the type name to be stored in <code>xsi:type</code> for a Java
+ * object (this is actually used more than the alternate version). Will
+ * return empty string if passed <code>null</code>.
+ */
+ public static String getXsiTypeForJavaObject(Object obj)
+ {
+ return (obj == null)
+ ? ""
+ : getXsiTypeForJavaObject(obj.getClass());
+ }
}
Modified: branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/TestXml2BeanDriver.java
===================================================================
--- branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/TestXml2BeanDriver.java 2009-08-18 19:54:24 UTC (rev 119)
+++ branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/TestXml2BeanDriver.java 2009-08-18 20:25:47 UTC (rev 120)
@@ -700,10 +700,9 @@
public void testReadOnlyBean() throws Exception
{
- Xml2BeanDriver driver = new Xml2BeanDriver();
Element data = createTestData(
element("sval", text("foo")));
-
+ Xml2BeanDriver driver = new Xml2BeanDriver();
assertConversionFailure("converted bean without setter",
driver, data, ReadOnlyBean.class);
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|