webservice是什么?
为什么要用webservice
什么时候用webservice
webservice的几个重要的术语
对应一种类型的文件.wsdl
定义了webservice的服务器端与客户端应用交互传递请求和响应数据的格式和方式
一个webservice对应一个唯一的wsdl文档
一种简单的、基于http和xml的协议,用于在web上交换结构化的数据
soap消息:请求消息和响应消息
http+xml片段
webservice服务器端用来处理请求的接口
一个apache的用于开发webservice服务器端和客户端的框架
用jdk开发webservice
webservice编码:@WebService(SEI的实现类);@WebMethod(SEI中的所有方法)
发布webservice
Endpoint(终端发布webservice)
示例代码
**
* SEI接口
*/
@WebService
public interface WebSEI {
@WebMethod
public String sayHello(String name);
}
/**
* SEI的实现类
*/
@WebService
public class WebSEIImpl implements WebSEI {
@Override
public String sayHello(String name) {
System.out.println("server say hello " + name);
return "Hello " + name;
}
}
/**
* 发布webservice
*/
public class WebEndpoint {
public static void main(String[] args) {
/**
* 参数说明:1.发布地址,2.接口实例
* 发布地址中IP是主机地址,其余可以自定义
*/
Endpoint.publish("http://192.168.0.103:8087/myservie/hello", new WebSEIImpl());
System.out.println("发布成功!");
}
}
上面的main方法启动之后,可以在浏览器输入http://192.168.0.103:8087/myservie/hello?wsdl进行访问和查看wsdl文档。
文件格式大概如下:
上面这段是定义webservice的wsdl文档中引入的约束,其中schemaLocation="http://192.168.0.103:8087/myservie/hello?xsd=1"/>是约束内容的地址,可以用浏览器进行访问查看,当然这需要一定schema约束相关的知识,可以事先了解下。
上面的是定义webservice所有的消息结构;
上面的
指定客户端应用传过来的数据,会引用上面定义的;
代表当前webservice的请求地址
查看对应的wsdl文档(一般浏览器 ....?wsdl)
请求webservice并查看请求和响应消息(一般浏览器)
创建客户端应用编码方式访问
借助jdk的wsimort.exe工具生成客户端代码:进入项目src目录下,打开cmd窗口,输入wsimport -keep url(url是wsdl文件的路径或者是wsdl文档)
生成的代码类如下:
借助生成的代码编写请求代码
public class ClientTest {
public static void main(String[] args) {
WebSEIImplService factory = new WebSEIImplService();
WebSEIImpl webSEI = factory.getWebSEIImplPort();
System.out.println(webSEI.sayHello("jack"));
}
}
用cxf开发webservice
jdk不支持map与复杂的object类型,cxf支持所有类型
cxf提供很多拦截器,后期业务拓展性高
org.apache.cxf
cxf-core
3.4.4
org.apache.cxf
cxf-rt-frontend-jaxws
3.4.4
org.apache.cxf
cxf-rt-transports-http-jetty
3.4.4
JaxWsServerFactoryBean factoryBean = new JaxWsServerFactoryBean();
//暴露地址
factoryBean.setAddress("http://192.168.0.103:8087/myservie/hello");
//SEI接口
factoryBean.setServiceClass(WebSEI2.class);
//SEI实现类
factoryBean.setServiceBean(new WebSEI2Impl());
factoryBean.create();
System.out.println("发布成功!");
首先可以在https://cxf.apache.org/download.html下载cxf压缩包,并且配置环境变量;
然后进入项目src目录下,打开cmd窗口,输入wsdl2java url(url是wsdl文件的路径或者是wsdl文档)生成客户端所需要的代码
或者maven的pom文件添加
org.apache.cxf
cxf-codegen-plugin
3.5.0
generate-sources
generate-sources
generated/cxf
http://192.168.0.103:8087/myservie/hello?wsdl
wsdl2java
然后运行
mvn clean generate-sources
这将生成 wsdl 对应的客户端代码,代码会存放于 /generated/cxf 目录.
又或者直接写客户端代码:
{
JaxWsDynamicClientFactory clientFactory = JaxWsDynamicClientFactory.newInstance();
Client client = clientFactory.createClient("http://192.168.0.103:8087/myservie/hello?wsdl");
Object[] result = client.invoke("sayHappy", "KEVIN");
System.out.println(result[0]);
}
所需依赖:
org.apache.cxf
cxf-core
3.4.4
org.apache.cxf
cxf-rt-frontend-jaxws
3.4.4
org.apache.cxf
cxf-rt-transports-http-jetty
3.4.4
页面更新:2024-03-14
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号