泛泛而谈webservice
什么是webservice就不在多少了,百度很多解释,这里主要是告诉大家怎么使用webservice。
服务端:
第一步:创建SEI(Service Endpoint Interface)接口,本质上就是Java接口
第二步:创建SEI实现类,在实现类上加入@WebService
第三步:发布服务,Endpoint发布服务,publish方法,两个参数:1.服务地址;2.服务实现类
第四步:测试服务是否发布成功,通过阅读使用说明书,确定客户端调用的接口、方法、参数和返回值存在,证明服务发布成功。
WSDL地址:服务地址+”?wsdl”
WSDL阅读方式:从下往上
客户端 :
l 第一步:wsimport命令生成客户端代码
2 第二步:根据使用说明书,使用客户端代码调用服务端
2.1 第一步:创建服务视图,视图是从service标签的name属性获取
2.2 第二步:获取服务实现类,实现类从portType的name属性获取
2.3 第三步:获取查询方法,从portType的operation标签获取
WSDL:
WSDL及web服务描述语言,他是webservice服务端使用说明书,说明服务端接口、方法、参数和返回值,WSDL是随服务发布成功,自动生成,无需编写
l <service> 服务视图,webservice的服务结点,它包括了服务端点
<binding> 为每个服务端点定义消息格式和协议细节
<portType> 服务端点,描述 web service可被执行的操作方法,以及相关的消息,通过binding指向portType
<message> 定义一个操作(方法)的数据参数(可有多个参数)
<types> 定义 web service使用的全部数据类型
阅读方式:从下往上
* SOAP
l SOAP即简单对象访问协议,他是使用http发送的XML格式的数据,它可以跨平台,跨防火墙,SOAP不是webservice的专有协议。
2 SOAP=http+xml
DEMO:
公网服务地址:
http://www.webxml.com.cn/zh_cn/index.aspx
service编程调用方式:
public class ServiceClient {
public static void main(String[]args) throws IOException {
//创建WSDL的URL,注意不是服务地址
URL url = new URL("http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl");
//创建服务名称
//1.namespaceURI - 命名空间地址
//2.localPart - 服务视图名
QName qname = new QName("http://WebXml.com.cn/","MobileCodeWS");
//创建服务视图
//参数解释:
//1.wsdlDocumentLocation - wsdl地址
//2.serviceName - 服务名称
Service service = Service.create(url,qname);
//获取服务实现类
MobileCodeWSSoap mobileCodeWSSoap = service.getPort(MobileCodeWSSoap.class);
//调用查询方法
String result =mobileCodeWSSoap.getMobileCodeInfo("1866666666","");
System.out.println(result);
}
}
HttpURLConnection调用方式:
第一步:创建服务地址
第二步:打开一个通向服务地址的连接
第三步:设置参数
第四步:组织SOAP数据,发送请求
第五步:接收服务端响应,打印
public class HttpClient {
public static void main(String[]args) throws IOException {
//第一步:创建服务地址,不是WSDL地址
URL url = new URL("http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx");
//第二步:打开一个通向服务地址的连接
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
//第三步:设置参数
//3.1发送方式设置:POST必须大写
connection.setRequestMethod("POST");
//3.2设置数据格式:content-type
connection.setRequestProperty("content-type","text/xml;charset=utf-8");
//3.3设置输入输出,因为默认新创建的connection没有读写权限,
connection.setDoInput(true);
connection.setDoOutput(true);
//第四步:组织SOAP数据,发送请求
String soapXML = getXML("15226466316");
OutputStream os = connection.getOutputStream();
os.write(soapXML.getBytes());
//第五步:接收服务端响应,打印
int responseCode =connection.getResponseCode();
if(200 == responseCode){//表示服务端响应成功
InputStream is = connection.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
StringBuilder sb = new StringBuilder();
String temp = null;
while(null != (temp =br.readLine())){
sb.append(temp);
}
System.out.println(sb.toString());
is.close();
isr.close();
br.close();
}
os.close();
}
/**
* <?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<getMobileCodeInfo xmlns="http://WebXml.com.cn/">
<mobileCode>string</mobileCode>
<userID>string</userID>
</getMobileCodeInfo>
</soap:Body>
</soap:Envelope>
* @param phoneNum
* @return
*/
public static String getXML(StringphoneNum){
String soapXML = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+"<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"
+"<soap:Body>"
+"<getMobileCodeInfo xmlns=\"http://WebXml.com.cn/\">"
+"<mobileCode>"+phoneNum+"</mobileCode>"
+"<userID></userID>"
+"</getMobileCodeInfo>"
+"</soap:Body>"
+"</soap:Envelope>";
return soapXML;
}
}
*用注解修改WSDL内容
@WebService-定义服务,在public class上边
targetNamespace:指定命名空间
name:portType的名称
portName:port的名称
serviceName:服务名称
endpointInterface:SEI接口地址,如果一个服务类实现了多个接口,只需要发布一个接口的方法,可通过此注解指定要发布服务的接口。
@WebMethod-定义方法,在公开方法上边
operationName:方法名
exclude:设置为true表示此方法不是webservice方法,反之则表示webservice方法,默认是false
@WebResult-定义返回值,在方法返回值前边
name:返回结果值的名称
@WebParam-定义参数,在方法参数前边
name:指定参数的名称
作用:
通过注解,可以更加形像的描述Web服务。对自动生成的wsdl文档进行修改,为使用者提供一个更加清晰的wsdl文档。
当修改了WebService注解之后,会影响客户端生成的代码。调用的方法名和参数名也发生了变化
---------------------------------------------------------------------------------------------------C----X------F---------------------------------------------------------------------------------------------------------
CXF+Spring整合发布SOAP协议的服务
服务端:
开发步骤:
第一步:创建web项目(引入jar包)
第二步:创建SEI接口
第三步:创建SEI实现类
第四步:配置spring配置文件,applicationContext.xml,用<jaxws:server标签发布服务,设置1.服务地址;2.设置服务接口;3设置服务实现类
<?xmlversion="1.0"encoding="UTF-8"?> <beansxmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:jaxrs="http://cxf.apache.org/jaxrs"xmlns:cxf="http://cxf.apache.org/core" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd"> <!-- <jaxws:server发布SOAP协议的服务,对JaxWsServerFactoryBean类封装--> <jaxws:serveraddress="/weather"serviceClass="cn.itcast.ws.cxf.server.WeatherInterface"> <jaxws:serviceBean> <refbean="weatherInterface"/> </jaxws:serviceBean> </jaxws:server> <!-- 配置服务实现类 --> <beanname="weatherInterface"class="cn.itcast.ws.cxf.server.WeatherInterfaceImpl"/> </beans> |
第五步:配置web.xml,配置spring配置文件地址和加载的listener,配置CXF的servlet
<?xmlversion="1.0"encoding="UTF-8"?> <web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"id="WebApp_ID"version="3.0"> <display-name>ws_2_cxf_spring_server</display-name> <!-- 设置spring的环境 --> <context-param> <!--contextConfigLocation是不能修改的 --> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 配置CXF的Servlet --> <servlet> <servlet-name>CXF</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>CXF</servlet-name> <url-pattern>/ws/*</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> </web-app> |
第六步:部署到tomcat下,启动tomcat
第七步:测试服务,阅读使用说明书
WSDL地址规则:http://ip:端口号/项目名称/servlet拦截路径/服务名称?wsdl
客户端:
开发步骤:
第一步:引入jar包
第二步:生成客户端代码
第三步:配置spring配置文件,applicationContent.xml
<?xmlversion="1.0"encoding="UTF-8"?> <beansxmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:jaxrs="http://cxf.apache.org/jaxrs"xmlns:cxf="http://cxf.apache.org/core" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd"> <!-- <jaxws:client实现客户端,对JaxWsProxyFactoryBean类封装--> <jaxws:clientid="weatherClient"address="http://127.0.0.1:8080/ws_2_cxf_spring_server/ws/weather" serviceClass="cn.itcast.cxf.weather.WeatherInterface"/> </beans> |
第四步:从spring上下文件获取服务实现类
第五步:调用查询方法,打印
publicclass WeatherClient {
publicstaticvoid main(String[] args) {
//初始化spring的上下文
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
WeatherInterfaceweatherInterface = (WeatherInterface) context.getBean("weatherClient");
String weather = weatherInterface.queryWeather("保定");
System.out.println(weather);
}
}
泛泛而谈webservice相关推荐
- java工程webservice的应用案例
在java项目中使用webservice 今天学习webservice,主要参考了网络上的一些文章. 1.关于原理的介绍:个人认为这篇文章写得不错了,戳这里. 2.关于demo的编写:个人认为这篇文章 ...
- 添加引用方式抛出和捕获干净的WebService异常
转载:http://www.cnblogs.com/ahdung/p/3953431.html 说明:[干净]指的是客户端在捕获WebService(下称WS)抛出的异常时,得到的ex.Message ...
- 调试webservice遇到“测试窗体只能用于使用基元类型作为参数的方法”的解决办法...
之前一直写webservice 没有遇见这种情况,因为一般返回的参数整形 字符串 之类的 都是基本类型,最多也就是把xml序列化为一个字符串返回,这次遇到了返回一个引用类型的,不能直接调试了.所以,现 ...
- 怎样提高WebService的性能
服务器端WebService程序 using System.Runtime.Serialization.Formatters.Binary; using System.IO; using System ...
- 電子商務新紀元-WebService With BizSnap
電子商務新紀元-WebService With BizSnap WebService SOAP(Simple Object Access Protocol) Web Services Descript ...
- webservice 暴漏接口_webService接口是什么?
展开全部 Web 是使应用62616964757a686964616fe59b9ee7ad9431333431366263程序可以与平台和编程语言无关的方式进行相互通信的一项技术.Web 服务是一个软 ...
- .NET调用JAVA的WebService方法
调用WebService,最简单的办法当然是直接添加WEB引用,然后自动产生代理类,但是在调用JAVA的WebService时并没有这么简单,特别是对于SoapHeader的处理,在网上也有相关资料, ...
- WebService客户端添加SOAPHeader信息
WebService客户端添加SOAPHeader信息 通过JAXBContext创建Marshaller对头信息进行解析为dom,获取WSBindingProvider,使用Headers.crea ...
- Spring整合CXF,发布RSETful 风格WebService
这篇文章是承接之前CXF整合Spring的这个项目示例的延伸,所以有很大一部分都是一样的.关于发布CXF WebServer和Spring整合CXF这里就不再多加赘述了.如果你对Spring整合CXF ...
- php的webservice的wsdl的XML无法显示
php的webservice的因为wsdl有中文所以xml无法显示 可以用Nopepad++ 转码即可 以UTF-8无BOM编码
最新文章
- arduino水温度传感器数字显示_【雕爷学编程】Arduino动手做(5)---热敏温度传感器模块...
- 使用RHEL5做NTP服务器出错解决
- Qomo OpenProject beta1 发布!
- 如何自己动手写一个搜索引擎?我是一份害羞的教程
- ASP.NET Core 2.0使用Autofac实现IOC依赖注入竟然能如此的优雅简便
- ajax传值controller怎么写,ajax向 controller传值(示例代码)
- 软设考试成绩查询结果
- html网页主题结构,常用html元素总结包括基本结构、文档类型、头部、主体等等...
- RQNOJ36 数石子 并查集 简单应用
- 企业做的好,离不开这三方面能力
- 我只能说,Spring Data REST真的很燥辣
- 图标文字对齐的几种常见方法
- linux视频字幕下载工具,Linux中编辑视频字幕
- Python解离散数学
- 没有超级英雄?自己做一个java漫威英雄手办商城系统
- Centos7.6搭建FTP服务器
- 解决:Android中常见的热门标签的流式布局flowlayout不能wrap_content
- 考研刷题小程序的盈利模式分析
- 性能指标TP99介绍
- AudioToolbox使用方法总结
热门文章
- 近似算法之旅行商问题
- Vue.js(二) 模板语法
- 谷歌浏览器打不开产品给的原型图,提示AXURE RP EXTENSION For Chrome
- 改变指标改变图(FusionChart)
- Imbalance data——数据不平衡问题
- 关于hping打流测试工具
- JAVA计算机毕业设计藏宝阁游戏交易系统Mybatis+系统+数据库+调试部署
- Vue keep-alive和activated的用法
- Android toolchain - develop for Android devices
- 02读书笔记:《编码》-隐匿在计算机软硬件背后的语言(12-14章)