All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.codehaus.xfire.aegis.type.basic.HolderType Maven / Gradle / Ivy

package org.codehaus.xfire.aegis.type.basic;

import javax.xml.namespace.QName;

import org.codehaus.xfire.MessageContext;
import org.codehaus.xfire.aegis.AegisBindingProvider;
import org.codehaus.xfire.aegis.Holder;
import org.codehaus.xfire.aegis.MessageReader;
import org.codehaus.xfire.aegis.MessageWriter;
import org.codehaus.xfire.aegis.type.Type;
import org.codehaus.xfire.aegis.type.TypeMapping;
import org.codehaus.xfire.exchange.AbstractMessage;
import org.codehaus.xfire.fault.XFireFault;
import org.codehaus.xfire.service.MessagePartInfo;
import org.codehaus.xfire.service.binding.AbstractBinding;
import org.jdom.Element;

/**
 * A holder type which makes multiple out parameters possible.
 * @author Dan Diephouse
 */
public class HolderType
    extends Type
{
    private Type delegate;
    
    public HolderType(Type delegate)
    {
        super();
    
        this.delegate = delegate;
        setTypeClass(org.codehaus.xfire.aegis.Holder.class);
    }
    
    public Type getDelegate()
    {
        return delegate;
    }

    public Object readObject(MessageReader reader, MessageContext context)
        throws XFireFault
    {
        Object o = delegate.readObject(reader, context);
        AbstractMessage msg;
        if (AbstractBinding.isClientModeOn(context))
            msg = context.getOutMessage();
        else
            msg = context.getInMessage();
        
        Object[] params = (Object[]) msg.getBody();
        MessagePartInfo part = (MessagePartInfo) 
            context.getProperty(AegisBindingProvider.CURRENT_MESSAGE_PART);

        setValue(params[part.getIndex()], o);
        
        return o;
    }

    protected void setValue(Object hObj, Object value)
    {
        Holder holder = (Holder) hObj;
        holder.setValue(value);
    }

    public void writeObject(Object object, MessageWriter writer, MessageContext context)
        throws XFireFault
    {
        Holder holder = (Holder) object;
        delegate.writeObject(holder.getValue(), writer, context);
    }

    public QName getSchemaType()
    {
        return delegate.getSchemaType();
    }

    public boolean isAbstract()
    {
        return delegate.isAbstract();
    }

    public boolean isComplex()
    {
        return delegate.isComplex();
    }

    public boolean isNillable()
    {
        return delegate.isNillable();
    }

    public boolean isWriteOuter()
    {
        return delegate.isWriteOuter();
    }

    public void setAbstract(boolean abstrct)
    {
        delegate.setAbstract(abstrct);
    }

    public void setNillable(boolean nillable)
    {
        delegate.setNillable(nillable);
    }

    public void setSchemaType(QName name)
    {
        delegate.setSchemaType(name);
    }

    public void setTypeMapping(TypeMapping typeMapping)
    {
        super.setTypeMapping(typeMapping);
        delegate.setTypeMapping(typeMapping);
    }

    public void setWriteOuter(boolean writeOuter)
    {
        delegate.setWriteOuter(writeOuter);
    }

    public void writeSchema(Element root)
    {
        delegate.writeSchema(root);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy