一、需求
- 1. 客戶端從服務端下載附件
- 2. 客戶端上傳附件到服務端
二、案例
- 本章通過DataHander的方式來進行傳遞。
注意: 1:接口中要定義@MTOM
2:方法中要使用@XmlMimeType(value = "application/octet-stream") -
服務端
2.1 編寫服務接口
package com.webservice; import javax.activation.DataHandler; import javax.jws.WebParam; import javax.jws.WebResult; import javax.jws.WebService; import javax.xml.bind.annotation.XmlMimeType; import javax.xml.ws.soap.MTOM; /** * 設置AttachementPart中MIME的功能 * * * 1:在接口中開啟@MTOM注解。 * * 2:在方法中加上@XmlMimeType(value = "application/octet-stream") * */ @WebService @MTOM public interface IFileDataHandler { @WebResult(name = "sendServerImageResult") @XmlMimeType(value = "application/octet-stream") public DataHandler sendServerImage(); public void receiveClientImage(@WebParam(name = "dataHandler") @XmlMimeType(value = "application/octet-stream") DataHandler dataHandler, @WebParam(name = "filename") String filename); }
2.2 實現服務接口
package com.webservice; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.activation.FileDataSource; import javax.jws.WebService; import org.apache.commons.io.IOUtils; @WebService(endpointInterface = "com.webservice.IFileDataHandler") public class SendFileDataHandler implements IFileDataHandler { public DataHandler sendServerImage() { File file = new File("E:\\server\\jQuery1.4 API-20100204.chm"); DataSource dataSource = new FileDataSource(file); DataHandler dataHandler = new DataHandler(dataSource); return dataHandler; } public void receiveClientImage(DataHandler dataHandler, String filename) { OutputStream outputStream = null; try { outputStream = new FileOutputStream("E:\\server\\" + filename + ""); dataHandler.writeTo(outputStream); } catch (IOException e) { e.printStackTrace(); } finally { IOUtils.closeQuietly(outputStream); } } }
2.3 發布服務
package com.webservice; import javax.xml.ws.Endpoint; public class TestPublish { public static void main(String[] args) { Endpoint.publish("http://localhost:5050/sendDataHandler", new SendFileDataHandler()); System.out.println("服務發布成功..."); } }
-
客戶端
2.4 測試
package com.file_handler; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.activation.FileDataSource; public class TestMain { public static void main(String[] args) { //TestMain.getServerFile(); TestMain.sendClientFile(); } /** * 接收服務端發送的文件 */ private static void getServerFile() { IFileDataHandler dataService = new SendFileDataHandlerService() .getSendFileDataHandlerPort(); DataHandler dataHandler = dataService.sendServerImage(); try { dataHandler.writeTo(new FileOutputStream("E:\\client\\test.chm")); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } private static void sendClientFile() { IFileDataHandler dataService = new SendFileDataHandlerService() .getSendFileDataHandlerPort(); String filename = "Storm.zip"; DataSource dataSource = new FileDataSource(new File("E:\\client\\" + filename + "")); DataHandler dataHandler = new DataHandler(dataSource); dataService.receiveClientImage(dataHandler, filename); } }