什么是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相关推荐

  1. java工程webservice的应用案例

    在java项目中使用webservice 今天学习webservice,主要参考了网络上的一些文章. 1.关于原理的介绍:个人认为这篇文章写得不错了,戳这里. 2.关于demo的编写:个人认为这篇文章 ...

  2. 添加引用方式抛出和捕获干净的WebService异常

    转载:http://www.cnblogs.com/ahdung/p/3953431.html 说明:[干净]指的是客户端在捕获WebService(下称WS)抛出的异常时,得到的ex.Message ...

  3. 调试webservice遇到“测试窗体只能用于使用基元类型作为参数的方法”的解决办法...

    之前一直写webservice 没有遇见这种情况,因为一般返回的参数整形 字符串 之类的 都是基本类型,最多也就是把xml序列化为一个字符串返回,这次遇到了返回一个引用类型的,不能直接调试了.所以,现 ...

  4. 怎样提高WebService的性能

    服务器端WebService程序 using System.Runtime.Serialization.Formatters.Binary; using System.IO; using System ...

  5. 電子商務新紀元-WebService With BizSnap

    電子商務新紀元-WebService With BizSnap WebService SOAP(Simple Object Access Protocol) Web Services Descript ...

  6. webservice 暴漏接口_webService接口是什么?

    展开全部 Web 是使应用62616964757a686964616fe59b9ee7ad9431333431366263程序可以与平台和编程语言无关的方式进行相互通信的一项技术.Web 服务是一个软 ...

  7. .NET调用JAVA的WebService方法

    调用WebService,最简单的办法当然是直接添加WEB引用,然后自动产生代理类,但是在调用JAVA的WebService时并没有这么简单,特别是对于SoapHeader的处理,在网上也有相关资料, ...

  8. WebService客户端添加SOAPHeader信息

    WebService客户端添加SOAPHeader信息 通过JAXBContext创建Marshaller对头信息进行解析为dom,获取WSBindingProvider,使用Headers.crea ...

  9. Spring整合CXF,发布RSETful 风格WebService

    这篇文章是承接之前CXF整合Spring的这个项目示例的延伸,所以有很大一部分都是一样的.关于发布CXF WebServer和Spring整合CXF这里就不再多加赘述了.如果你对Spring整合CXF ...

  10. php的webservice的wsdl的XML无法显示

    php的webservice的因为wsdl有中文所以xml无法显示 可以用Nopepad++  转码即可  以UTF-8无BOM编码

最新文章

  1. arduino水温度传感器数字显示_【雕爷学编程】Arduino动手做(5)---热敏温度传感器模块...
  2. 使用RHEL5做NTP服务器出错解决
  3. Qomo OpenProject beta1 发布!
  4. 如何自己动手写一个搜索引擎?我是一份害羞的教程
  5. ASP.NET Core 2.0使用Autofac实现IOC依赖注入竟然能如此的优雅简便
  6. ajax传值controller怎么写,ajax向 controller传值(示例代码)
  7. 软设考试成绩查询结果
  8. html网页主题结构,常用html元素总结包括基本结构、文档类型、头部、主体等等...
  9. RQNOJ36 数石子 并查集 简单应用
  10. 企业做的好,离不开这三方面能力
  11. 我只能说,Spring Data REST真的很燥辣
  12. 图标文字对齐的几种常见方法
  13. linux视频字幕下载工具,Linux中编辑视频字幕
  14. Python解离散数学
  15. 没有超级英雄?自己做一个java漫威英雄手办商城系统
  16. Centos7.6搭建FTP服务器
  17. 解决:Android中常见的热门标签的流式布局flowlayout不能wrap_content
  18. 考研刷题小程序的盈利模式分析
  19. 性能指标TP99介绍
  20. AudioToolbox使用方法总结

热门文章

  1. 近似算法之旅行商问题
  2. Vue.js(二) 模板语法
  3. 谷歌浏览器打不开产品给的原型图,提示AXURE RP EXTENSION For Chrome
  4. 改变指标改变图(FusionChart)
  5. Imbalance data——数据不平衡问题
  6. 关于hping打流测试工具
  7. JAVA计算机毕业设计藏宝阁游戏交易系统Mybatis+系统+数据库+调试部署
  8. Vue keep-alive和activated的用法
  9. Android toolchain - develop for Android devices
  10. 02读书笔记:《编码》-隐匿在计算机软硬件背后的语言(12-14章)