package com.sprokets.apps;

import java.io.*;
import java.util.*;
import org.w3c.dom.*;
import org.apache.soap.*;
import org.apache.soap.encoding.soapenc.*;
import org.apache.soap.rpc.*;
import org.apache.soap.util.*;
import org.apache.soap.util.xml.*;
import org.exolab.castor.xml.*;

public class CastorSerializer
	implements Serializer, Deserializer
{
	public void marshall(String inScopeEncStyle, 
						 Class javaType, 
						 Object src,
	                     Object context, 
						 Writer sink, 
						 NSStack nsStack,
	                     XMLJavaMappingRegistry xjmr, 
						 SOAPContext ctx)
		throws IllegalArgumentException, IOException
	{
		try
		{
			Marshaller marshaller = new Marshaller(sink);
			marshaller.setMarshalAsDocument(false);
			marshaller.marshal(src);
		}
		catch (MarshalException e)
		{
			throw new IllegalArgumentException(e.toString());
		}
		catch (ValidationException e)
		{
			e.printStackTrace(System.out);			
			throw new IllegalArgumentException(e.toString());
		}
	}	

	public Bean unmarshall(String inScopeEncStyle, 
						   QName elementType, 
						   Node src,
	                       XMLJavaMappingRegistry xjmr, 
						   SOAPContext ctx)
		throws IllegalArgumentException
	{
		try
		{
			Class javaType = xjmr.queryJavaType(elementType, inScopeEncStyle);
			return new Bean(javaType, Unmarshaller.unmarshal(javaType, src));
		}
		catch (MarshalException e)
		{
			e.printStackTrace(System.out);
			throw new IllegalArgumentException(e.toString());
		}
		catch (ValidationException e)
		{
			e.printStackTrace(System.out);
			throw new IllegalArgumentException(e.toString());
		}
	}	
}