WebService的讲解 和 CXF 的初步使用

1. 复习准备

1.1. Schema约束

几个重要知识:

  1. namespace

      相当于schema文件的id

  1. targetNamespace属性

      用来指定schema文件的namespace的值

  1. xmlns属性

      引入一个约束, 它的值是一个schema文件的namespace值

  1. schemaLocation属性

      用来指定引入的schema文件的位置

 

schema规范中:

    1. 所有标签和属性都需要有schema文件来定义

    2. 所有的schema文件都需要有一个id, 但在这里它叫namespace,

    3. namespace的值由什么来指定?

      由targetNamespace属性来指定, 它的值是一个url(很有可能不存在)

    4. 如何引入一个Schema约束?

      属性: 用xmlns属性

      属性值: 对应的schema文件的id(namespace值)

    5. 如果引入的schema不是w3c组织定义, 必须指定schema文件的位置

    6. schema文件的位置由什么属性来指定?

      属性: schemaLocation

      属性值: namespace  path

    7. 如果引入了N个约束, 需要给n-1个取别名

   

1.2. HTTP协议

几个重要知识:

    1. 请求的组成:
          请求行(请求方式  path  http1.1)

       请求头

          请求体: 只有post请求有

    2. 响应的组成
          响应状态行:

          响应头

          响应体 : 浏览器解析显示的数据

    3. 请求的过程

 
2.  面试问题

 

  1.webservice相当于HTTP+?+?

    ? : xml

    ? : schema

  2.wsdl是什么?

    webservice定义语言, 对应.wsdl文档, 一个webservice会对应一个唯一的wsdl文档,

    定义了客户端与服务端发送请求和响应的数据格式和过程

  3.如何发布一个webservice?

    定义SEI   @webservice @webMethod

    定义SEI的实现

    发布:  Endpoint.publish(url, SEIImplObject)

  4.  如何请求一个webservice?

    1.根据wsdl文档生成客户端代码  jdk/cxf

    2.根据生成的代码调用webService

 

3. 关于Web Service的几个问题

3.1. Web service是什么?

  1. 基于Web的服务:服务器端整出一些资源让客户端应用访问(获取数据)

  2. 一个跨语言、跨平台的规范(抽象)

  3. 多个跨平台、跨语言的应用间通信整合的方案(实际)

  以各个网站显示天气预报功能为例:

    气象中心的管理系统将收集的天气信息并将数据暴露出来(通过WebService Server),

    而各大站点的应用就去调用它们得到天气信息并以不同的样式去展示(WebService Client).

    网站提供了天气预报的服务,但其实它们什么也没有做,

    只是简单了调用了一下气象中心服务器上的一段代码而已

3.2. 为什么要用Web service

  web service能解决:

    跨平台调用

    跨语言调用

    远程调用

3.3. 什么时候使用web Service?

  1. 同一家公司的新旧应用之间

  2. 不同公司的应用之间

    分析业务需求:天猫网与中通物流系统如何交互?

  3. 一些提供数据的内容聚合应用:天气预报、股票行情

4. Web Service中的几个重要术语

4.1. WSDLweb service definition language

  直译 : WebService定义语言

  1. 对应一种类型的文件.wsdl

  2. 定义了web service的服务器端与客户端应用交互传递请求和响应数据的格式和方式

  3. 一个web service对应一个唯一的wsdl文档

4.2. SOAPsimple object  access protocal

  直译: 简单对象访问协议

  1. 是一种简单的、基于HTTP和XML的协议, 用于在WEB上交换结构化的数据
  2. soap消息:请求消息响应消息

    http+xml片断

4.3. SEI:WebService EndPoint Interface(终端)

直译: web service的终端接口,

  1. 就是WebService服务器端用来处理请求的接口

  @Webservice

  @WebMethod

4.4. CXFCeltix + XFire

  一个apache的用于开发webservice服务器端和客户端的框架

5. 开发webservice

5.1. 概述  

  • 开发手段:

    – 使用JDK开发(1.6及以上版本)

    – 使用CXF框架开发(工作中)

  • 组成:

    – 服务器端

    – 客户端

5.1. 使用JDK开发WebService

1).开发服务器端

  • Web Service编码:

    – @WebService( SEI和SEI的实现类)

    – @WebMethod(SEI中的所有方法)

 1 import javax.jws.WebMethod;
 2 import javax.jws.WebService;
 3
 4 /**
 5  * SEI
 6  * @author Administrator
 7  *
 8  */
 9 @WebService
10 public interface HelloWs {
11
12     @WebMethod
13     public String sayHello(String name);
14 }

Interface

 1 import javax.jws.WebService;
 2
 3 import com.ittest.ws.service.HelloWs;
 4 /**
 5  * SEI  的实现
 6  * @author Administrator
 7  *
 8  */
 9 @WebService
10 public class HelloWsImpl implements HelloWs {
11
12     public String sayHello(String name) {
13         System.out.println("service sayHello()  "+name);
14         return "Hello "+name;
15     }
16
17 }

Implement

  • 发布Web Service

    – Endpoint(终端, 发布webservice)

 1 import javax.xml.ws.Endpoint;
 2
 3 import com.ittest.ws.service.impl.HelloWsImpl;
 4
 5 /**
 6  * 发布webservice
 7  * @author Administrator
 8  *
 9  */
10 public class TestService {
11
12     public static void main(String[] args) {
13         String address = "http://192.168.1.100:8989/webService_01_sayService/hellows";
14         Endpoint.publish(address, new HelloWsImpl());
15         System.out.println("发布 webService_01_sayService 成功");
16     }
17 }

EndPoint

2). 开发客户端

  • 使用eclipse提供的web service浏览器访问

    – 查看对应的wsdl文档:…..?wsdl (一般浏览器)

    – 请求webService并查看请求和响应消息(webservice浏览器)

  • 创建客户端应用编码方式访问

    – 借助jdk的wsimort.exe工具生成客户端代码:

        wsimport   -keep url   //url为wsdl文件的路径

    – 借助生成的代码编写请求代码

5.2. 监听请求: 使用Eclipse的TCP/IP工具(端口转发)

  1. 将服务器端的WSDL文档保存到客户端本地
  2. 修改文档: 将端口号从8989改为8080
  3. 根据本地的wsdl文档生成客户端代码, 并编写客户端的调用代码
  4. 配置eclipse的TCP/IP,启动监听

  1. 执行客户端代码发送WebService请求

5.3. 调用免费的web service(天气预报)

  1. Google免费WebService, 找到提供天气预报Webservice的网络地址

    – http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx

  1. 使用eclipseweb service浏览器访问
  1. 客户端编码方式访问

    – 借助命令工具自动生成客户端代码

    – 借助生成的代码编写请求代码

  异常说明: 直接生成客户端代码会抛异常, 无法生成客户端代码, 解决办法:

      1. 将对应的wsdl文档保存到本地
      2. 修改wsdl文档的部分内容:

      将 <s:element ref="s:schema" /><s:any /> 替换成

        <s:any minOccurs="2" maxOccurs="2"/>

      备注: 这个是Java调用net的webservice都有的问题

5.4. 使用CXF开发web service

  EndPoint:  加入cxf的jar包即可,其它不需要改动

  Client: 加入cxf的jar包即可,使用cxf的  wsdl2java 命令生成代码(加入path)

    D:\javaeclipsWorkSpace\javaeeProject\webService_01_cxf_client3\src>wsdl2java       D:\javaeclipsWorkSpace\javaeeProject\webService_01_cxf_client3\hellows.wsdl

  

  wsdl2java 异常说明:

    G:\myeclipseworkspace\WS-client\src>wsdl2java http://192.168.1.4/server?wsdl

    Exception in thread "main" java.lang.AssertionError: org.xml.sax.SAXParseExcepti

    on; systemId: jar:file:/F:/apache-cxf-3.0.0/lib/jaxb-xjc-2.2.7.jar!/com/sun/tool

    s/xjc/reader/xmlschema/bindinfo/binding.xsd; lineNumber: 52; columnNumber: 88; s

    chema_reference: 由于 accessExternalSchema 属性设置的限制而不允许 ‘file‘ 访问,

    因此无法读取方案文档 ‘xjc.xsd‘。

  原因:  Cxf 和 jdk的版本不匹配 .

    微博文章:   http://blog.csdn.net/yajun0628/article/details/74458351

