最近在写项目时,用到了webservice,顺便学了一下,略有感想,在此分享。
webservice 是可以跨平台的,跨语言的,用http和xml规范的对不同系统进行协调,合作的通讯技术。
比如,幼儿园的管理系统是.net编写的,但是我们现在要在加一个财务管理系统,由于我是java开发的,因此产生跨语言,跨平台的问题。
而webservice正是应用于此,webservice是用http协议,用soap(Simple Object Access Protocol)的简单对象访问协议进行方法调用。
写个例子demo
首先定义一个接口MyService
@WebService
public interface MyService {
public Integer add(Integer a,Integer b);
UserPojo get(String name,String password);
}
//pojo实体
public class UserPojo {
private String name;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
定义接口的实现类
@WebService(endpointInterface = "com.peng.test.MyService")
public class MyServiceImpl implements MyService {
@Override
public Integer add(Integer a, Integer b) {
return a+b;
}
@Override
public UserPojo get(String name, String password) {
UserPojo userPojo=new UserPojo();
userPojo.setName(name);
userPojo.setPassword(password);
return userPojo;
}
}
编写服务端
public class WebTest {
public static void main(String args[]){
String address="http://localhost:8990/test";
Endpoint.publish(address,new MyServiceImpl());
}
}
运行main方法,访问http://localhost:8990/test?wsdl
效果如图
如上图,
portTypes表示服务的接口,通过input 和output分别表示参数和返回值
types是定义的类型,访问一下http://localhost:8990/test?xsd=1,如图
描述了add和get方法的参数和返回值,及类型。
这是让大家了解一下wsdl
下面写一下方法调用的test
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import java.net.MalformedURLException;
import java.net.URL;
public class WebClient {
public static void main(String args[]) {
try {
URL url = new URL("http://localhost:8990/test?wsdl");
QName qName = new QName("http://test.peng.com/", "MyServiceImplService");
Service service=Service.create(url,qName);
MyService myService=service.getPort(MyService.class);
System.out.println("加法:"+myService.add(4,3));
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
}
输出为:加法7,上面列子可以发现我们只要知道服务的地址和接口就可以调用其他系统提供的接口,地址很容易知道,但是接口不行,不一样的语言的描述不一样,同时也不可能给我代码,这时我们发现wsdl就是用xml描述的对象,我们得到xml可不可以转化为对象,待续 ,太困了,睡觉了!