声明:基于某智播客课堂讲义及讲师课堂笔记,如有问题或者涉及到侵权,请联系删除。
-
介绍
-
webService入门(了解)
-
基于jdk1.7开发webservice服务(了解)
-
Apache CXF框架入门(掌握)
-
基于CXF框架搭建CRM系统(掌握)
-
基于eclipse+tomcat+Oracle10g+maven
- 本机同时运行客户端和服务端,需要同时配置两个tomcat,端口地址不能一样,否则会端口冲突打开失败
-
webService入门
Web service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。[1]
Webservice跨平台跨语言;
Java 客户端 -----》 .net服务端
-
基于jdk调用网络上服务
http://www.webxml.com.cn/zh_cn/index.aspx :提供功能服务
-
找到服务的wsdl地址
-
通过jdk提供命令wsimport命令生成java调用代码
-
将生成代码拷贝到本地,测试代码:
-
soap协议:简单对象访问协议
规范wbeservice请求,响应数据格式:都是xml格式
Request:
POST /WebServices/MobileCodeWS.asmx HTTP/1.1
Host: ws.webxml.com.cn
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://WebXml.com.cn/getMobileCodeInfo"
<?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>
Response:
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
<?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>
<getMobileCodeInfoResponse xmlns="http://WebXml.com.cn/">
<getMobileCodeInfoResult>string</getMobileCodeInfoResult>
</getMobileCodeInfoResponse>
</soap:Body>
</soap:Envelope>
SOAP 1.2
-
wsdl webservice描述语言
俗称"web服务使用说明书"
网络服务描述/定义语言:每一个webservice服务都有自己wsdl
wsdl是标准xml文件,wsdl(xml文件)包含服务名称,服务中包含方法名,方法参数(参数类型),方法返回类型。
通过jdk提供命令wsimport,解析wsdl(本质就是xml文件),生成客户端java调用代码(生成代码方法名称,方法参数,方法返回类型)。
WSDL地址:服务地址+?WSDL
-
wsimport命令
-
WebService入门基于jdk1.7发布服务(了解)
-
基于jdk基于1.7调用网络上服务
-
http://www.webxml.com.cn/zh_cn/index.aspx :提供功能服务
-
找到服务的wsdl地址
-
通过jdk提供命令wsimport命令生成java调用代码
-
将生成代码拷贝到本地,测试代码:
-
wsimpot命令
-
soap简单对象访问协议
规范wbeservice请求数据,响应数据格式:xml -- 跨语言调用
Request:
POST /WebServices/MobileCodeWS.asmx HTTP/1.1
Host: ws.webxml.com.cn
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://WebXml.com.cn/getMobileCodeInfo"
<?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>
Response:
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
<?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>
<getMobileCodeInfoResponse xmlns="http://WebXml.com.cn/">
<getMobileCodeInfoResult>string</getMobileCodeInfoResult>
</getMobileCodeInfoResponse>
</soap:Body>
</soap:Envelope>
SOAP 1.2
-
wsdl
webservice 描述语言。
俗称:web服务使用说明书
网络服务描述语言:每一个webservice服务都有自己wsdl
Wsdl是标准xml文件,包含服务名称,包含方法,方法参数,方法返回类型。
通过命令wsimport,解析wsdl,生成java调用代码。
-
jdk1.7服务端发布webservice服务(了解)
-
创建类,创建若干方法
-
在类上使用注解@WebService
-
发布服务
-
wsdl地址: 服务地址+?wsdl
-
客户端调用
-
wsimport生成java调用代码
-
获取服务的wsdl地址: 服务地址+?wsdl
wsimport – d <生成class文件目录> -s<生成java文件目录> -p <生成代码包路径> wsdl地址
解析wsdl(xml),生成本地代码
-
通过命令解析wsdl生成代码
-
将生成的java文件拷贝项目中
-
测试代码
-
Apache cxf框架入门
Apache CXF = Celtix + Xfire 支持多种协议: SOAP1.1,1.2 XML/HTTP CORBA(Common Object Request Broker Architecture公共对象请求代理体系结构,早期语言使用的WS;C,c++,C#) 并可以与Spring进行快速无缝的整合 灵活的部署:可以运行在Tomcat,Jboss,Jetty(内置),IBMWS,BeaWL上面。
<!-- 导入webservice依赖 -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>${cxf.version}</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>${cxf.version}</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxrs</artifactId>
<version>${cxf.version}</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-rs-client</artifactId>
<version>${cxf.version}</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-rs-extension-providers</artifactId>
<version>${cxf.version}</version>
</dependency>
-
服务端
-
创建web项目
-
课后资料中,cxf开发jar包(跟spring整合),导入项目中
-
配置约束位置
-
搭建CXF环境
-
提供cxf的配置文件(spring配置文件需要导入jaxws名称空间)
-
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xmlns:soap="http://cxf.apache.org/bindings/soap"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/bindings/soap
http://cxf.apache.org/schemas/configuration/soap.xsd
http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd">
</beans>
-
Web.xml中配置Servlet
<!-- 配置cxf提供servlet 1、发布webservice服务 2、处理客户端访问请求 -->
<servlet>
<servlet-name>cxf</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<!—暂时使用初始化参数加载cxf配置文件(spring配置文件),后期使用spring监听器加载spring配置文件 -->
<init-param>
<param-name>config-location</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</init-param>
</servlet>
-
创建服务接口,实现类,在接口上使用注解@webService注解
-
在cxf配置文件中发布服务
-
查看wsdl地址:
-
客户端调用
通过命令生成本地调用java代码:
-
Jdk的方式(了解)
-
wsdl地址:服务地址+?wsdl
-
将上面生成所有java文件拷贝到项目中
-
测试代码
-
CXF方式(掌握)
通过spring工厂产生代理对象;
-
创建新的工程
-
将cxf的相关jar包到入项目
-
提供cxf配置文件:spring配置文件
-
只需要拷贝生成的服务接口到项目中,在cxf配置文件中进行配置
-
测试代码
-
总结
解决两个项目直接互相调用;
-
基于cxf搭建CRM项目环境
CRM系统只是为了提供webservice服务供其他两个项目:后台管理系统,前台系统调用;没有提供对客户数据模块维护页面;
CRM项目中使用技术:spring+spring-data-jpa +CXF +oracle数据库
-
搭建数据库环境
-
创建表空间
-
创建用户,用户授权
--创建表空间
create tablespace itcast271_crm
datafile 'c:\itcast271_crm.dbf'
size 200m
autoextend on
next 10m;
--创建用户
create user xiaolongnv identified by xiaolongnv
default tablespace itcast271_crm;
--授权
grant resource,connect to xiaolongnv;
-
搭建项目环境
Spring+spring-data-jpa+CXF
-
创建maven –project 父工程为:common_parent
-
CRM框架环境
Spring+spring-data-jpa+CXF
-
搭建spring环境
-
配置文件:applicationContext.xml
-
Web.xml配置监听器
-
-
Spring整合jpa
-
Spring-data-jpa :2,3配置去复制bos_web项目下 注意:包扫描路径改为crm
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xmlns:soap="http://cxf.apache.org/bindings/soap"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/data/jpa
http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
http://cxf.apache.org/bindings/soap
http://cxf.apache.org/schemas/configuration/soap.xsd
http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd">
<!-- 连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="oracle.jdbc.driver.OracleDriver" />
<property name="jdbcUrl" value="jdbc:oracle:thin:@192.168.133.10:1521:ORCL" />
<property name="user" value="xiaolongnv" />
<property name="password" value="xiaolongnv" />
</bean>
<!--
jap:entityManger操作数据库 相对于hibernate中Session对象
JPA是统一规范,hibernate实现JPA标准 -->
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- 扫描实体类包:包含子包 -->
<property name="packagesToScan" value="cn.itcast.crm.domain" />
<!-- 指定持久层提供者为Hibernate -->
<property name="persistenceProvider">
<bean class="org.hibernate.ejb.HibernatePersistence" />
</property>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<!-- 自动建表 -->
<property name="generateDdl" value="true" />
<property name="showSql" value="true" />
<property name="database" value="ORACLE" />
<property name="databasePlatform" value="org.hibernate.dialect.Oracle10gDialect" />
</bean>
</property>
<property name="jpaDialect">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
</property>
</bean>
<!-- 事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<!-- 注解方式管理事务 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
<!-- spring-Data整合jpa:解放持久层
base-package:设置为dao接口包,指定到父包,当项目启动时候,对接口产生代理对象。通过代理对象调用CRUD方法
-->
<jpa:repositories base-package="cn.itcast.crm.dao"></jpa:repositories>
<!-- service,action对象创建使用注解方式 -->
<context:component-scan base-package="cn.itcast.crm"></context:component-scan>
</beans>
-
服务端CXF环境
-
Web.xml配置servlet
-
<!-- 配置cxfServlet 处理客户端请求 -->
<servlet>
<servlet-name>cxf</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<!-- <init-param>之前通过初始化参数加载spring配置文件,发布服务;现在已经配置监听器</init-param> -->
</servlet>
<servlet-mapping>
<servlet-name>cxf</servlet-name>
<url-pattern>/service/*</url-pattern>
</servlet-mapping>
5、Web.xml
<!-- spring的监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- cxfServlet:处理客户端请求 2、发布服务 -->
<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>/service/*</url-pattern>
</servlet-mapping>
-
发布查询所有的客户数据服务
添加新server:
-
将资料中客户实体导入bos_crm项目中
2、启动项目完成自动建表
-
执行资料中sql脚本,添加测试客户数据
-
数据库中数据
-
实现案例
-
创建服务接口,在接口上使用注解@WebService,创建实现类
-
Cxf配置文件中,配置webservice服务端对象
-
启动项目:查询webservice服务
Wsdl地址:服务地址+?wsdl
-
完善服务端查询所有客户方法
-
创建dao继承jparepository
-
将dao对象注入service中
-
调用服务户端方法
-
-
-
获取wsdl地址:http://localhost:8082/bos_crm/service/customer?wsdl 生成代码
-
将接口拷贝到bos-service项目中
-
在客户端spring配置文件中,配置客户端调用对象
-
在需要调用CRM的代码中注入客户端对象
相关资料链接:https://pan.baidu.com/s/16IhLwfKGabTQp6SSUMSP_g 密码:a6c1
idea环境下相关问题处理:
无法使用@Autowired , could not autowire : http://www.cnblogs.com/Vgger/p/8596020.html