Web Service描述语言WSDL(WebService Definition Language)就是用机器能阅读的方式提供的一个正式描述文档而基于XML的语言,用于描述Web Service及其函数、参数和返回值。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的。
1) 通过wsdl说明书,就可以描述webservice服务端对外发布的服务;
2) wsdl说明书是一个基于xml文件,通过xml语言描述整个服务;
3) 在wsdl说明中,描述了:
对外发布的服务名称(类)
接口方法名称(方法)
接口参数(方法参数)
服务返回的数据类型(方法返回值)
详细介绍:wsdl文件详解
UDDI的话,是一个跨产业,跨平台的开放性架构,可以帮助Web 服务提供商在互联网上发布 Web 服务的信息。
UDDI 是一种目录服务,企业可以通过 UDDI 来注册和搜索 Web 服务。
由于soap是基于xml传输,本身使用xml传输会传输一些无关内容从而影响效率,随着soap协议的完善,soap协议增加了许多内容,这样就导致了使用soap去完成简单的数据传输而携带的信息更多效率再受影响;
Web Service作为web跨平台访问的标准技术,很多公司都限定要求使用Web Service,但如果是简单的接口可以直接使用http传输自定义数据格式,开发更快捷。
SOA(Service-OrientedArchitecture)面向服务架构是一种思想,它将应用程序的不同功能单元通过中立的契约(独立于硬件平台、操作系统和编程语言)联系起来,使得各种形式的功能单元更好的集成。
通常采用SOA 的系统叫做服务总线(BUS),结构如下图所示:
需要的依赖
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.2.5</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>3.2.5</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http-jetty</artifactId>
<version>3.2.5</version>
</dependency>
服务端入口接口UserService
@WebService
public interface IUserService {
String sayHi(String name);
}
接口的实现类UserServiceImpl
public class UserServiceImpl implements IUserService {
@Override
public String sayHi(String name) {
return "hello" + name;
}
}
启动类
public static void main( String[] args )
{
// 服务工厂
JaxWsServerFactoryBean jaxWsServerFactoryBean = new JaxWsServerFactoryBean();
// 设置服务地址
jaxWsServerFactoryBean.setAddress("http://localhost:8000/user");
// 设置服务类
jaxWsServerFactoryBean.setServiceBean(new UserServiceImpl());
// 发布服务
jaxWsServerFactoryBean.create();
// 提示
System.out.println("服务端启动");
}
需要的依赖和服务端的一样
访问接口UserService
@WebService(targetNamespace = "http://webservice.com/")
//@WebService //如果包路径和服务端的包路径一只就可以直接用此注解,如果不一致就需要用上面的注解,上面的注解http后面的是服务端的包路径的倒置
public interface UserService {
String sayHi(String name);
}
访问类
JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean();
jaxWsProxyFactoryBean.setAddress("http://localhost:8000/user");
jaxWsProxyFactoryBean.setServiceClass(UserService.class);
UserService userService = jaxWsProxyFactoryBean.create(UserService.class);
String result = userService.sayHi("布鲁斯李");
System.out.println(result);
1、客户端的访问接口的包路径要和服务端的访问接口的路径一致,否则会报错Unexpected wrapper element {http://client.webservice.com/}sayHi found. Expected {http://webservice.com/}sayHi.
,意思是期望地址是http://webservice.com/
,但是意外出现了http://client.webservice.com/
这个地址,也可以通过加上面代码中的注解属性也可以
2、客户端的访问接口中的方法名称要和服务端的一致,否则会报 Message part {http://webservice.com/}print was not recognized. (Does it exist in service WSDL?)
,原因是webservice 服务不存在或者方法名不对 ,
3、方法返回值类型要一致,
4、访问接口名和服务端的接口名可以不一致