时间: 2025-01-02 14:10:54

WebService的讲解 和 CXF 的初步使用的相关文章

WebService通讯技术的CXF框架问题

WebService通讯技术的CXF框架问题 严重: Servlet /cxf_rs_spring threw load() exception java.lang.ClassCastException: org.apache.cxf.transport.servlet.CXFServlet cannot be cast to javax.servlet.Servlet 出现原因:服务器冲突 我在pom.xml文件中既配置了jetty服务器,又配置了tomcat服务器,所以在启动的时候两个服务冲

WebService -- Java 实现之 CXF (初体验)

1. 认识WebService 简而言之,她就是:一种跨编程语言以及操作系统的远程调用技术. 大家都可以根据定义好的规范和接口进行开发,尽管各自的使用的开发语言和操作系统有所不同,但是由于都遵循统一的规范还有接口,因而可以做到透明和正常交互. 2. CXF 官方主页:http://cxf.apache.org/ 定义: Apache CXF is an open source services framework. CXF helps you build and develop services

webservice的简单使用,cxf框架的的使用

Web service是一个平台独立的,低耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述.发布.发现.协调和配置这些应用程序,用于开发分布式的互操作的应用程序. Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的.专门的第三方软件或硬件, 就可相互交换数据或集成.依据Web Service规范实施的应用之间, 无论它们所使用的语言. 平台或内部协议是什么, 都可以相互交换数据.Web Service是自描述.

WebService -- Java 实现之 CXF ( 添加系统预定义的拦截器)

1. 概述 CXF允许我们在webservice的in/out位置添加拦截器.拦截器有两大分类,一类是系统预定义的:另一类是自定义拦截器. 2. 在server端添加拦截器. JaxWsServerFactoryBean wsSvrFactoryBean = new JaxWsServerFactoryBean(); String address = "http://127.0.0.1/helloWorld"; wsSvrFactoryBean.setAddress(address);

WebService学习总结(四)——调用第三方提供的webService服务,使用cxf

package webservice; import javax.xml.namespace.QName; import org.apache.cxf.endpoint.Client; import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory; public class Test1 { public static void main(String[] args) throws Exception { JaxWsD

So easy Webservice 8.spring整合CXF 发布WS

1.添加jar包(cxf的jar包中包含了spring的jar包),添加spring配置文件 2.web.xml中配置CXFServlet,过滤WS服务的地址 <!-- 配置CXFServlet,实现地址过滤的功能,项目启动时实例化 --> <servlet> <servlet-name>cxfServlet</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFSer

WebService -- Java 实现之 CXF ( 使用:Spring+CXF+Tomcat发布webService)

1. 新建一个Maven项目,选择webapp模板,命名为WS_Spring_CXF_Tomcat 2. 在POM.xml中添加Spring和CXF的依赖 <!-- 添加 Spring dependency --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.1.7.R

WebService -- Java 实现之 CXF (WebService 服务器端接口)

1. 使用Maven创建一个quickstart项目 2. 引入依赖的Jar包 <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-core</artifactId> <version>3.1.5</version> </dependency> <dependency> <groupId>org.apache.cx

WebService -- Java 实现之 CXF ( 使用CXF工具生成client 程序)

1. 下载CXF 工具解压到磁盘 2.添加工具bin目录到PATH环境变量 3.创建一个CXF client新项目 4. run -> cmd 到指定目录,并运行工具目录下的批处理 “wadl2java.bat” 5. 完成后,在IDE中刷新项目,就会发现新生成的包+文件 6. 编写client类,访问webserivce package com.example.tuo.myCXFWebService.WS_Client; import com.example.tuo.webservice.He