项目背景
接到的任务是通过调用其他平台厂商提供的webservice接口来获取他们的图片数据把图片下载下来录入我司平台。之前没有接触过webservice,所以开始了这次webservice的菜鸟之旅。
一.首先去百度查了查简单搭建了一个webservice的服务端和客户端的小demo,用来了解它的工作流程
服务端搭建
1.新建一个java项目,目录如下
2.新建个类,加注解@WebService,主要内容如下
package webservice_serverDemo; import javax.jws.WebMethod; import javax.jws.WebService; import javax.xml.ws.Endpoint; @WebService public class Test { /** 供客户端调用方法 该方法是非静态的,会被发布 * @param name 传入参数 * @return String 返回结果 * */ public String getValue(String name){ return "欢迎你! "+name; } /** * 方法上加@WebMentod(exclude=true)后,此方法不被发布; * @param name * @return */ @WebMethod(exclude=true) public String getHello(String name){ return "你好! "+name; } /** 静态方法不会被发布 * @param name * @return */ public static String getString(String name){ return "再见!"+name; } //通过EndPoint(端点服务)发布一个WebService public static void main(String[] args) { /*参数:1,本地的服务地址; 2,提供服务的类; */ Endpoint.publish("http://127.0.0.1:8080/Test", new Test()); System.out.println("发布成功!"); //发布成功后 在浏览器输入 http://localhost:8080/Test?wsdl } }
3.运行主方法,控制台显示发布成功
4.浏览器输入 http://localhost:8080/Test?wsdl 可以看到生成的wsdl文件,服务端搭建完毕
客户端搭建
1.新建一个java工程
2.点击工程右键>New>Other>Web service client>填写wsdl地址如下图(确保服务端不要关闭,浏览器访问地址能看到xml)也可以填写的是一个wsdl文件的路径
finish之后就会发现在src下生成了客户端的文件夹和java类,这时候就可以在客户端调用接口了
调用一下试试
package webservice_serverDemo; import java.rmi.RemoteException; import java.util.Iterator; import javax.xml.rpc.ServiceException; public class Hello { public static void main(String []args) throws RemoteException, ServiceException{ TestServiceLocator test = new TestServiceLocator(); Test ports = test.getTestPort(); System.out.println(ports.getValue("小娜")); } }
控制台输出,可以看到有一个警告是因为缺少mail.jar和activation.jar,可以自己下载,不加也没有特别大的影响
回归到项目
通过上面的小demo可以看出,eclipse能根据wsdl自动生成客户端来调用,非常简单。but,通过平台厂商反馈的wsdl文件发现,由于他们系统十分老旧,生成的wsdl无法用这种方法生成客户端,于是换了一种方法,使用axis1.4生成客户端
1.下载axis-bin-1_4.zip jar包,解压
2.进入lib目录下打开cmd 运行
D:softaxis-1_4lib>java -Djava.ext.dirs=D:softaxis-1_4lib org.apache.axis.wsdl.WSDL2Java -o D:zhuhai -p com.ws D:softaxis-1_4RequestService.wsdl
//java -Djava.ext.dirs=${lib的目录} org.apache.axis.wsdl.WSDL2Java -o${代码输出路径} -p${package名} ${wsdl的路径(可以是绝对路径或者url)}
会报一个这个警告,没有关系,上面提过
- Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachment support is disabled.
3.去${代码输出路径}里可以找到生成的客户端