Index: C:/Projects/nuparadigm/development/xfire/xfire-aegis/src/main/org/codehaus/xfire/aegis/AbstractMessageReader.java =================================================================== --- C:/Projects/nuparadigm/development/xfire/xfire-aegis/src/main/org/codehaus/xfire/aegis/AbstractMessageReader.java (revision 1523) +++ C:/Projects/nuparadigm/development/xfire/xfire-aegis/src/main/org/codehaus/xfire/aegis/AbstractMessageReader.java (working copy) @@ -49,10 +49,16 @@ { return getValue() != null; } - + /** - * @see org.codehaus.xfire.aegis.MessageReader#getValueAsInt() + * @see org.codehaus.xfire.aegis.MessageReader#getValueAsCharacter() */ + public char getValueAsCharacter() + { + if (getValue() == null) return 0; + return getValue().charAt(0); + } + public int getValueAsInt() { if (getValue() == null) return 0; Index: C:/Projects/nuparadigm/development/xfire/xfire-aegis/src/main/org/codehaus/xfire/aegis/AbstractMessageWriter.java =================================================================== --- C:/Projects/nuparadigm/development/xfire/xfire-aegis/src/main/org/codehaus/xfire/aegis/AbstractMessageWriter.java (revision 1523) +++ C:/Projects/nuparadigm/development/xfire/xfire-aegis/src/main/org/codehaus/xfire/aegis/AbstractMessageWriter.java (working copy) @@ -43,6 +43,14 @@ } /** + * @see org.codehaus.xfire.aegis.MessageWriter#writeValueAsCharacter(java.lang.Character) + */ + public void writeValueAsCharacter(Character char1) + { + writeValue(char1.toString()); + } + + /** * @see org.codehaus.xfire.aegis.MessageWriter#writeValueAsLong(java.lang.Long) */ public void writeValueAsLong(Long l) Index: C:/Projects/nuparadigm/development/xfire/xfire-aegis/src/main/org/codehaus/xfire/aegis/MessageReader.java =================================================================== --- C:/Projects/nuparadigm/development/xfire/xfire-aegis/src/main/org/codehaus/xfire/aegis/MessageReader.java (revision 1523) +++ C:/Projects/nuparadigm/development/xfire/xfire-aegis/src/main/org/codehaus/xfire/aegis/MessageReader.java (working copy) @@ -22,9 +22,11 @@ public double getValueAsDouble(); public float getValueAsFloat(); + + public boolean getValueAsBoolean(); - public boolean getValueAsBoolean(); - + public char getValueAsCharacter(); + public MessageReader getAttributeReader( QName qName ); public boolean hasMoreAttributeReaders(); Index: C:/Projects/nuparadigm/development/xfire/xfire-aegis/src/main/org/codehaus/xfire/aegis/MessageWriter.java =================================================================== --- C:/Projects/nuparadigm/development/xfire/xfire-aegis/src/main/org/codehaus/xfire/aegis/MessageWriter.java (revision 1523) +++ C:/Projects/nuparadigm/development/xfire/xfire-aegis/src/main/org/codehaus/xfire/aegis/MessageWriter.java (working copy) @@ -13,6 +13,8 @@ void writeValueAsInt( Integer i ); + void writeValueAsCharacter(Character char1); + void writeValueAsDouble(Double double1); void writeValueAsLong(Long l); Index: C:/Projects/nuparadigm/development/xfire/xfire-aegis/src/main/org/codehaus/xfire/aegis/type/basic/ArrayType.java =================================================================== --- C:/Projects/nuparadigm/development/xfire/xfire-aegis/src/main/org/codehaus/xfire/aegis/type/basic/ArrayType.java (revision 1523) +++ C:/Projects/nuparadigm/development/xfire/xfire-aegis/src/main/org/codehaus/xfire/aegis/type/basic/ArrayType.java (working copy) @@ -166,7 +166,16 @@ } return array; } - + else if (Character.TYPE.equals(arrayType)) + { + Object[] objects = values.toArray(); + Object array = Array.newInstance(Character.TYPE, objects.length); + for (int i = 0, n = objects.length; i < n; i++) + { + Array.set(array, i, objects[i]); + } + return array; + } return values.toArray( (Object[]) Array.newInstance( getComponentType().getTypeClass(), values.size()) ); } @@ -256,6 +265,14 @@ writeValue(new Boolean(objects[i]), writer, context, type, name, ns); } } + else if (Character.TYPE.equals(arrayType)) + { + char[] objects = (char[]) values; + for (int i = 0, n = objects.length; i < n; i++) + { + writeValue(new Character(objects[i]), writer, context, type, name, ns); + } + } } protected void writeValue(Object value, Index: C:/Projects/nuparadigm/development/xfire/xfire-aegis/src/main/org/codehaus/xfire/aegis/type/basic/CharacterType.java =================================================================== --- C:/Projects/nuparadigm/development/xfire/xfire-aegis/src/main/org/codehaus/xfire/aegis/type/basic/CharacterType.java (revision 0) +++ C:/Projects/nuparadigm/development/xfire/xfire-aegis/src/main/org/codehaus/xfire/aegis/type/basic/CharacterType.java (revision 0) @@ -0,0 +1,23 @@ +package org.codehaus.xfire.aegis.type.basic; + +import org.codehaus.xfire.MessageContext; +import org.codehaus.xfire.aegis.MessageReader; +import org.codehaus.xfire.aegis.MessageWriter; +import org.codehaus.xfire.aegis.type.Type; + +/** + * @author Sean Truman + */ +public class CharacterType extends Type +{ + public Object readObject(MessageReader reader, MessageContext context) + { + return new Character( reader.getValueAsCharacter() ); + } + + public void writeObject(Object object, MessageWriter writer, MessageContext context) + { + writer.writeValueAsCharacter((Character)object); + } + +} Index: C:/Projects/nuparadigm/development/xfire/xfire-aegis/src/main/org/codehaus/xfire/aegis/type/DefaultTypeMappingRegistry.java =================================================================== --- C:/Projects/nuparadigm/development/xfire/xfire-aegis/src/main/org/codehaus/xfire/aegis/type/DefaultTypeMappingRegistry.java (revision 1523) +++ C:/Projects/nuparadigm/development/xfire/xfire-aegis/src/main/org/codehaus/xfire/aegis/type/DefaultTypeMappingRegistry.java (working copy) @@ -24,6 +24,7 @@ import org.codehaus.xfire.aegis.type.basic.BigIntegerType; import org.codehaus.xfire.aegis.type.basic.BooleanType; import org.codehaus.xfire.aegis.type.basic.CalendarType; +import org.codehaus.xfire.aegis.type.basic.CharacterType; import org.codehaus.xfire.aegis.type.basic.DateTimeType; import org.codehaus.xfire.aegis.type.basic.DoubleType; import org.codehaus.xfire.aegis.type.basic.FloatType; @@ -63,6 +64,7 @@ protected static final QName XSD_LONG = new QName(SoapConstants.XSD, "long", SoapConstants.XSD_PREFIX); protected static final QName XSD_FLOAT = new QName(SoapConstants.XSD, "float", SoapConstants.XSD_PREFIX); protected static final QName XSD_DOUBLE = new QName(SoapConstants.XSD, "double", SoapConstants.XSD_PREFIX); + protected static final QName XSD_CHAR = new QName(SoapConstants.XSD, "char", SoapConstants.XSD_PREFIX); protected static final QName XSD_INT = new QName(SoapConstants.XSD, "int", SoapConstants.XSD_PREFIX); protected static final QName XSD_SHORT = new QName(SoapConstants.XSD, "short", SoapConstants.XSD_PREFIX); protected static final QName XSD_BOOLEAN = new QName(SoapConstants.XSD, "boolean", SoapConstants.XSD_PREFIX); @@ -86,6 +88,7 @@ protected static final QName ENCODED_STRING = new QName(ENCODED_NS, "string"); protected static final QName ENCODED_LONG = new QName(ENCODED_NS, "long"); protected static final QName ENCODED_FLOAT = new QName(ENCODED_NS, "float"); + protected static final QName ENCODED_CHAR = new QName(ENCODED_NS, "char"); protected static final QName ENCODED_DOUBLE = new QName(ENCODED_NS, "double"); protected static final QName ENCODED_INT = new QName(ENCODED_NS, "int"); protected static final QName ENCODED_SHORT = new QName(ENCODED_NS, "short"); @@ -302,6 +305,8 @@ register(tm, double.class, XSD_DOUBLE, new DoubleType()); register(tm, float.class, XSD_FLOAT, new FloatType()); register(tm, long.class, XSD_LONG, new LongType()); + register(tm, char.class,XSD_CHAR, new CharacterType()); + register(tm, Character.class,XSD_CHAR, new CharacterType()); register(tm, String.class, XSD_STRING, new StringType()); register(tm, Boolean.class, XSD_BOOLEAN, new BooleanType()); register(tm, Integer.class, XSD_INT, new IntType()); @@ -325,6 +330,7 @@ register(tm, Object.class, XSD_ANY, new ObjectType()); register(tm, DataSource.class, XSD_BASE64, new DataSourceType()); register(tm, DataHandler.class, XSD_BASE64, new DataHandlerType()); + registerIfAvailable(tm, "javax.xml.datatype.Duration", XSD_DURATION, "org.codehaus.xfire.aegis.type.java5.DurationType"); registerIfAvailable(tm, "javax.xml.datatype.XMLGregorianCalendar", XSD_DATE, "org.codehaus.xfire.aegis.type.java5.XMLGregorianCalendarType"); @@ -348,6 +354,8 @@ register(soapTM, double.class, ENCODED_DOUBLE, new DoubleType()); register(soapTM, float.class, ENCODED_FLOAT, new FloatType()); register(soapTM, long.class, ENCODED_LONG, new LongType()); + register(soapTM, char.class,ENCODED_CHAR,new CharacterType()); + register(soapTM, Character.class,ENCODED_CHAR,new CharacterType()); register(soapTM, String.class, ENCODED_STRING, new StringType()); register(soapTM, Boolean.class, ENCODED_BOOLEAN, new BooleanType()); register(soapTM, Integer.class, ENCODED_INT, new IntType()); @@ -444,4 +452,5 @@ { this.typeConfiguration = typeConfiguration; } + }