spring如何集成cxf实现webservice接口功能详解

前言

由于cxf的web项目已经集成了Spring,所以cxf的服务类都是在spring的配置文件中完成的。以下是步骤:

第一步:建立一个web项目。

第二步:准备所有jar包。将cxf_home\lib项目下的所有jar包全部copy到新项目的lib目录下,里面已经包含了spring3.0的jar包。

第三步:在web.xml中配置cxf的核心servlet,CXFServlet。

第四步:创建(最好是Copy)cxf-servlet.xml文件。这是一个spring的配置文件。

1、web.xml中配置servlet

如果没有提供给cxf默认的/WEB-INF/cxf-servlet.xml配置文件,则必须要在spring的配置文件中配置以下三行配置(import)。否则将不能加载名称为cxf的bean.从而启动失败。

2、applicationContext.xml

<!--spring发布webservice服务配置 -->
<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服务 -->
<!-- 统一工号管理接口 -->
<bean id="UnifiedNoServiceBean" class="com.webservice.unifiedno.service.impl.UnifiedNoServiceImpl" />
<jaxws:server id="UnifiedNoService" serviceClass="com.webservice.unifiedno.service.UnifiedNoService" address="/unifiedNoService">
<jaxws:serviceBean>
<ref bean="UnifiedNoServiceBean" />
</jaxws:serviceBean>
</jaxws:server>

注意:

1、<import>的三个文件是否需要全部引入根据cxf框架版本不同而不同

2、address的值为webservice注解的值: @WebService(serviceName = "unifiedNoService")

3、必须要在声明为serviceClass的接口上声明@WebSerive注解,因为,要使用了接口,在接口上添加的注解才会有效。

4、serviceClass:必须为一个接口,并在接口上必须使用@WebService注解否则调用时会抛出异常

5、serviceBean:是实际服务的类,必须是serviceClass的子类,此类上面即可以使用@WebService注解,也可以不使用

6、address:访问地址,省去前面的ip:port,注意在此注册的类,必须要添加@WebService的注解

3、写接口及实现类

启动项目,测试cxf是否配置成功:

访问:http://localhost:8080/ins/services,会列出所有已经发布的webservice接口服务

4、测试

http://localhost:8080/ins/services/unifiedNoService?wsdl

Java项目代码调用服务:

使用纯Java项目调用

1、根据客户端生成的代码来调用。(优选这种方式)

请先生成然后在任意的Java项目中调用 。

2、客户端只拥有一个接口,使用JaxWsProxyFactoryBean来调用。

因为以下使用了JaxWsProxyFactoryBean,所以,仍然需要CXF的环境,而使用此环境就会造成Jar文件的大量冗余,所以大家要谨慎选择。

1、注意,此处所说的是在Java项目中调用Spring的服务,并不是在JavaEE项目中调用。后期将会讲到如何在JavaEE项目中调用。

2、建议从wsdl地址获取接口文件,也仅需要接口文件。

JaxWsProxyFactoryBean client = new JaxWsProxyFactoryBean();
client.setAddress("http://localhost:7777/xcxf2_web/ws/one");
client.setServiceClass(IOneService.class);
IOneService one = client.create(IOneService.class);
String ss = one.sayHi("OK你好");
System.err.println(ss);

在Spring项目中,通过配置文件调用:

以下是使用Spring的配置文件调用:

新建立一个Java项目,并加载cxf的所有包。

只需要生成的接口文件。

在classpath下新建立一个ClientBeans.xml文件.

优点与缺点:

此种情况,适合于一个Javaweb项目已经集成了Spring。并希望通过CXF配置的方式调用Web服务。

此种情况,仍然需要导入CXF的大量jar包。

这种情况也存在一定人优点,如可以将外部的Web服务通过配置文件注入(DI)到Action类中。

说明:

通过<jaxws:client/>来获取WebService,id就不用说了吧。

address是不包含?wsdl的服务地址。

serviceClass是本地的接口名,与服务接口名保持相同才可以。

1、以下是ClientBeans.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:jaxrs="http://cxf.apache.org/jaxrs"
  xmlns:cxf="http://cxf.apache.org/core"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
   http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
   http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
   http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd">
 <jaxws:client id="helloClient"
     address="http://127.0.0.1:9999/cxf2.4_spring_web/ws/helloworld"
     serviceClass="com.itcast.cxf.first.IHelloWorld">
 </jaxws:client>
</beans>

1、以下是CxfJavaClient.java的源代码:

package com.itcast.cxfweb.java.client;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.itcast.cxf.first.IHelloWorld;
/**
 * Java项目的客户端
 * @author wangjianme
 */
public class CxfJavaClient {
 public static void main(String[] args) {
  //读取配置文件
  ApplicationContext ctx =
   new ClassPathXmlApplicationContext("ClientBeans.xml");
  //get到接口类型并调用
  IHelloWorld hello = (IHelloWorld)ctx.getBean("helloClient");
  String str = hello.sayHello("WJ");
  System.err.println(str);
 }
}

在本域使用jquery访问: --查询所有用户:

<script type="text/javascript">
  $(function(){
   $("#btn1").click(function(){
    var url = "http://localhost:7777/ws2/ws/user";
    var soap = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" '+
       'xmlns:q0="http://service.ws2.itcast.cn/" '+
       'xmlns:xsd="http://www.w3.org/2001/XMLSchema" '+
       'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">'+
       '<soapenv:Body><q0:getUsers/></soapenv:Body></soapenv:Envelope>';
    $.ajax({
     url:url,//访问的url
     dataType:'xml',//返回的数据类型
     type:'post',//请求方式
     contentType:'application/soap+xml;charset=UTF-8',
     data:soap,//数据
     success:function(data,status,xhr){
      //对返回后的数据进行解析
      $(data).find("return").each(function(){
       var nm = $(this).find("name").text();
       var age = $(this).find("age").text();
       alert(nm+","+age);
      });
     },
     error:function(xhr,status){
      alert("出错了:"+status);
     }
    });
   });
  });
 </script>

向服务器保存用户:

以下是jsclient.jsp的源代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
 <head>
  <script type="text/javascript"
    src="<c:url value='/js/jquery-1.5.js'/>"></script>
 </head>
 <body>
  <label for="name">姓名:</label>
  <input type="text" id="name" name="name"/>
  <br/>
  <a href="#" id="ok">确定</a>
 </body>
 <script type="text/javascript">
  $(function(){
  $("#ok").click(function(){
   var val = $("#name").val();
   if($.trim(val)==""){
    alert("请输入名称");
    return;
   }
   var str = '<?xml version="1.0" encoding="UTF-8"?>'+
      '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">'+
      '<soap:Body><ns2:sayHello xmlns:ns2="http://first.cxf.itcast.com/">'+
      '<arg0>'+val+'</arg0>'+
      '</ns2:sayHello></soap:Body></soap:Envelope>';
   $.ajax({
    contentType:'application/xml;charset="UTF-8"',
    dataType:'xml',
    type:'post',
    url:'http://localhost:9999/cxf2.4_spring_web/ws/helloworld',  //直接发向这个地址
    data:str,
    success:function(data){
     //$(data).find("return").each(function(){
     // alert($(this).text());
     //});     //使用上面的方法也是可以的
     var ss = $(data).find("return").first().text();
     $("<div>").html(ss)
      .css("border","1px solid blue")
      .css({width:'50%'}).
      appendTo($("body"));
     $("#name").val("");
    }
   },"xml");
  });
  });
 </script>
</html>

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • Spring整合CXF webservice restful实例详解

    webservice restful接口跟soap协议的接口实现大同小异,只是在提供服务的类/接口的注解上存在差异,具体看下面的代码,然后自己对比下就可以了. 用到的基础类 User.java @XmlRootElement(name="User") public class User { private String userName; private String sex; private int age; public User(String userName, String s

  • 详解Spring boot+CXF开发WebService Demo

    最近工作中需要用到webservice,而且结合spring boot进行开发,参照了一些网上的资料,配置过程中出现的了一些问题,于是写了这篇博客,记录一下我这次spring boot+cxf开发的webservice的配置过程,仅供参考. 一.本次开发除了用到spring boot基础jar包外,还用到了cxf相关jar包: <!-- cxf支持 --> <dependency> <groupId>org.apache.cxf</groupId> <

  • Spring Boot 实现Restful webservice服务端示例代码

    1.Spring Boot configurations application.yml spring: profiles: active: dev mvc: favicon: enabled: false datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/wit_neptune?createDatabaseIfNotExist=true&useUnicode=true&

  • spring整合cxf框架实例

    CXF是webService的框架,能够和spring无缝整合 ##服务端编写 1.创建动态web项目 2.导入cxf和spring相关jar包(CXF核心包:cxf-2.4.2.jar) 3.在web.xml中配置CXF框架的核心Servlet <servlet> <servlet-name>cxf</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</s

  • Spring boot 整合CXF开发web service示例

    前言 说起web service最近几年restful大行其道,大有取代传统soap web service的趋势,但是一些特有或相对老旧的系统依然使用了传统的soap web service,例如银行.航空公司的机票查询接口等. 目前就遇到了这种情况,需要在系统中查询第三方提供的soap web service接口,也就是说要将它整合进现有的系统当中. spring整合CXF本来十分简单,但是因为使用了Spring boot,不想用以前xml一堆配置的方式,那么能否按照Spring boot的

  • spring如何集成cxf实现webservice接口功能详解

    前言 由于cxf的web项目已经集成了Spring,所以cxf的服务类都是在spring的配置文件中完成的.以下是步骤: 第一步:建立一个web项目. 第二步:准备所有jar包.将cxf_home\lib项目下的所有jar包全部copy到新项目的lib目录下,里面已经包含了spring3.0的jar包. 第三步:在web.xml中配置cxf的核心servlet,CXFServlet. 第四步:创建(最好是Copy)cxf-servlet.xml文件.这是一个spring的配置文件. 1.web.

  • Spring Boot构建优雅的RESTful接口过程详解

    RESTful 相信在座的各位对于RESTful都是略有耳闻,那么RESTful到底是什么呢? REST(Representational State Transfer)表述性状态转移是一组架构约束条件和原则.满足这些约束条件和原则的应用程序或设计就是RESTful.需要注意的是,REST是设计风格而不是标准.REST通常基于使用HTTP,URI,和XML(标准通用标记语言下的一个子集)以及HTML(标准通用标记语言下的一个应用)这些现有的广泛流行的协议和标准. 也许这段话有些晦涩难懂,换个角度

  • spring boot集成smart-doc自动生成接口文档详解

    目录 前言 功能特性 1 项目中创建 /src/main/resources/smart-doc.json配置文件 2 配置内容如下(指定文档的输出路径) 3 pom.xml下添加配置 4 运行插件 5 找到存放路径浏览器打开 6 测试结果 前言 smart-doc 是一款同时支持 java restful api 和 Apache Dubbo rpc 接口文档生成的工具,smart-doc 颠覆了传统类似 swagger 这种大量采用注解侵入来生成文档的实现方法. smart-doc 完全基于

  • Java 自定义Spring框架与核心功能详解

    目录 Spring核心功能结构 核心容器 spring-beans和spring-core模块 spring-context模块 spring-context-support模块 spring-context-indexer模块 spring-expression模块 AOP和设备支持 数据访问与集成 Web组件 通信报文 集成测试 bean概述 在上一讲中,我们对Spring的基本使用进行了一个简单的回顾,接下来,我们就来看一下Spring核心功能结构. Spring核心功能结构 Spring

  • Go语言利用接口实现链表插入功能详解

    目录 1. 接口定义 1.1 空接口 1.2 实现单一接口 1.3 接口多方法实现 2. 多态 2.1 为不同数据类型的实体提供统一的接口 2.2 多接口的实现 3. 系统接口调用 4. 接口嵌套 5. 类型断言 5.1 断言判断 5.2 多类型判断 6. 使用接口实现链表插入 1. 接口定义 Interface 类型可以定义一组方法,不需要实现,并且不能包含任何的变量,称之为接口 接口不需要显示的实现,只需要一个变量,含有接口类型中的所有方法,那么这个变量就实现了这个接口,如果一个变量含有多个

  • Langchain集成管理prompt功能详解

    目录 LangChain是什么 如何使用 一.需要大语言模型 二.LangChain的模块 1. LLM:从语言模型中输出预测结果 2. Prompt Templates: 管理LLMs的Prompts 3. Chains:将LLMs和prompts结合起来 4. Agents:基于用户输入动态地调用chains 5. Memory 遇到的错误 LangChain是什么 如何使用 经过了chatGPT,大家都知道了prompt-based learning,也明白了prompt在生成式模型的重要

  • SpringBoot集成WebSocket长连接实际应用详解

    前言: 一.WebSocket之初出茅驴 官方定义:WebSocket是一种在单个TCP连接上进行全双工通信的协议.WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据.在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输.是真正的双向平等对话,属于服务器推送技术的一种. 太官方啦,还是博主过来翻译一下吧 :WebSocket技术只需要service和client建立一次连接,就能实现服

  • 微服务架构之服务注册与发现功能详解

    目录 微服务的注册与发现 1.服务注册 2.服务发现 3.注册中心 4.现下的主流注册中心 4.1 Eureka 4.1.1 介绍 4.1.2 整体架构 4.1.3 接入Spring Cloud 4.2 ZooKeeper 4.2.1 介绍 4.2.2 整体架构 4.2.3 接入Dubbo生态 4.3 Consul 4.3.1 介绍 4.3.2 整体架构 4.3.3 生态对接 4.4 总结对比 详解微服务架构及其演进史 微服务全景架构全面瓦解 微服务架构拆分策略详解 微服务的注册与发现 我们前面

  • Spring AOP与AspectJ的对比及应用详解

    目录 1 简介 2 Spring AOP vs AspectJ 2.1 织入方式 2.2 Joinpoints 2.3 性能 3 Spring Boot使用AspectJ 3.1 引入依赖 3.2 被AOP的对象 3.3 配置Aspect 3.4 maven插件 3.5 执行及测试 3.6 一些遇到的错误 4 总结 1 简介 AOP,即面向切面编程是很常用的技术,特别是在Java Web开发中.而最流行的AOP框架分别是Spring AOP和AspectJ. 2 Spring AOP vs As

  • spring对JDBC和orm的支持实例详解

    简介 Spring提供的DAO(数据访问对象)支持主要的目的是便于以标准的方式使用不同的数据访问技术,如JDBC,Hibernate或者JDO等.它不仅可以让你方便地在这些持久化技术间切换, 而且让你在编码的时候不用考虑处理各种技术中特定的异常. 一致的异常层次 Spring提供了一种方便的方法,把特定于某种技术的异常,如SQLException, 转化为自己的异常,这种异常属于以 DataAccessException 为根的异常层次.这些异常封装了原始异常对象,这样就不会有丢失任何错误信息的

随机推荐