XFire 和 Spring 是可以完美整合的,上一篇写的有点糟糕,现在直接上更加清晰的例子吧!
XFire 的简单使用,我这里就不弄了,毕竟显示中很少使用,一般都是和框架结合使用如:spring 等;
我在这里重新梳理下:
步骤:
1、 添加jar依赖
2、 修改web.xml
3、 修改applicationContext.xml
4、 编写接口和实现或校验类
1、在Maven 的 POM 文件中添加的 jar 包依赖
<!-- xfire 依赖包 --> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>org.codehaus.xfire</groupId> <artifactId>xfire-aegis</artifactId> <version>1.2.6</version> </dependency> <dependency> <groupId>org.codehaus.xfire</groupId> <artifactId>xfire-spring</artifactId> <version>1.2.6</version> <exclusions> <exclusion> <artifactId>spring</artifactId> <groupId>org.springframework</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>xalan</groupId> <artifactId>xalan</artifactId> <version>2.7.0</version> </dependency>
其中,要去掉XFier自带的spring1.2.6.jar 包,否则会包冲突的。
2、修改WEB.XML 文件
<context-param> <param-name>contextConfigLocation</param-name> <!-- 引入 classpath:org/codehaus/xfire/spring/xfire.xml --> <param-value>classpath:org/codehaus/xfire/spring/xfire.xml,classpath:applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- begin XFire 配置 --> <servlet> <servlet-name>XFireServlet</servlet-name> <!-- 不整合spring 时使用org.codehaus.xfire.transport.http.XFireConfigurableServlet --> <servlet-class>org.codehaus.xfire.spring.XFireSpringServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>XFireServlet</servlet-name> <url-pattern>/webservice/*</url-pattern> </servlet-mapping> <!-- end XFire 配置 -->
注意,这里要引入 xfire-spring-1.2.6.jar 包中的 org/codehaus/xfire/spring/xfire.xml ,和配置 XFire的Mapping
3、修改applicationContext.xml
<!-- =================== 通知公告 =================== --> <bean id="iTSMEStandardService" class="com.topinfo.xfire.webserviceImpl.ITSMEStandardServiceImpl"> <property name="slNoticeServiceImpl" ref="slNoticeServiceImpl"></property> </bean> <bean name="WebService" class="org.codehaus.xfire.spring.ServiceBean"> <!-- 业务接口实现类 --> <property name="serviceBean" ref="iTSMEStandardService"/> <!-- 业务接口 --> <property name="serviceClass" value="com.topinfo.xfire.webservice.ITSMEStandardService"/> <property name="inHandlers"> <list> <ref bean="addressingHandler"/> <ref bean="handlerMappingListener"/><!--普通的用户名密码的方式进行WebService的验证--> </list> </property> <property name="namespace" value="http://com.topinfp/iTSMEStandardWebService" ></property> </bean> <bean id="addressingHandler" class="org.codehaus.xfire.addressing.AddressingInHandler"/> <bean id="handlerMappingListener" class="com.topinfo.xfire.webservice.listener.HandlerMappingListener"/>
这里是添加是。校验的 handlerMappingListener ,如果没有,可以去掉,不过,在生产环境下,校验还是必须要有点。是吧!
到现在为止。所有的配置就完成了。接下来。。我们只要编写我们的 接口 、实现类和 校验类了
接口:
package com.topinfo.xfire.webservice; import com.topinfo.xfire.bean.SlNoticeBean; /** *@Description: Web Service 接口 *@Author:杨攀 *@Since:2014年3月26日上午10:49:34 */ public interface ITSMEStandardService { /** *@Description: 同步新增通知公告 *@Author: 杨攀 *@Since: 2014年3月26日上午10:44:39 *@param slNoticeBean *@return - */ public boolean synAddSlNotice(SlNoticeBean slNoticeBean); /** *@Description: 同步修改通知公告 *@Author: 杨攀 *@Since: 2014年3月26日上午10:44:39 *@param slNoticeBean *@return - */ public boolean synUpdateSlNotice(SlNoticeBean slNoticeBean); /** *@Description: 同步删除通知公告 *@Author: 杨攀 *@Since: 2014年3月26日上午10:47:26 *@param slNoticeBeanId *@return */ public boolean synDeleteSlNotice(String slNoticeBeanId); }
实现类:
package com.topinfo.xfire.webserviceImpl; import org.apache.commons.lang3.StringUtils; import com.topinfo.entity.SlNotice; import com.topinfo.libs.BeanUtil; import com.topinfo.service.SlNoticeService; import com.topinfo.xfire.bean.SlNoticeBean; import com.topinfo.xfire.webservice.ITSMEStandardService; public class ITSMEStandardServiceImpl implements ITSMEStandardService { private SlNoticeService slNoticeServiceImpl; public SlNoticeService getSlNoticeServiceImpl() { return slNoticeServiceImpl; } public void setSlNoticeServiceImpl(SlNoticeService slNoticeServiceImpl) { this.slNoticeServiceImpl = slNoticeServiceImpl; } @Override public boolean synAddSlNotice(SlNoticeBean slNoticeBean) { boolean bool = false; if(slNoticeBean != null){ try { SlNotice bean = new SlNotice(); String [] fields = {"id","title","content","type","status","createTime","creator","updateTime","updator"}; //复制 bean 的属性 BeanUtil.copyProperties(slNoticeBean, bean, fields); String uuid = slNoticeServiceImpl.insert(bean); if(StringUtils.isNotBlank(uuid)){ bool = true; } } catch (Exception e) { e.printStackTrace(); } } return bool; } @Override public boolean synUpdateSlNotice(SlNoticeBean slNoticeBean) { boolean bool = false; if(slNoticeBean != null){ try { SlNotice bean = new SlNotice(); String [] fields = {"id","title","content","type","status","createTime","creator","updateTime","updator"}; //复制 bean 的属性 BeanUtil.copyProperties(slNoticeBean, bean, fields); bool = slNoticeServiceImpl.update(bean); } catch (Exception e) { e.printStackTrace(); } } return bool; } @Override public boolean synDeleteSlNotice(String slNoticeBeanId) { boolean bool = false; if(StringUtils.isNotBlank(slNoticeBeanId)){ bool = slNoticeServiceImpl.delete(slNoticeBeanId); } return bool; } }
校验监听类:
package com.topinfo.xfire.webservice.listener; import org.codehaus.xfire.MessageContext; import org.codehaus.xfire.handler.AbstractHandler; import org.jdom.Element; /** * @Description: 监听处理器 * @Author:杨攀 * @Since:2014年3月25日上午11:19:55 */ public class HandlerMappingListener extends AbstractHandler { public void invoke(MessageContext context) throws Exception { // 为SOAP Header构造验证信息 if (context.getInMessage().getHeader() == null) { throw new org.codehaus.xfire.fault.XFireFault("请求必须包含验证信息", org.codehaus.xfire.fault.XFireFault.SENDER); } Element token = context.getInMessage().getHeader().getChild("AuthenticationToken"); if (token == null) { throw new org.codehaus.xfire.fault.XFireFault("请求必须包含身份验证信息", org.codehaus.xfire.fault.XFireFault.SENDER); } String username = token.getChild("Username").getValue(); String password = token.getChild("Password").getValue(); try { // 进行身份验证 ,只有admin/admin 的用户为授权用户 if ("admin".equals(username) && "admin".equals(password)) { System.out.println("身份验证通过"); } else { throw new Exception(); } } catch (Exception e) { throw new org.codehaus.xfire.fault.XFireFault("非法的用户名和密码", org.codehaus.xfire.fault.XFireFault.SENDER); } } }
实体:
package com.topinfo.xfire.bean; import java.io.Serializable; public class SlNoticeBean implements Serializable { /** *@Fields serialVersionUID : */ private static final long serialVersionUID = 6504083322529047064L; /** *主键编号 */ private String id; /** *标题 */ private String title; /** *内容 */ private String content; /** *类型 */ private String type; /** *发布状态 */ private Long status; /** *发布时间 */ private java.util.Date createTime; /** *发布人 */ private String creator; /** *更新时间 */ private java.util.Date updateTime; /** *更新人 */ private String updator; //省略get set 方法 }
注意, 在互联网上面传实体,请先序列化......这个不用多说的吧。
这样, WebService 就完成了,
接下来我们测试一下
运行:访问:http://localhost:8080/ITSMEStandard/webservice/ITSMEStandardService?wsdl
编写客户端:
客户的代码可以有好几种实现
1、 可以通过 wsdl 生产,网上有很多小工具
2、 通过 eclipse 帮我们生产,需要引入插件,这个可以自己百度
3、 自己写,哈哈哈
必须把服务器的 接口 和实体 类打成 jar 包,提供给客户端,
package com.topinfo.test; import java.lang.reflect.Proxy; import java.net.MalformedURLException; import org.codehaus.xfire.client.Client; import org.codehaus.xfire.client.XFireProxy; import org.codehaus.xfire.client.XFireProxyFactory; import org.codehaus.xfire.service.Service; import org.codehaus.xfire.service.binding.ObjectServiceFactory; import com.topinfo.xfire.bean.SlNoticeBean; import com.topinfo.xfire.listener.ClientHandler; import com.topinfo.xfire.webservice.ITSMEStandardService; public class ITSTest { public static void main(String[] args) { // 这里是创建一个service,需要传入一个接口类,因为我们后面必须调用相应的接口方法 Service srcModel = new ObjectServiceFactory().create(ITSMEStandardService.class); // 代理工厂,这里是为了后面创建相应的接口类 // XFireProxyFactory factory = new XFireProxyFactory(XFireFactory.newInstance().getXFire()); XFireProxyFactory factory = new XFireProxyFactory(); String readerServiceUrl = "http://localhost:8080/ITSMEStandard/webservice/ITSMEStandardService"; try { // 利用工厂返回相应的接口类 ITSMEStandardService service = (ITSMEStandardService) factory.create(srcModel, readerServiceUrl); SlNoticeBean slNoticeBean = new SlNoticeBean(); slNoticeBean.setId("F5861A201A167A11E040A8C0E72829D6"); slNoticeBean.setTitle("杨XXXXX网络体系....."); //boolean bool = service.synUpdateSlNotice(slNoticeBean); //在报头加入信息,供安全校验 XFireProxy proxy = (XFireProxy) Proxy.getInvocationHandler(service); Client client = proxy.getClient(); // 发送授权信息 client.addOutHandler(new ClientHandler("admin","admin1")); boolean bool = service.synDeleteSlNotice("F5861A201A167A11E040A8C0E72829D6"); System.out.println(bool); } catch (MalformedURLException e) { e.printStackTrace(); } } }
OK ,,到此结束!
相关推荐
mybatis与spring整合时所依赖的jar包,包括: 1.Mybatis所需的jar包括: ant-1.9.6.jar ant-launcher-1.9.6.jar asm-5.2.jar cglib-3.2.5.jar commons-logging-1.2.jar javassist-3.22.0-CR2.jar log4j-...
6. **配置与整合**: 在整合SSM时,我们需要配置Spring的`beans.xml`和`mybatis-spring.xml`文件,定义数据源、SqlSessionFactory、MapperScannerConfigurer等组件。同时,MyBatis的Mapper接口和XML映射文件也需要...
这个“mybatis与spring整合全部jar包”包含了这三个框架整合所需的所有依赖库,使得开发者可以快速搭建SSM项目。 首先,让我们深入了解一下这三个组件: 1. **Spring**:Spring 是一个全面的Java企业级应用开发...
将Hibernate与Spring整合可以充分利用两者的优点,提高开发效率并降低复杂性。 一、Hibernate概述 Hibernate是Java世界中领先的ORM框架之一,它允许开发者用Java对象来操作数据库记录,而无需编写SQL语句。通过配置...
mybatis与spring整合全部jar包,mybatis与spring整合全部jar包,mybatis与spring整合全部jar包,mybatis与spring整合全部jar包,mybatis与spring整合全部jar包,
mybatis-spring 整合jar包,Spring和MyBatis环境整合mybatis-spring-1.1.1
在标题提到的“mybatis与spring整合全部jar包(包括springmvc)”中,我们关注的重点是这两个框架的集成以及可能包含的Spring MVC部分,这通常涉及到以下几个关键知识点: 1. **MyBatis**:MyBatis是一个优秀的持久层...
在与Spring整合后,可以通过Spring的ApplicationContext来管理SqlSessionFactory和Mapper接口,实现事务的统一管理和DAO的自动注入。 在压缩包子文件的文件名称列表中,虽然只列出了"lib",但我们可以推测,这个...
- `mybatis-spring-x.x.x.jar`:Mybatis与Spring的整合库,提供了与Spring框架集成的接口和类。 - `spring-x.x.x.jar`:Spring的核心库,包含了Spring的IoC和AOP等功能。 - `spring-webmvc-x.x.x.jar`:Spring MVC库...
将Spring与Mybatis整合,可以充分利用两者的优点,构建出高效、灵活的Web应用。 1. **Spring整合Mybatis的基本步骤** - **引入依赖**: 在项目的pom.xml中添加Spring和Mybatis的相关依赖。 - **配置数据源**: ...
在IT行业中,Mybatis与Spring的整合是常见的开发模式,特别是在构建Web项目时。这种整合提供了灵活的数据访问层,使得数据库操作与业务逻辑更加解耦。以下是对"Mybatis与Spring整合创建Web项目"这一主题的详细说明:...
【Servlet与Spring整合详解】 在Java Web开发中,Servlet与Spring框架的整合是常见的实践,尤其是在构建企业级应用时。Spring作为一个强大的IoC(Inversion of Control)和AOP(Aspect Oriented Programming)容器...
Java-Spring 整合是指将 Java 语言与 Spring 框架进行整合,以便更好地开发企业级应用程序。下面我们将对 Java-Spring 整合的相关知识点进行详细讲解。 一、 Spring 框架简介 Spring 框架是一款轻量级的、非侵入式...
将Quartz与Spring整合,可以方便地管理和控制定时任务,同时利用Spring的依赖注入和管理功能,提高代码的可维护性和可测试性。 Quartz的核心概念包括Job、Trigger和Scheduler。Job是实际需要执行的任务,Trigger是...
iBatis和Spring整合 iBatis和Spring整合
Struts技术资料 hibernate技术资料 spring技术资料 ssh整合技术(struts与hibernate整合,struts与spring整合,hibernate与spring整合,struts,hibernate,spring整合)
Spring整合是Java开发中一个广泛讨论的主题,它涉及到Spring框架与其他技术或库的协同工作,以构建高效、可维护的大型应用程序。Spring以其模块化、松耦合的特性,成为了企业级应用开发的事实标准。在本篇内容中,...
在IT行业中,Spring框架与Mybatis的整合是常见的企业级应用开发模式,它结合了Spring的强大功能和Mybatis的灵活性,使得数据访问更加高效。本文将深入探讨如何进行"Spring整合Mybatis"的基础搭建,以及涉及到的相关...
Spring 整合 Flex 的主要目标是简化客户端(Flex)与服务器端(Spring)之间的通信。通过使用 Spring BlazeDS Integration,可以轻松地在 Flex 客户端和 Spring 服务之间建立双向数据绑定,实现高效的远程调用...