View Javadoc

    1   package org.codehaus.xfire.aegis.type.java5;
    2
    3   import org.codehaus.xfire.MessageContext;
    4   import org.codehaus.xfire.XFireRuntimeException;
    5   import org.codehaus.xfire.aegis.MessageReader;
    6   import org.codehaus.xfire.aegis.MessageWriter;
    7   import org.codehaus.xfire.aegis.type.Type;
    8   import org.codehaus.xfire.fault.XFireFault;
    9   import org.codehaus.xfire.soap.SoapConstants;
    10  import org.codehaus.yom.Attribute;
    11  import org.codehaus.yom.Element;
    12
    13  public class EnumType
    14      extends Type
    15  {
    16      @Override
    17      public Object readObject(MessageReader reader, MessageContext context)
    18          throws XFireFault
    19      {
    20          String value = reader.getValue();
    21
    22          return Enum.valueOf(getTypeClass(), value);
    23      }
    24
    25      @Override
    26      public void writeObject(Object object, MessageWriter writer, MessageContext context)
    27          throws XFireFault
    28      {
    29          writer.writeValue(((Enum) object).toString());
    30      }
    31
    32      @Override
    33      public void setTypeClass(Class typeClass)
    34      {
    35          if (!typeClass.isEnum())
    36          {
    37              throw new XFireRuntimeException("Type class must be an enum.");
    38          }
    39
    40          super.setTypeClass(typeClass);
    41      }
    42
    43      @Override
    44      public void writeSchema(Element root)
    45      {
    46          Element simple = new Element(SoapConstants.XSD_PREFIX + ":simpleType",
    47                                        SoapConstants.XSD);
    48          simple.addAttribute(new Attribute("name", getSchemaType().getLocalPart()));
    49          root.appendChild(simple);
    50
    51          Element restriction = new Element(SoapConstants.XSD_PREFIX + ":restriction",
    52                                       SoapConstants.XSD);
    53          restriction.addAttribute(new Attribute("base", SoapConstants.XSD_PREFIX + ":string"));
    54          simple.appendChild(restriction);
    55
    56          Object[] constants = getTypeClass().getEnumConstants();
    57
    58          for (Object constant : constants)
    59          {
    60              Element enumeration = new Element(SoapConstants.XSD_PREFIX + ":enumeration",
    61                                            SoapConstants.XSD);
    62              enumeration.addAttribute(new Attribute("value", ((Enum) constant).toString()));
    63              restriction.appendChild(enumeration);
    64          }
    65      }
    66
    67      @Override
    68      public boolean isComplex()
    69      {
    70          return true;
    71      }
    72  }