package dt.soap.EchoService;

import java.io.*;
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 java.net.URL;
import dt.soap.EchoService.*;

public class MyClassSerializer implements Serializer
{

  public void marshall(String inScopeEncStyle, Class javaType, Object src,
                       Object context, Writer sink, NSStack nsStack,
                       XMLJavaMappingRegistry xjmr, SOAPContext ctx)
                        throws IllegalArgumentException, IOException
  {
      if (!javaType.equals(MyClass.class))
      {
	  throw new IllegalArgumentException("Can only serialize MyClass instances");
      }

      MyClass myClass = (MyClass)src;

      nsStack.pushScope();

      if (src != null)
      {
	  SoapEncUtils.generateStructureHeader(inScopeEncStyle, javaType, context,
					  sink, nsStack, xjmr);

	  sink.write(StringUtils.lineSeparator);

	  xjmr.marshall(inScopeEncStyle, String.class, myClass.getName(), "name", sink, nsStack, ctx);
	  sink.write(StringUtils.lineSeparator);

	  xjmr.marshall(inScopeEncStyle, URL.class, myClass.getLocation(), "location", sink, nsStack, ctx);
	  sink.write(StringUtils.lineSeparator);

	  sink.write("</" + context + ">");
      }
      else
      {
	  SoapEncUtils.generateNullStructure(inScopeEncStyle, javaType, context,
					  sink, nsStack, xjmr);	  
      }

      nsStack.popScope();
  }

}
