import java.io.File;
import java.net.URL;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory;
import org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory;
import org.w3c.dom.Element;

public class TestSOAP
{

	public static void main(String[] args)
	{

		try
		{
			File someFile = new File("c:/temp/sometextfile.txt");
			Service service = new Service();
			Call call = (Call)service.createCall();
			call.setTargetEndpointAddress(new URL("http://localhost:9009/"));
			call.setReturnType( new javax.xml.namespace.QName("http://www.domain.com/SOAP/", "Response"), Object.class);

			call.setUseSOAPAction(true);
			call.setSOAPActionURI("http://www.domain.com/SOAP");
			call.setEncodingStyle(null);

			call.setOperationName(new javax.xml.namespace.QName("http://www.domain.com/SOAP/", "Request"));

			DataHandler dhSource = new DataHandler(new FileDataSource(someFile));

			QName email = new QName(null, "email");
			QName attachment = new QName(null, "attachment");

			call.addParameter(
				email,
				new QName("http://www.w3.org/2001/XMLSchema", "string"),
				String.class,
				ParameterMode.IN);


			call.addParameter(
				attachment,
				new QName("http://www.w3.org/2001/XMLSchema", "string"),
				String.class,
				ParameterMode.IN);

			call.registerTypeMapping(
				dhSource.getClass(),
				attachment,
				JAFDataHandlerSerializerFactory.class,
				JAFDataHandlerDeserializerFactory.class);

		  	call.setProperty(Call.ATTACHMENT_ENCAPSULATION_FORMAT, Call.ATTACHMENT_ENCAPSULATION_FORMAT_DIME);

			Object ret = call.invoke(new Object[] {"my@email.com", dhSource} );

			if (ret instanceof Element)
			{
				Element elem = (Element)ret;
				System.out.println("Return result XML element is: " + elem.getNodeName());
			}
			else
			{
				System.out.println("Return result is not DOM Element!");
			}

		}
		catch (Exception e)
		{
			e.printStackTrace(System.err);
		}
	}



}
