版本:apache-cxf-2.2.12.zip 加入lib下面的*.jar
其中lib/WHICH_JARS的这个文本文档是介绍各个jar的功能的
首先开发服务端:
package upload; import javax.activation.DataHandler; /** *上传文件的POJO */ public class Resume { private String candidateName; // 文件名 private String resumeFileType; // 文件类型 private DataHandler file; // 文件 public String getCandidateName() { return candidateName; } public void setCandidateName(String candidateName) { this.candidateName = candidateName; } public String getResumeFileType() { return resumeFileType; } public void setResumeFileType(String resumeFileType) { this.resumeFileType = resumeFileType; } public DataHandler getFile() { return file; } public void setFile(DataHandler file) { this.file = file; } }
package upload; import javax.jws.WebParam; import javax.jws.WebService; /** *接口 */ @WebService public interface ResumeUploadService { public void uploadResume(@WebParam(name = "resume") Resume resume); }
package upload; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import javax.activation.DataHandler; /** *实现 */ public class ResumeUploadServiceImpl implements ResumeUploadService { public void uploadResume(Resume resume) { DataHandler handler = resume.getFile(); try { InputStream is = handler.getInputStream(); OutputStream os = new FileOutputStream(new File("E://" + resume.getCandidateName() + "." + resume.getResumeFileType())); byte[] b = new byte[100000]; int bytesRead = 0; while ((bytesRead = is.read(b)) != -1) { os.write(b, 0, bytesRead); } os.flush(); os.close(); is.close(); } catch (IOException e) { e.printStackTrace(); } } }
bean.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:jaxrs="http://cxf.apache.org/jaxrs" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd"> <import resource="classpath:META-INF/cxf/cxf.xml" /> <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/> <import resource="classpath:META-INF/cxf/cxf-extension-jaxrs-binding.xml" /> <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> <jaxws:endpoint id="uploadresume" implementor="upload.ResumeUploadServiceImpl" address="/UploadResumeWS"> <jaxws:properties> <entry key="mtom-enabled" value="true"/> </jaxws:properties> </jaxws:endpoint> </beans>
把下面这段代码放到web.xml里面
<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/beans.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>CXFServlet</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>CXFServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping>
启动tomcat就发布了,访问http://127.0.0.1/server/services/UploadResumeWS?wsdl可以看见xml
然后开发客户端:客户端采用bin/wsdl2java.bat自动生成
cd %cxf_home%/bin
wsdl2java –d src –cliient http://127.0.0.1/server/services/UploadResumeWS?wsdl
调用代码:
package upload; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; /** *客户端 */ public class Client { public static void main(String args[]) throws Exception { ResumeUploadService client = new ResumeUploadServiceImplService() .getResumeUploadServiceImplPort(); Resume resume = new Resume(); resume.setCandidateName("test"); resume.setResumeFileType("txt"); InputStream input = new FileInputStream(new File("D://t.java")); byte b[] = new byte[input.available()]; input.read(b); resume.setFile(b); client.uploadResume(resume); input.close(); } }