WebService CXF学习(高级篇1):整合Spring框架
发布时间:2020-12-17 01:16:58 所属栏目:安全 来源:网络整理
导读:通过前面两节的讲解,相信你对CXF框架开始有一些认识了。在当今项目开发中,Spring框架基上都用到过,那么它怎么与CXF结合呢,这就是我们这一间要讲的内容。好了,闲话少说。 ??? 首先,在前面基础上再导入几个spring要用到的几个.jar包: ??? spring-core.j
通过前面两节的讲解,相信你对CXF框架开始有一些认识了。在当今项目开发中,Spring框架基上都用到过,那么它怎么与CXF结合呢,这就是我们这一间要讲的内容。好了,闲话少说。
??? 首先,在前面基础上再导入几个spring要用到的几个.jar包: ??? spring-core.jar ??? spring-jdbc.jar ??? spring-context.jar ??? spring-orm.jar ??? spring-beans.jar ??? spring-tx.jar ??? 包导入完之后,我们还不能开如干活,配置几荐参数,便于下一步工作。 ??? 配置CXF框架 ??? 我的电脑->属性->高级->环境变量 ??? 创建一个CXF_HOEM变量,值为CXF框架所在根目录,修改一下 ??? CLASSPATH=%CXF_HOME%/lib;PATH=%CXF_HOME%/bin;这时有会问为什么要配置这两个参数据呢,其实配置这两个参数用途与配置JAVA变量一下,在DOS窗口下直接运行java2ws,wsdl2java等可执行文件。当然你没有配置也可以进到CXF框架的bin目录下远行这个几个可执行文件。 ?? 配置好了后,你在DOS窗口下输入java2ws,看看配置是否效。肯定没有成功,原因是使用6.0的JDK,我们还得在%JAVA_HOME%/jre/lib目录下创建一下endorsed文件夹,将jaxb-api.jar,jaxws.jar拷贝进去。现在再运一下java2ws,成功运行,配置生效了。 ??? 基本工作做得差不多,整合spring框架正式开始: ??? 第一步:新一个web project,导入要用到.jar包,其实CXF利用org.apache.cxf.transport.servlet.CXFServlet来拦截所有web请求,将其配置到web.xml中。配置如下: Java代码? 收藏代码 ??? <web-app>? ??????? <context-param>? ??????????? <param-name>contextConfigLocation</param-name>? ??????????? <param-value>? ??????????????? /WEB-INF/classes/applicationContext-*.xml,/WEB-INF/classes/webservice.xml? ??????????? </param-value>? ??????? </context-param>? ????? ??????? <listener>? ??????????? <listener-class>? ??????????????? org.springframework.web.context.ContextLoaderListener? ??????????? </listener-class>? ??????? </listener>? ????? ??????? <servlet>? ??????????? <servlet-name>CXFServlet</servlet-name>? ??????????? <display-name>CXF Servlet</display-name>? ??????????? <servlet-class>? ??????????????? org.apache.cxf.transport.servlet.CXFServlet? ??????????? </servlet-class>? ??????????? <load-on-startup>1</load-on-startup>? ??????? </servlet>? ????? ??????? <servlet-mapping>? ??????????? <servlet-name>CXFServlet</servlet-name>? ??????????? <url-pattern>/*</url-pattern>? ??????? </servlet-mapping>? ??? </web-app>? ????? 注意一下绿色字体 ????? CXF框架配置好了,我就来开发一个WebService接口 Java代码? 收藏代码 ???????? @WebService? ???????? public interface IService {? ????? ??? //public void save(@WebParam(name="info")String xml);? ??? public void save(@WebParam(name="dto")UserInfoDTO dto,@WebParam(name="flag")boolean flag);? ??? public void update(@WebParam(name="info")String xml);? ??? public void delete(@WebParam(name="id")int id);? ??? public @WebResult(name="String")String get(@WebParam(name="id")int id);? ??????? }? ??? 这里面有四个方法,其中有一个涉及到对象,这一点前面一节讲到怎么处理它。放在这里是再回顾前节内容。 ??? 创建一个WebService接口实现类 ?? Java代码? 收藏代码 ?????? @WebService? ?????? public class ServiceImpl implements IService {? ??? private Logger log = LoggerFactory.getLogger(ServiceImpl.class);? ????? ??? public void delete(int id) {? ??????? log.info("delete id is {} user"+id);? ??? }? ????? ??? public void save(UserInfoDTO dto,boolean flag) {? ??????? System.out.println("name:"+dto.getName());? ??? }? ????? ??? public void update(String xml) {? ??? }? ????? ??? public String get(int id){? ??????? return null;? ??? }? ????? }? ???????? ?? 由于本节只讲解与Spring整合,没有涉及到数据库,因就打印一下传递过来的对象内容来证明整合成功。与spring,hibernate整合后面章节会讲到,请留意后面章节。 ?? 传递对象,当然创建对象啦 Java代码? 收藏代码 ????? @XmlType(name="ServerUserInfo")? ????? @XmlAccessorType(XmlAccessType.FIELD)? ????? public class UserInfoDTO implements java.io.Serializable {? ????? ??? private static final long serialVersionUID = -4666026219400887433L;? ??? private Integer id;? ??? private String name;? ??? private Integer age;? ??? private Integer address;? ????? ??? public Integer getId() {? ??????? return id;? ??? }? ????? ??? public void setId(Integer id) {? ??????? this.id = id;? ??? }? ????? ??? public String getName() {? ??????? return name;? ??? }? ????? ??? public void setName(String name) {? ??????? this.name = name;? ??? }? ????? ??? public Integer getAge() {? ??????? return age;? ??? }? ????? ??? public void setAge(Integer age) {? ??????? this.age = age;? ??? }? ????? ??? public Integer getAddress() {? ??????? return address;? ??? }? ????? ??? public void setAddress(Integer address) {? ??????? this.address = address;? ??? }? ????? ??? public UserInfoDTO() {? ??? }? ????? ?????? }? ?? 做了这么多工作,有人又会问,怎么现在做的与spring框架就没一点联系,呵呵,确实是这样。开戏开场了,利用Spring来发布WebService接口: Java代码? 收藏代码 ??? <?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"? ??????? xsi:schemaLocation="? ??????????? http://www.springframework.org/schema/beans?? ??????????? http://www.springframework.org/schema/beans/spring-beans-2.0.xsd? ??????????? http://cxf.apache.org/jaxws?? ??????????? http://cxf.apache.org/schemas/jaxws.xsd">? ??????? ? ??????????? <!--导入与CXF框架有关的xml-->? ??????????? <import resource="classpath:META-INF/cxf/cxf.xml" />? ??????? <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />? ??????? <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />? ????? ??????????? <!--布布WebService接口-->? ??????? <jaxws:endpoint id="service"? ??????????? implementor="com.itdcl.service.ServiceImpl" address="/Service">? ????????????? ??????? </jaxws:endpoint>? ??? </beans>? ???? 服务端开发工作基本结束。现在打包部署到Tomcat6.0.18(本人目前使用的测试服务器,你当然可以使用别的服务器) ??? 服务器启动完成后,打开浏览器在地址栏中输入http://localhost:port/project name/Service?wsdl看看接口是否发成功。 ??? 接下来就是开发一个客户端了。 ??? 另建一个web project,现在前面的参数配置要起作用了,cmd进入DOS环境下输入wsdl2java -p com.itdcl.service(自定义包名) http://localhost:port/project name/Service?wsdl(前提是服务器没停止) ??? 敲击Enter,wsdl2java工具帮你将发布出来的wsdl文件转换成webservice接口,到指定目录下将com.itdcl.service拷到刚才另建的web project的src目录下。 ??? 现在,我们就来创建一个客户端程序: Java代码? 收藏代码 ??????? public class SampleClient {? ????? ??? ublic static void main(String[] args) {? ??? ApplicationContext context = new ClassPathXmlApplicationContext(? ??????????? "beans.xml");? ??????? ???? IService service = (IService)context.getBean("service");? ???? ServerUserInfo userInfo = new ServerUserInfo();? ???? userInfo.setAddress(1);? ???? userInfo.setAge(100);? ???? userInfo.setName("Jason");? ????? ???? service.save(userInfo,true);? ???? service.delete(1);? ????? ????? ???? }? ??? 看得仔细的朋友就会问了,ServerUserInfo 这个类那来的,你进到com.itdcl.service目录下就会看到,是WebService发布出来的。 ??? 到目前为止,客户端还没有完成,你没有看到程序中ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");这个bean.xml就是spring框架来注删除WebService接口的。好啦,创建一个bean.xml,内容如下: Java代码? 收藏代码 ????? <?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"? ??? xsi:schemaLocation="? ??????? http://www.springframework.org/schema/beans?? ??????? http://www.springframework.org/schema/beans/spring-beans-2.0.xsd? ??????? http://cxf.apache.org/jaxws?? ??????? http://cxf.apache.org/schemas/jaxws.xsd">? ??? <jaxws:client id="service"? ??????? address="http://localhost:9999/cxf/Service"? ??????? serviceClass="com.itdcl.service.IService" />? ????? </beans>? ??? 留意一下绿色字体 ??? 剩下的事就是运行客户端程序了,没有异常抛出,打印出:name:Josen,则恭喜你CXF框架与Spring整合成功。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |