package sample;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import org.apache.axiom.attachments.utils.IOUtils;
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axiom.om.OMText;
import org.apache.axiom.soap.SOAP11Constants;
import org.apache.axis2.AxisFault;
import org.apache.axis2.Constants;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
public class FileTransferClient {
?? private static EndpointReference targetEPR =
?new EndpointReference("http://127.0.0.1:8080/axis2/services/FileOperation");
??
?? public static boolean upload(String fileName,File file,String fileType) {
???? try {
????? OMElement data = buildUploadEnvelope(fileName,file,fileType);
????? Options options = buildOptions();
????? ServiceClient sender = new ServiceClient();
????? sender.setOptions(options);
????? System.out.println("The data in method upload: "+data);
????? OMElement ome = sender.sendReceive(data);
????? System.out.println("Convert the data to element in method upload: "+ome);
????? String b = ome.getText();
????? return Boolean.parseBoolean(b);
???? }
???? catch(Exception e) {
?????? e.printStackTrace();
???? }
???? return false;
?? }
??
?? public static boolean download(String userName,String fileName,String fileType) {
???? try {
?????? OMElement data = buildDownloadEnvelope(userName,fileName,fileType);
?????? Options options = buildOptions();
?????? ServiceClient sender = new ServiceClient();
?????? sender.setOptions(options);
?????? System.out.println("The data in method download: "+data);
?????? OMElement ome = sender.sendReceive(data);
?????? System.out.println("Convert the data to element in method download: "+ome);
?????? OMText binaryNode = (OMText) ome.getFirstOMChild();
?????? binaryNode.setOptimize(true); //必须加此句,否则会出现ContentID is null的异常!
?????? DataHandler actualDH = (DataHandler) binaryNode.getDataHandler();
?????? FileOutputStream imageOutStream = new FileOutputStream("D:/userTemp/xx.gif");
?????? InputStream is = actualDH.getInputStream();
?????? imageOutStream.write(IOUtils.getStreamAsByteArray(is));
?????? return true;
????? }
????? catch(Exception e) {
??????? e.printStackTrace();
????? }
???? return false;
?? }
??
?? private static OMElement buildUploadEnvelope(String fileName,String fileType) {
???? DataHandler expectedDH;
???? OMFactory fac = OMAbstractFactory.getOMFactory();
???? OMNamespace omNs = fac.createOMNamespace("http://example.org/filedata","fd");
???? OMElement data = fac.createOMElement("upload",omNs);
???? OMElement fileContent = fac.createOMElement("fileContent",omNs);
???? FileDataSource dataSource = new FileDataSource(file);
???? expectedDH = new DataHandler(dataSource);
???? OMText textData = fac.createOMText(expectedDH,true);
???? fileContent.addChild(textData);
??? ?OMElement _fileName = fac.createOMElement("fileName",omNs);
???? _fileName.setText(fileName);
???? OMElement _fileType = fac.createOMElement("fileType",omNs);
???? _fileType.setText(fileType);
???? data.addChild(_fileName);
???? data.addChild(_fileType);
???? data.addChild(fileContent);
???? return data;
?? }
??
?? private static OMElement buildDownloadEnvelope(String userName,String fileType) {
???? OMFactory fac = OMAbstractFactory.getOMFactory();
???? OMNamespace omNs = fac.createOMNamespace("http://example.org/filedata","fd");
???? OMElement data = fac.createOMElement("download",omNs);
???? OMElement _userName = fac.createOMElement("userName",omNs);
???? _userName.setText(userName);
???? OMElement _fileName = fac.createOMElement("fileName",omNs);
???? _fileName.setText(fileName);
???? OMElement _fileType=fac.createOMElement("fileType",omNs);
???? _fileType.setText(fileType);
???? data.addChild(_userName);
???? data.addChild(_fileName);
???? data.addChild(_fileType);
???? return data;
?? }
?? private static Options buildOptions() throws AxisFault {
???? Options options = new Options();
???? options.setSoapVersionURI(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
???? options.setTo(targetEPR);
???? // enabling MTOM in the client side
???? options.setProperty(Constants.Configuration.ENABLE_MTOM,Constants.VALUE_TRUE);
???? options.setTransportInProtocol(Constants.TRANSPORT_HTTP);
???? return options;
?? }
?? public static void main(String agrs[]) {
???? String file = "D:/userTemp/ya.gif";
???? String fn = "testUser";
???? String ft="gif";
???? boolean rtv = upload(fn,new File(file),ft);
???? System.out.println("is upload success: "+rtv);
???? String un="zj";
???? String downfn="1";
???? if(download(un,downfn,ft)){
??? ?????? ?System.out.println("download success.");
???? }
???? else System.out.println("download fail.");
???? System.out.println("Client main end.");
?? }
}
|