Axisが実現したSOAP添付ファイルの転送


主に添付ファイルをリクエストヘッダにカプセル化し,クライアントはリクエストヘッダからダウンロードすればよい.
package com.test.soap.hello;

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

import javax.activation.DataHandler;
import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.encoding.XMLType;

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;

public class AxisFileTest {

	public static void main(String[] args) throws Exception {

		Service service = new Service();
		Call call = (Call) service.createCall();

		URL myUrl = new URL("http://192.168.1.164:1938");

		call.setTargetEndpointAddress(myUrl);
		call.setOperationName(new QName("urn:MyAttachServer", "echoDir"));

		QName qnameAttachment = new QName("urn:MyAttachServer", "DataHandler");

		call.registerTypeMapping(DataHandler.class, qnameAttachment,
				JAFDataHandlerSerializerFactory.class,
				JAFDataHandlerDeserializerFactory.class);
		
		call.addParameter("source", XMLType.XSD_STRING, ParameterMode.IN);
		call.setReturnType(XMLType.SOAP_ARRAY);
		
		DataHandler[] ret = (DataHandler[]) call.invoke(new Object[]{null});
		
		for(int i = 0; i < ret.length; ++i){
			
			DataHandler recDH = ret[i];
			File receivedFile = new File(recDH.getName());
			System.out.println( i + ": " + receivedFile.getName() + "|length: " + receivedFile.length());
		}
		
		
		
		

	}
}