由于开发需要使用webservice,第一个接触的工具叫axis2。项目开发相关jar。
service端:
启动类:
import java.net.InetAddress;import javax.xml.ws.Endpoint;public class StartService { public static void main(String[] args) { try { //获取当前IP String ip = InetAddress.getLocalHost().getHostAddress(); //将服务发布到指定路径 System.out.println("IP:" + ip); String relativelyPath=System.getProperty("user.dir"); System.out.println(relativelyPath); Endpoint.publish("http://"+ip+":9527/webservice/CBRC", new WebServiceImp()); System.out.println("webservice 发布成功!"); } catch (Exception e) { System.out.println("webservice 发布失败!"); ; } }}
实现类:
import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import javax.jws.WebService;import sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder;//import Decoder.BASE64Decoder;//import Decoder.BASE64Encoder;@WebServicepublic class WebServiceImp { public String sendFile(String name,String file) throws Exception { //上传文件 String preference_path = "/webserviceupload"; String relativelyPath=System.getProperty("user.dir"); //存储路径 String fileupload = relativelyPath + preference_path; File filepath = new File(fileupload); if (!filepath.exists()) { filepath.mkdirs(); } /** *生成上传文件 */ FileOutputStream fos = null; try { fos = new FileOutputStream(fileupload + File.separator + name); byte[] filebs = new BASE64Decoder().decodeBuffer(file); fos.write(filebs); } catch (Exception e) { e.printStackTrace(); } finally { fos.close(); } System.out.println("----------------------------------------------------------------------------------------"); System.out.println("----------------------------------------------------------------------------------------"); System.out.println("the file "+name+" was gotten !!"); System.out.println("----------------------------------------------------------------------------------------"); System.out.println("----------------------------------------------------------------------------------------"); int splitIndex = name.lastIndexOf("."); String newName = name.substring(0,splitIndex) + ".pdf"; TransferToPDFUtil.PdfManager(fileupload +File.separator+ name, fileupload +File.separator+ newName); System.out.println("----------------------------------------------------------------------------------------"); System.out.println("finish file transfer"); System.out.println("----------------------------------------------------------------------------------------"); /** * 上传文件到客户端 */ File loc_file = new File(fileupload +File.separator+ newName); FileInputStream fis = null; String out = null; try { fis = new FileInputStream(loc_file); byte[] bs = new byte[(int)loc_file.length()]; fis.read(bs); out = new BASE64Encoder().encode(bs); fis.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } System.out.println("----------------------------------------------------------------------------------------"); System.out.println("----------------------------------------------------------------------------------------"); System.out.println("return CBRC"); System.out.println("----------------------------------------------------------------------------------------"); System.out.println("----------------------------------------------------------------------------------------"); return out; } }
client端:
import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import javax.xml.namespace.QName;import org.apache.axis2.addressing.EndpointReference;import org.apache.axis2.client.Options;import org.apache.axis2.rpc.client.RPCServiceClient;import sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder;public class CBRC { public static void main(String[] args) throws Exception { // 使用RPC方式调用WebService RPCServiceClient serviceClient = new RPCServiceClient(); Options options = serviceClient.getOptions(); EndpointReference targetEPR = new EndpointReference( "http://10.74.3.191:9527/webservice/CBRC?wsdl");// 指定调用WebService的URL options.setTo(targetEPR); // RPCServiceClient类的invokeBlocking方法调用了WebService中的方法。invokeBlocking方法有三个参数,其中第一个参数的类型是QName对象,表示要调用的方法名;第二个参数表示要调用的WebService方法的参数值,参数类型为Object[];第三个参数表示WebService方法的返回值类型的Class对象,参数类型为Class[]。当方法没有参数时,invokeBlocking方法的第二个参数值不能是null,而要使用new Object[]{}。 /*String endpoint = "http://10.74.3.191:9527/webservice/CBRC?wsdl"; //此处为wsdl地址 Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress(new URL(endpoint)); //setOperationName 方法 Qname 前一个参数为设置namespace,后一个参数为设置想要访问的方法 call.setOperationName(new QName("http://wtp/","sendFile")); //addParameter 方法即为添加元素的方法 call.addParameter("arg0",org.apache.axis.encoding.XMLType.XSD_DATE,javax.xml.rpc.ParameterMode.IN); call.addParameter("arg1",org.apache.axis.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN); //设置返回值类型 call.setReturnType(XMLType.XSD_STRING); */ /** * 上传文件 */ File xml1 = new File("C:\\Users\\lenovo\\Desktop\\1.doc"); FileInputStream fis1 = new FileInputStream(xml1); byte[] bytes1 = new byte[(int)xml1.length()]; fis1.read(bytes1); //将byte数组转换为base64字符串 String base64file = new BASE64Encoder().encode(bytes1); fis1.close(); //访问目标方法// String result = (String) call.invoke(new Object[]{"1.doc",base64file}); //指定方法返回值的数据类型的Class对象 Class[] classes = new Class[] { String.class };// 指定getGreeting方法返回值的数据类型的Class对象 QName opAddEntry = new QName("http://wtp/","sendFile");// 指定要调用的getGreeting方法及WSDL文件的命名空间 Object[] opAddEntryArgs = new Object[]{"1.doc",base64file};// 指定getGreeting方法的参数值 String result = serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs, classes)[0].toString(); /** * 下载文件 */ FileOutputStream fos = new FileOutputStream("C:\\Users\\lenovo\\Desktop\\1.pdf"); fos.write(new BASE64Decoder().decodeBuffer(result)); fos.close(); System.out.println("end"); } }
原文引用:
其他参考: