`
haiou33
  • 浏览: 974 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java利用CXF实现webservice

 
阅读更多

一直有想写博客的念头,只是人比较懒,一直没空来执行,最近看了下webservice的使用,多多少少有点收获,我想通过博客来写出自己学到的东西应该是印象深刻些,因此借此来实现写博客的念头,同时也锻炼下自己对现有知识表述能力,记录自己技术成长的道路历程。。。

       写在前面:知识纯属在书上或借鉴别人的博客所学再加上点个人理解,也可能都是借鉴他人的观点根本没有个人的理解。

       来来来。。。开始了。。

      

      谈到webservice大家可能对CXF和axis框架比较熟悉,这两个框架都是从已有的开源项目发展起来的。Axis2是从Axis1.x系列发展而来。CXF则是XFire和Celtix项目的结合产品。Axis2是从底层全部重新实现,使用了新的扩展性更好模块架构。 CXF也重新的深化了XFire和Celtix这两个开发工具,由于公司的开发环境已经集成了Axis2,有现成的调用例子,因此我就对CXF的怎么使用找资料简单粗略的学习了下。

 

       ​利用CXF发布webservice服务 别人可以调用 自己也可以调用

1、CXF中集成了spring 
因此我们可以利用代码来发布服务  也可以通过spring来管理启动发布服务
创建web项目:JSTLTest(项目自己起名)
导入cxf的包:网上有下载。
 
下面介绍通过spring管理来发布webservice
写Spring的配置文件: (我是直接放在src根目录下的,后面的web.xml的路径要与此对应)
<?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:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.0.xsd
    http://cxf.apache.org/jaxws
    http://cxf.apache.org/schemas/jaxws.xsd">
    
    <!-- 
        通过Spring 管理CXF 
          1: 创建业务逻辑Bean(如果要发布WebService则需要添加相应注解) 并且配置到Spring 配置文件中
          2: 通过jaxws标签 发布WS服务, 指定路径, 和输入 输出日志
          3: 配置CXFServlet 指定一个专门用来访问WS的路径
          4: 通过Spring的监听器,加载Spring配置文件       
     -->
    
    <!-- 配置业务逻辑bean -->     
    <bean class="com.webservice.service.StudentServiceImpl" id="studentService" />
    <!-- 配置基于JAX WS的WS服务Bean 
        address: 只需要取一个名称即可,完整的路径: http://localhost:8080/ws/myWs/demo
         http://localhost:8080//JSTLTest//ws//whoWs?wsdl  
        serviceBean="" :不用在指定, 采用引用的方式
    -->
    <jaxws:server address="/whoWs">
        <jaxws:serviceBean>
            <!-- 参照指定的业务逻辑Bean, 这样配置此Bean只创建一次,而且本地和远程都可以访问 -->
            <ref bean="studentService"/>
        </jaxws:serviceBean>
        <!-- 配置输入和输出日志 -->
        <jaxws:inInterceptors>
            <bean class="org.apache.cxf.interceptor.LoggingInInterceptor" />
        </jaxws:inInterceptors>
        <jaxws:outInterceptors>
            <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
        </jaxws:outInterceptors>
    </jaxws:server>
    
</beans> 
 
2、因为没有数据和其他显示层的框架,可以用servlet来处理页面请求
现在来写个service发布服务,编写的不同类,要在上面加注解@WebService才会被当做是服务,并且还要在
web.xml中配置
这里我写的类:StudentServiceImpl .java
package com.webservice.service;
import java.util.ArrayList;
import java.util.List;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import com.webservice.domain.Student;
@WebService
public class StudentServiceImpl {
    private List<Student> studentList = new ArrayList<Student>();
    
    public StudentServiceImpl() {
        super();
        String address = "http://localhost:8080//JSTLTest//ws//whoWs";
        System.out.println("wsdl服务地址:" + address + "?wsdl");
    }
    // 接收的是一个对象
    public void save(Student student) {
        System.out.println("----save----");
        studentList.add(student);
    }
    // 查询所有的学生信息
    public List<Student> query() {
        System.out.println("----query----");
        return studentList;
    }
    // 查询指定学生信息
    public Student get(@WebParam(name="id"int id) {
        System.out.println("----get----");
        for (Student temp : studentList) {
            if (temp.getId() == id) {
                return temp;
            }
        }
        return null;
    }
}
 
3、接下写web.xml的配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>JSTLTest</display-name>
  <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>/ws/*</url-pattern><!--与上面的路径对应起来-->
  </servlet-mapping>
<!--
这是处理请求的servlet,这里我没有给我  因为我没有写前台请求的界面来请求
只是做了个简单的测试
 
 <servlet>
    <servlet-name>WebserviceSer</servlet-name>
    <servlet-class>com.webservice.WebserviceSer</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>WebserviceSer</servlet-name>
    <url-pattern>/servlet/WebserviceSer</url-pattern>
  </servlet-mapping>
-->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <listener>
    <listener-class>  
   com.lisener.TaskLisener 
  </listener-class>
  </listener>
  
</web-app>  
 
4、启动tomcat,这里只测试了tomcat,其他的web容器可以自己试下
通过请求http://localhost:8080//JSTLTest//ws//whoWs?wsdl
来获取wsdl文件内容,内容是从下往上看,服务名和服务中的方法以及方法中参数类型、返回值都会在这个文件中有映射关系。
通过这个wsdl文件内容可以通过CMD命令:wsimport -p com.sinobest.wsservice -s . http://localhost:8080//JSTLTest//ws//whoWs?wsdl获取到发布的服务代码
 
5、第三方怎么来请求这个服务呢?
就是将上面cmd命令生成的代码,放在自己的项目中,使用即可
这里我新建了Ws_client项目,将cmd命令生成的代码放到了这个项目中
然后写了个简单的例子:WSClientTest .java
package com.sinobest.wsclient;
 
import com.sinobest.wsservice.Student;
import com.sinobest.wsservice.StudentServiceImpl;
import com.sinobest.wsservice.StudentServiceImplService;
 
public class WSClientTest {
public static void main(String[] args) {
StudentServiceImplService ws = new StudentServiceImplService();
StudentServiceImpl soap = ws.getStudentServiceImplPort();
 
Student student = new Student();
student.setId(1);
student.setName("aaa");
student.setAge(34);
student.setAddress("天朝帝国");
 
 
soap.save(student);
 
System.out.println(soap.get(1).getName());
}
 
 
}
 
好了,我已经测试通过了。。。
 
 
 
 
 
 
 
 
 
 

      

分享到:
评论

相关推荐

    Java cxf开发webservice,分别有客户端和服务端

    2.用cxf开发webservice 3.这个服务端和客户端的小demo 在服务端 对外开放接口服务,然后在客户端 调用服务端的方法, 实现客户端(一个javaweb项目)对服务端(javaweb项目)方法的调用, 实际上就是发送和接收消息...

    利用cxf实现webservice

    【标题】:“利用CXF实现WebService” 在Java世界中,CXF是一个强大的开源框架,用于构建和开发Web服务。它支持多种Web服务标准,包括SOAP、RESTful API以及WS-*协议栈。CXF使得开发者能够方便地创建和消费Web服务...

    CXF实现WebService详解实例

    本篇文章将详细探讨如何使用CXF实现WebService,并通过实例进行深入解析。 **一、CXF简介** Apache CXF是一个强大的开源工具,它提供了多种方式来创建和使用Web服务,包括SOAP、RESTful API、XML以及JSON等。CXF...

    spring+CXF实现WebService(http+https)

    本教程将深入探讨如何利用Spring和CXF来实现基于HTTP和HTTPS的Web服务,并且将涉及到HTTPS的证书配置。 1. **Spring与CXF结合**: Spring框架提供了灵活的依赖注入和AOP(面向切面编程)特性,可以方便地集成各种...

    基于spring注解的cxf实现webservice

    本文将详细讲解如何基于Spring注解来利用CXF实现Web服务。 首先,我们需要理解Spring注解的基本概念。Spring注解是一种元数据,它可以直接应用于源代码(如类、方法或字段),提供了声明式编程的能力,减少了XML...

    使用CXF和camel-cxf调用webservice

    通过使用camel-cxf,你可以利用Camel的灵活性和路由能力来处理Web服务的调用和响应。 在camel-cxf中,你可以: 1. **定义路由**:使用Camel的DSL(Domain Specific Language)或者XML配置文件,定义从何处获取输入...

    基于CXF实现WebService开发.pdf

    在具体技术实现上,CXF使用了Spring框架,从而使得WebService的开发能够利用Spring的依赖注入、声明式事务等特性,增强了应用的可维护性和扩展性。 总结来说,Apache CXF是一个功能强大的WebService开发框架,它...

    Java调用CXF WebService接口的两种方式实例

    Java调用CXF WebService接口的两种方式实例 Java调用CXF WebService接口是Java开发者在开发过程中经常遇到的问题。今天,我们将讨论Java调用CXF WebService接口的两种方式实例,即静态调用和动态调用。 静态调用 ...

    使用CXF发布WebService

    当我们谈论“使用CXF发布WebService”时,我们实际上是在讨论如何利用Apache CXF框架创建和部署Web服务。Apache CXF是一个开源的Java框架,专门用于构建和消费Web服务,支持多种协议,如SOAP和RESTful。 首先,我们...

    Apache CXF2+Spring2.5轻松实现WebService

    本教程将深入探讨如何利用Apache CXF 2与Spring 2.5来构建和使用WebService。 首先,让我们理解这两个组件的基本概念。Apache CXF是一个全面的服务框架,它支持多种Web服务规范,如SOAP、RESTful、WS-*等。它提供了...

    纯java调用ws-security+CXF实现的webservice安全接口

    本文将深入探讨如何使用CXF框架结合ws-security标准来实现对Java客户端调用Web服务的安全接口。CXF是一个开源的服务框架,它允许开发人员创建和消费各种Web服务,而ws-security(Web Services Security)则是用于...

    SpringBoot框架及CXF发布WebService

    4. **Spring集成**:CXF可以通过Spring的`@WebService`和`@Endpoint`注解来声明服务,利用Spring的依赖注入特性,实现更灵活的服务定义和管理。 **CXF与SpringBoot整合** 在SpringBoot中集成CXF,通常需要以下步骤...

    JDK+CXF实现webservice简单案例

    在这个"JDK+CXF实现webservice简单案例"中,我们将探讨如何利用Java JDK和Apache CXF框架来创建和消费Web服务。 首先,JDK是Java Development Kit的缩写,它是开发和运行Java应用程序的基础。在这里,JDK提供了基础...

    cxf实现webservice的项目实例

    【标题】:CXF实现Web服务(WebService)的项目实例详解 在当今的软件开发中,Web服务扮演着重要的角色,它允许不同系统之间通过网络进行数据交换和功能调用。CXF是一个开源的Java框架,它使得开发和集成Web服务变...

    cxf 开发webservice客户端

    在IT行业中,CXF是一个广泛使用的开源框架,用于开发和实现Web服务,无论是SOAP(简单对象访问协议)还是RESTful风格的服务。本篇文章将详细探讨如何利用CXF框架开发一个Web服务客户端,以及如何进行测试。 一、CXF...

    使用CXF实现WebService

    MyCXFService为WebService服务端,MyCXFClient为客户端调用 ...7、以上第4点为利用Web形式进行调用WebService,还有其它方法调用: 手动执行com.lun.test.Test.java与Test1.java里的main方法,也是调用WebService服务

    在Spring工程里利用CXF实现webservice的demo

    在Spring工程中,利用Apache CXF实现Web服务(WebService)是一项常见的任务,它允许应用程序通过网络交换数据和服务。本教程将深入探讨如何在Spring环境中集成并使用CXF来创建一个简单的WebService示例。 首先,...

    spring整合cxf 实现webservice

    【Spring 整合 CXF 实现 WebService】是将 Apache CXF 框架与 Spring 框架结合,以创建、部署和管理 WebService 的一种方法。Apache CXF 是一个开源服务框架,它允许开发者创建和消费各种 Web 服务,而 Spring 提供...

    WebService CXF 对象传递 附

    例如,如果输入参数是`MyObject`,CXF会利用JAXB将其从XML字符串转换为Java对象。 - **反序列化**:同样,服务方法返回的对象也会被CXF转换为XML,然后发送回客户端。 5. **JAXB的使用** - **注解Java类**:使用`...

Global site tag (gtag.js) - Google Analytics