axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Alex Quezada <al...@deepwebtech.com>
Subject Support for JAVA 5 enums
Date Thu, 24 Aug 2006 20:31:09 GMT
I've written a simple class to handle serialization of Java 5 enums, I
wonder if this is planned for a future release.  In any case, here's the
code I'm using in case it's helpful to someone else:

import java.io.IOException;
import java.lang.reflect.Method;

import javax.xml.namespace.QName;

import org.apache.axis.components.logger.LogFactory;
import org.apache.axis.encoding.SerializationContext;
import org.apache.axis.encoding.ser.SimpleSerializer;
import org.apache.axis.utils.Messages;
import org.apache.axis.wsdl.fromJava.Types;
import org.apache.commons.logging.Log;
import org.w3c.dom.Element;
import org.xml.sax.Attributes;

public class EnumSerializer extends SimpleSerializer {

    protected static Log log =
        LogFactory.getLog(EnumSerializer.class.getName());

    private Method toStringMethod = null;

    public EnumSerializer(Class javaType, QName xmlType) {
        super(javaType, xmlType);
    }

    /**
     * Serialize an enumeration
     */
    public void serialize(QName name, Attributes attributes,
                          Object value, SerializationContext context)
        throws IOException
    {
        context.startElement(name, attributes);
        context.writeString(getValueAsString(value, context));
        context.endElement();
    }

    public String getValueAsString(Object value, SerializationContext
context) {
        // Invoke the toString method on the enumeration class and
        // write out the result as a string.
        try {
            if (toStringMethod == null) {
                toStringMethod = javaType.getMethod("toString",
(Class[])null);
            }
            return (String) toStringMethod.invoke(value, (Object[])null);
        } catch (Exception e) {
            log.error(Messages.getMessage("exception00"), e);
        }
        return null;
    }

    /**
     * Return XML schema for the specified type, suitable for insertion into
     * the &lt;types&gt; element of a WSDL document, or underneath an
     * &lt;element&gt; or &lt;attribute&gt; declaration.
     *
     * @param javaType the Java Class we're writing out schema for
     * @param types the Java2WSDL Types object which holds the context
     *              for the WSDL being generated.
     * @return a type element containing a schema simpleType/complexType
     * @see org.apache.axis.wsdl.fromJava.Types
     */
    public Element writeSchema(Class javaType, Types types) throws
Exception {
        Element simpleType = types.createElement("simpleType");
        Element restriction = types.createElement("restriction");
        restriction.setAttribute("base", types.writeType(String.class));
        simpleType.appendChild(restriction);
        Object[] enums = javaType.getEnumConstants();
        for (Object o : enums) {
            if (javaType.isInstance(o)) {
                Element enumeration = types.createElement("enumeration");
                enumeration.setAttribute("value", o.toString());
                restriction.appendChild(enumeration);
            }
        }
        return simpleType;
    }
}

===============================================================================

import java.beans.IntrospectionException;
import java.lang.reflect.Method;

import javax.xml.namespace.QName;

import org.apache.axis.encoding.ser.SimpleDeserializer;

/**
* Deserializer for a JAVA 5 enum.
*
*/
public class EnumDeserializer extends SimpleDeserializer {

    private static final long serialVersionUID = 7550697103681899189L;
    private Method valueOfMethod = null;

    public EnumDeserializer(Class javaType, QName xmlType) {
        super(javaType, xmlType);
    }

    public Object makeValue(String source) throws Exception
    {
        // Invoke the fromString static method to get the Enumeration value
        if (isNil)
            return null;
        if (valueOfMethod == null) {
            try {
                valueOfMethod = javaType.getMethod("valueOf", new
Class[] {source.getClass()});
            } catch (Exception e) {
                throw new IntrospectionException(e.toString());
            }
        }
        return valueOfMethod.invoke(null,new Object [] { source });
    }
}


---------------------------------------------------------------------
To unsubscribe, e-mail: axis-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-dev-help@ws.apache.org


Mime
View raw message