`

WebService CXF学习(高级篇2):CXF+Spring+Hibernate

 
阅读更多

前一节仅仅只讲了与Spring整合,没有涉及到数据库,而且是直接将Java象传递到服务端。这一节我起到一个回顾前面章节的作用。用在客户端运用JABX将JAVA对象编组成XML文件,在客户端将XML解组成JAVA并存入数据库。下面我们就着手开发这个Demo: 
    服务端开发 
    第一步,编写数据资源层相关接口 
    DAO编写: 
   

Java代码  收藏代码
  1. public interface HibernateDao {  
  2.       
  3.     public void save(UserInfo object);  
  4.     public void delete(UserInfo object);  
  5.     public void update(UserInfo object);  
  6.     public UserInfo get(int id);  
  7. }  
  8.       



    DAO实现类: 

Java代码  收藏代码
  1. public class HibernateDaoImpl extends HibernateDaoSupport implements HibernateDao {  
  2.   
  3.     public void delete(UserInfo object) {  
  4.         this.getHibernateTemplate().delete(object);  
  5.     }  
  6.   
  7.     public void save(UserInfo object) {  
  8.         this.getHibernateTemplate().save(object);  
  9.     }  
  10.   
  11.     public void update(UserInfo object) {  
  12.         this.getHibernateTemplate().update(object);  
  13.     }  
  14.   
  15.     public UserInfo get(int id) {  
  16.         return (UserInfo) this.getHibernateTemplate().get(UserInfo.class, id);  
  17.     }  
  18.   
  19. }  


      实体对象: 

Java代码  收藏代码
  1. @Entity  
  2. @Table(name = "userinfo")  
  3. public class UserInfo implements java.io.Serializable {  
  4.   
  5.     private static final long serialVersionUID = 2281022190032353574L;  
  6.       
  7.     @Id  
  8.     @GeneratedValue(strategy = GenerationType.IDENTITY)  
  9.     private Integer id;  
  10.     private String name;  
  11.     private Integer age;  
  12.     private Integer address;  
  13.   
  14.     public UserInfo() {  
  15.     }  
  16.   
  17.     public UserInfo(String name, Integer age) {  
  18.         this.name = name;  
  19.         this.age = age;  
  20.     }  
  21.   
  22.     public UserInfo(String name, Integer age, Integer address) {  
  23.         this.name = name;  
  24.         this.age = age;  
  25.         this.address = address;  
  26.     }  
  27.   
  28.     public Integer getId() {  
  29.         return this.id;  
  30.     }  
  31.   
  32.     public void setId(Integer id) {  
  33.         this.id = id;  
  34.     }  
  35.   
  36.     public String getName() {  
  37.         return this.name;  
  38.     }  
  39.   
  40.     public void setName(String name) {  
  41.         this.name = name;  
  42.     }  
  43.   
  44.     public Integer getAge() {  
  45.         return this.age;  
  46.     }  
  47.   
  48.     public void setAge(Integer age) {  
  49.         this.age = age;  
  50.     }  
  51.   
  52.     public Integer getAddress() {  
  53.         return this.address;  
  54.     }  
  55.   
  56.     public void setAddress(Integer address) {  
  57.         this.address = address;  
  58.     }  
  59.   
  60. }  



      第二步:业务逻辑层接口编写 
      业务逻辑接口: 

Java代码  收藏代码
  1. @WebService  
  2. public interface IService {  
  3.   
  4.     //public void save(@WebParam(name="info")String xml);  
  5.     public void save(@WebParam(name="dto")UserInfoDTO dto,@WebParam(name="flag")boolean flag);  
  6.     public void update(@WebParam(name="info")String xml);  
  7.     public void delete(@WebParam(name="id")int id);  
  8.     public @WebResult(name="String")String get(@WebParam(name="id")int id);  
  9. }  


     接口实现类: 

Java代码  收藏代码
  1. @WebService  
  2. public class ServiceImpl implements IService {  
  3.     private Logger log = LoggerFactory.getLogger(ServiceImpl.class);  
  4.     private HibernateDao dao;  
  5.       
  6. //  public void setDao(HibernateDao dao) {  
  7. //      this.dao = dao;  
  8. //  }  
  9.   
  10.     public void delete(int id) {  
  11.         log.info("delete id is {} user"+id);  
  12.         //UserInfo userInfo = (UserInfo)object;  
  13.         //log.info("this username is:"+userInfo.getName());  
  14.         //log.info("delete {} information..."+userInfo.getName());  
  15.         //dao.delete(userInfo);  
  16.     }  
  17.   
  18. //  public void save(String xml) {  
  19. //      //UserInfo userInfo = (UserInfo)object;  
  20. //      log.info("add {} user..."+xml);  
  21. //      //dao.save(userInfo);  
  22. //      System.out.println("ssss");  
  23. //  }  
  24.       
  25.     public void save(UserInfoDTO dto,boolean flag) {  
  26.         System.out.println("name:"+dto.getName());  
  27.     }  
  28.   
  29.     public void update(String xml){  
  30.         ApplicationContext context = new ClassPathXmlApplicationContext(  
  31.         "applicationContext-resources.xml");  
  32.         this.dao = (HibernateDao)context.getBean("dao");  
  33.         try {  
  34.             JAXBContext jaxbContext = JAXBContext.newInstance("com.itdcl.model");  
  35.             Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();  
  36.             StringReader reader = new StringReader(xml);  
  37.             Customers cus = (Customers)unmarshaller.unmarshal(reader);  
  38.             Customer cust = cus.getCustomer();  
  39.               
  40.             UserInfo userInfo = new UserInfo();  
  41.             System.out.println("Address:"+cust.getAddress());  
  42.             userInfo.setAddress(cust.getAddress());  
  43.             System.out.println("Age:"+cust.getAge());  
  44.             userInfo.setAge(Integer.valueOf(cust.getAge()));  
  45.             System.out.println("Name:"+cust.getName());  
  46.             //userInfo.setId(2);  
  47.             userInfo.setName(cust.getName());  
  48.               
  49.             dao.save(userInfo);  
  50.         } catch (JAXBException e) {  
  51.             e.printStackTrace();  
  52.         }  
  53.           
  54.     }  
  55.       
  56.     public String get(int id){  
  57.         //return dao.get(id);  
  58.         return null;  
  59.     }  
  60. }  



     DAO与Service接口配置: 

Java代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xmlns:aop="http://www.springframework.org/schema/aop"  
  5.     xmlns:tx="http://www.springframework.org/schema/tx"  
  6.     xmlns:jaxws="http://cxf.apache.org/jaxws"  
  7.     xsi:schemaLocation="  
  8.     http://cxf.apache.org/jaxws   
  9.     http://cxf.apache.org/schemas/jaxws.xsd  
  10.     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd  
  11.     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd  
  12.     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">  
  13.   
  14.     <!--*******************Hibernate数据库持久层配置文件***********************-->  
  15.     <bean id="propertyConfigurer"  
  16.         class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
  17.         <property name="locations">  
  18.             <list>  
  19.                 <value>classpath:jdbc.properties</value>  
  20.             </list>  
  21.         </property>  
  22.     </bean>  
  23.   
  24.     <bean id="dataSource"  
  25.         class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
  26.         <property name="driverClassName" value="${driverClassName}" />  
  27.         <property name="url" value="${jdbc.url}" />  
  28.         <property name="username" value="${jdbc.username}" />  
  29.         <property name="password" value="${jdbc.password}" />  
  30.     </bean>  
  31.   
  32.     <bean id="sessionFactory"  
  33.         class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">  
  34.         <property name="dataSource">  
  35.             <ref local="dataSource" />  
  36.         </property>  
  37.         <property name="hibernateProperties">  
  38.             <props>  
  39.                 <prop key="hibernate.dialect">  
  40.                     ${hibernate.dialect}  
  41.                 </prop>  
  42.                 <prop key="hibernate.show_sql">${show_sql}</prop>  
  43.                 <prop key="hibernate.format_sql">${format_sql}</prop>  
  44.                 <!-- 缓存设置 -->  
  45.                 <prop key="cache.use_query_cache">  
  46.                     ${cache.use_query_cache}  
  47.                 </prop>  
  48.                 <prop key="cache.use_second_level_cache">  
  49.                     ${cache.use_second_level_cache}  
  50.                 </prop>  
  51.                 <prop key="cache.provider_class">  
  52.                     ${cache.provider_class}  
  53.                 </prop>  
  54.   
  55.                 <!-- C3P0连接池配置 -->  
  56.                 <prop key="c3p0.acquire_increment">  
  57.                     ${c3p0.acquire_increment}  
  58.                 </prop>  
  59.                 <prop key="c3p0.max_statements">  
  60.                     ${c3p0.max_statements}  
  61.                 </prop>  
  62.                 <prop key="c3p0.min_size">${c3p0.min_size}</prop>  
  63.                 <prop key="c3p0.max_size">${c3p0.max_size}</prop>  
  64.                 <prop key="c3p0.timeout">${c3p0.timeout}</prop>  
  65.                 <prop key="c3p0.idle_test_period">  
  66.                     ${c3p0.idle_test_period}  
  67.                 </prop>  
  68.             </props>  
  69.         </property>  
  70.         <property name="namingStrategy">  
  71.             <bean class="org.hibernate.cfg.ImprovedNamingStrategy" />  
  72.         </property>  
  73.         <property name="packagesToScan" value="com.itdcl.pojo" />  
  74.     </bean>  
  75.   
  76.     <bean id="dao" class="com.itdcl.dao.HibernateDaoImpl">  
  77.         <property name="sessionFactory" ref="sessionFactory" />  
  78.     </bean>  
  79. </beans>  



     WebService接口发布: 

Java代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xmlns:jaxws="http://cxf.apache.org/jaxws"  
  5.     xsi:schemaLocation="  
  6.         http://www.springframework.org/schema/beans   
  7.         http://www.springframework.org/schema/beans/spring-beans-2.0.xsd  
  8.         http://cxf.apache.org/jaxws   
  9.         http://cxf.apache.org/schemas/jaxws.xsd">  
  10.     <import resource="classpath:META-INF/cxf/cxf.xml" />  
  11.     <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />  
  12.     <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />  
  13.   
  14.     <bean id="serverUserInfo" class="com.itdcl.model.UserInfoDTO" />  
  15.     <jaxws:endpoint id="helloWorld"  
  16.         implementor="com.itdcl.service.HelloWorldImpl" address="/HelloWorld" />  
  17.   
  18.     <jaxws:endpoint id="myTest"  
  19.         implementor="com.itdcl.service.MyTestImpl" address="/MyTest" />  
  20.   
  21.     <jaxws:endpoint id="service"  
  22.         implementor="com.itdcl.service.ServiceImpl" address="/Service">  
  23.         <!--  jaxws:serviceFactory>  
  24.             <ref bean="jaxWsServiceFactoryBean" />  
  25.         </jaxws:serviceFactory>-->  
  26.     </jaxws:endpoint>  
  27.   
  28.     <bean id="jaxWsServiceFactoryBean"  
  29.         class="org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean">  
  30.         <property name="wrapped" value="true" />  
  31.         <property name="dataBinding" ref="aegisBean" />  
  32.     </bean>  
  33.   
  34.     <bean id="aegisBean"  
  35.         class="org.apache.cxf.aegis.databinding.AegisDatabinding" />  
  36. </beans>  



    第三步:服务端程序编写了,打包部署 

    客户端开发 
    第一步:WebService客户端生成,可以手工编写。这里我就通过配置Ant文件来生成WebService客户端: 

Java代码  收藏代码
  1. <?xml version="1.0"?>  
  2. <project name="cxf" basedir="." default="usage">  
  3.     <property name="webroot.dir" value="E:/workspace3/CXFSpring" />  
  4.     <!-- webservice接口 -->  
  5.     <property name="target.class" value="com.itdcl.service.IService" />  
  6.     <property name="wsdl.name" value="Service.wsdl" />  
  7.     <property name="src.dir" value="src" />  
  8.     <property name="client.dir" value="client" />  
  9.     <property name="server.dir" value="server" />  
  10.     <property name="compile.dir" value="${webroot.dir}/bin" />  
  11.   
  12.     <target name="usage">  
  13.         <echo  
  14.             message="java2wsdl         -->java文件生成wsdl文件,java2wsdl -Ddir=com/starit/cxf/java2wsdl -Dsrc=com.starit.cxf.java2wsdl.Hello" />  
  15.         <echo  
  16.             message="wsdl2javaClient       -->java文件生成client,java2wsdl -Ddir=com/starit/cxf/java2wsdl -Dwsdl=hello.wsdl" />  
  17.     </target>  
  18.     <target name="java2wsdl">  
  19.         <echo message="生成wsdl文件" />  
  20.         <exec dir="${compile.dir}" executable="cmd.exe">  
  21.             <arg line="/c java2ws" />  
  22.             <arg line="-o ${wsdl.name} -wsdl ${target.class}" />  
  23.         </exec>  
  24.         <!-- copy资源文件 -->  
  25.         <move todir="${src.dir}" preservelastmodified="true">  
  26.             <fileset dir="${compile.dir}">  
  27.                 <include name="**/*.wsdl" />  
  28.             </fileset>  
  29.         </move>  
  30.     </target>  
  31.   
  32.     <target name="wsdl2javaClient">  
  33.         <echo message="生成java client文件" />  
  34.         <mkdir dir="${client.dir}" />  
  35.         <exec dir="." executable="cmd.exe">  
  36.             <arg line="/c wsdl2java" />  
  37.             <!-- 生成的java所存目录 -->  
  38.             <arg line="-d ${client.dir}"/>  
  39.             <!-- wsdl文件所在路径 -->  
  40.             <arg line="-client src\*.wsdl" />  
  41.         </exec>  
  42.     </target>  
  43. </project>  



    第二步:WebService接口注册配置 

Java代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xmlns:jaxws="http://cxf.apache.org/jaxws"  
  5.     xsi:schemaLocation="  
  6.         http://www.springframework.org/schema/beans   
  7.         http://www.springframework.org/schema/beans/spring-beans-2.0.xsd  
  8.         http://cxf.apache.org/jaxws   
  9.         http://cxf.apache.org/schemas/jaxws.xsd">  
  10.   
  11.     <!--  jaxws:client id="helloWorldClient"  
  12.         address="http://localhost:9999/cxf/HelloWorld"  
  13.         serviceClass="com.itdcl.service.IHelloWorld" />-->  
  14.   
  15.     <!--  jaxws:client id="myTestClient"  
  16.         address="http://localhost:9999/cxf/MyTest"  
  17.         serviceClass="com.itdcl.service.IMyTest" />-->  
  18.   
  19.     <jaxws:client id="service"  
  20.         address="http://localhost:9999/cxf/Service"  
  21.         serviceClass="com.itdcl.service.IService" />  
  22. </beans>  


     
    剩下的事就测试我们整合是否成功了,编写一个JUnit测试类或写一个Main函数测试一下。 

Java代码  收藏代码
  1. public class JaxbSampleClient {  
  2.     private final static String MODEL = "com.itdcl.model";  
  3.     public static void main(String[] args) throws FileNotFoundException, JAXBException, ParserConfigurationException, TransformerException {  
  4.         ApplicationContext context = new ClassPathXmlApplicationContext(  
  5.                 "beans.xml");  
  6.         IService service = (IService) context.getBean("service");  
  7.           
  8.           
  9.         ObjectFactory factory = new ObjectFactory();  
  10.         Customer customer = factory.createCustomer();  
  11.         customer.setId(1);  
  12.         customer.setAge("26");  
  13.         customer.setName("Josen");  
  14.         customer.setAddress(100);  
  15.   
  16.         Customers customers = factory.createCustomers();  
  17.         customers.setCustomer(customer);  
  18.   
  19.         DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();  
  20.         dbf.setNamespaceAware(true);  
  21.         DocumentBuilder db = dbf.newDocumentBuilder();  
  22.         Document doc = db.newDocument();  
  23.   
  24.         // 转换  
  25.         JAXBContext jaxbContext = JAXBContext.newInstance(MODEL);  
  26.         Marshaller marshaller = jaxbContext.createMarshaller();  
  27.         //将customers数据与doc绑定  
  28.         marshaller.marshal(customers, doc);  
  29.           
  30.         DOMSource domSource = new DOMSource(doc);  
  31.         StringWriter writer = new StringWriter();  
  32.         StreamResult result = new StreamResult(writer);  
  33.         TransformerFactory tf = TransformerFactory.newInstance();  
  34.         Transformer transformer = tf.newTransformer();  
  35.         transformer.transform(domSource, result);  
  36.         String xmlString = writer.toString();  
  37.         //System.out.println(xmlString);  
  38.           
  39.         service.update(xmlString);  
  40.     }  
  41.   
  42. }  
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    CXF+Spring+Hibernate实现WebService

    在IT行业中,构建Web服务是常见的任务之一,而CXF、Spring和Hibernate是Java领域内常用的三大框架,它们各自在不同的层面上发挥着关键作用。本项目通过整合这三者来实现一个基于SOAP协议的WebService,以提供数据...

    WebService CXF学习文档

    做开发时,查了大量资料,发现一比较全面的资料,分享一下!...WebService CXF学习——高级篇(一)(二) 1.整合Spring框架 2.CXF+Spring+Hibernate 3.WS-Security WebService CXF学习——JAXB剖析

    WebService CXF Spring Hibernate

    【WebService CXF Spring Hibernate】整合教程 在现代企业级应用开发中,集成各种技术框架以实现高效、可扩展和灵活的解决方案是常见的实践。本教程将深入探讨如何将`WebService`(基于SOAP协议的服务)与Java开发...

    cxf+spring+hibernate集成整合jar包

    1. **配置Spring**:首先,需要在Spring配置文件中定义数据源、SessionFactory(Hibernate的配置)以及CXF的WebService配置。这通常涉及到bean的定义,包括数据访问对象(DAOs)、业务逻辑层(Service层)和Web服务...

    cxf+hibernate3.0+spring3.0 完整整合代码实现

    【标题】:“cxf+hibernate3.0+spring3.0 完整整合代码实现” 【描述】:“此项目实现了将CXF、Hibernate3.0和Spring3.0这三个开源框架集成到一起,提供了在WebLogic和Tomcat两种应用服务器上的无缝兼容。” ...

    springMVC+hibernate+webservice

    【标题】"SpringMVC+Hibernate+WebService"是一个常见的企业级应用开发框架组合,用于构建高效、可扩展的Web应用程序。SpringMVC是Spring框架的一部分,负责处理HTTP请求和响应,提供模型-视图-控制器(MVC)架构。...

    CXF spring Hibernate 搭建webservice

    【标题】"CXF Spring Hibernate 搭建Web服务" 在IT行业中,Web服务是一种用于应用程序之间通信的技术,它允许不同系统之间的数据交换。本项目是关于如何利用Apache CXF、Spring框架和Hibernate ORM工具来构建一个...

    spring+hibernate+struts2+webservice示例

    这是个采用apache cxf实现webservice的示例,主要由spring整合hibernate、struts2实现webservice,里面struts2用到得较少……对于学习很有帮助,另外我觉得若是初学者,不过采用那方式,现在按照套方案做熟练后再去...

    spring+hibernate+struts+XFire的webService实例

    本实例"Spring+Hibernate+Struts+XFire的WebService"提供了一个全面的框架整合,用于创建功能丰富的Web服务。以下将详细解析这个实例所涉及的技术点: 1. **Spring框架**:Spring是一个开源的Java平台,它为开发...

    struts2+spring3+hibernate4+cxf2.7搭建webservice实例

    是eclipse导出的war文件,包含了资源。开发环境jdk1.7 tomcat7。 通过了测试,对应的文档:http://blog.csdn.net/biboheart/article/details/9148651, 有文档了,这里就不多说了。

    Xfire配置Web Service+Spring+Hibernate详细配置流程

    然后,定义一个服务接口和实现,使用Spring的`@WebService`注解标记接口,`@Endpoint`注解标记服务实现类。同时,配置WSDL文件生成和发布,以便客户端能够发现和调用服务。 6. **测试与调试**: 使用JUnit进行单元...

    cxf+spring使用经验

    【cxf+spring 使用经验】 Apache CXF 是一个开源的 Web 服务框架,它整合了 Celtix 和 XFire 两大项目的优势,提供了全面的 JAX-WS 支持,允许开发者通过 Code First 或 WSDL First 的方式来创建和消费 Web 服务。...

    spring集成cxf,server发布webservice,client调用webservice

    使用spring集成cxf,在两个web ...server端使用spring+springmvc+mybatis+cxf,client端使用struts2+spring+hibernate+cxf 两个工程均为myeclipse project,包含所有除myeclipse自带以外所有jar 内附 使用文档,数据库脚本

    webservice提供数据访问spring+hibernate

    1. **设置项目结构**:创建Maven或Gradle项目,引入Spring、Hibernate和CXF(用于构建Web服务)的相关依赖。 2. **配置Spring**:编写Spring配置文件,配置DataSource、SessionFactory以及事务管理器。使用`&lt;tx:...

    Weblogic92+CXF+XDoclet+Spring轻松搞定webservice 例子

    XDoclet是一个基于JavaDoc的代码生成工具,它可以自动根据Java源代码中的特定注解生成如EJB接口、Hibernate映射文件、Spring配置文件等。在本示例中,XDoclet可能被用来自动生成Spring配置和Web服务相关的接口及实现...

    springmvc_cxf_hibernate.zip

    总的来说,"springmvc_cxf_hibernate.zip"是一个展示Spring MVC、CXF和Hibernate集成的实践案例,对于想要提升企业级Web应用开发技能的学习者来说,这是一个宝贵的学习资源。通过深入研究这个项目,开发者不仅可以...

    CXF 一个完整的webService(整合客户端和服务端)

    CXF可与其他Java EE技术如Spring、Hibernate等无缝集成,提供更强大的功能。例如,通过Spring容器管理CXF服务,可以实现依赖注入和事务管理。 总结,CXF作为一个强大的Web服务框架,提供了从服务端到客户端的全方位...

    springMVC(4.0.3.RELEASE) + hibernate(4.3.5.Final) + CXF(2.6.8)+ mysql + jquery

    本项目结合springMVC(4.0.3.RELEASE) + spring + hibernate(4.3.5.Final) + CXF(2.6.8)+ mysql + jquery等技术,并以Maven形式实现。具体包含以下主要功能点: 1.用CXF实现Webservice和Restful服务 2.分别使用...

    ssh2+cxf搭建webservice实例

    SSH(Struts2、Spring、Hibernate)是一个常见的 Java Web 开发框架组合,而 CXF 是一个用于构建和开发 Web 服务的开源框架。本教程将详细介绍如何在 SSH 项目中集成 CXF 来创建和消费 WebService。 **1. 项目环境*...

Global site tag (gtag.js) - Google Analytics