一、前言
第四课和第五课了解了从服务器端下载二进制文件,但是没有涉及如何利用webservice进行文件的上传,第六课主要解决这个问题。
二、目标
了解利用jaxws进行文件的上传。
三、编写Server端
1、制作Service端接口
package com.guole.webservice.ws;import javax.activation.DataHandler;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.xml.ws.soap.MTOM;
@WebService
@SOAPBinding(style = SOAPBinding.Style.RPC)
@MTOM
public interface FileService {
@WebMethod
public DataHandler downloadFile(String fileName);
}
2、实现Service的接口
package com.guole.webservice.ws;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.jws.WebService;
@WebService(serviceName = "FileServiceImpl", portName = "FileServiceImplPort", targetNamespace = "http://ws.webservice.guole.com/", endpointInterface = "com.guole.webservice.ws.FileService")
public class FileServiceImpl implements FileService {
public DataHandler downloadFile(String fileName) {
// TODO Auto-generated method stub
FileDataSource dataSource = new FileDataSource("d:/" + fileName);
DataHandler fileDataHandler = new DataHandler(dataSource);
return fileDataHandler;
}
}
3、web.xml
<servlet>
<servlet-name>FileService</servlet-name>
<servlet-class>
com.sun.xml.ws.transport.http.servlet.WSServlet
</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>FileService</servlet-name>
<url-pattern>/FileService</url-pattern>
</servlet-mapping>
4、sun-jaxws.xml
<endpoint name='FileService'
implementation='com.guole.webservice.ws.FileServiceImpl'
url-pattern='/FileService' />
5、发布程序就可以
四、编写客户端
1、使用wsiport -keep http://127.0.0.1:8282/jws/FileService?wsdl 生成源码,放入src目录中
2、写测试类
public class TestCase {
public static void main(String[] param) {
// http://127.0.0.1:8282/jws/FileService?wsdl
FileServiceImpl service = new FileServiceImpl();
FileService port = service.getFileServiceImplPort();
byte[] dh = port.downloadFile("carrier.jpg");
/*Location for downloading and storing in client’s machine*/
try {
FileOutputStream outputStream = new FileOutputStream("d:/1.jpg");
outputStream.write(dh);
outputStream.flush();
System.out.println(" Download Successful!");
} catch (Exception e) {
// TODO: handle exception
}
}
}