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());
}
}
}