Apache CXF学习-创建基于spring的web service

简介:

引入:

我们上述例子展示了如何从java code开始来开发一个基于jaxws的web service并使其对外服务,但是我们创建web service的过程,其实并不是由spring来完成的,我们这里讲展示如何利用spring配置文件来完成这件事情。


实践:

其实很简单,只要稍作修改就可以了。


首先,在web.xml中,我们定义一个spring的应用上下文文件(反正我不太喜欢它默认的applicationContext.xml,因为我们自己起有意义的名字会让应用更加有可控制性并且提高可读性),并且被ContextLoader所载入,为了节省篇幅,我们只贴代码片断了,大家都知道放在哪里。


1
2
3
4
5
6
7
8
9
10
11
12
13
<!-- 这里演示cxf怎么和Spring容器集成,从而利用Spring的配置文件来管理发布的web service -->
     <!-- BEGIN SPRING BEAN CONFIGURATION-->
     < context-param >
         < param-name >contextConfigLocation</ param-name >
         < param-value >WEB-INF/beans.xml</ param-value >
     </ context-param >
                                                                                                                                                                                                                                                                                                                                                                                                                                          
     < listener >
         < listener-class >
         org.springframework.web.context.ContextLoaderListener
         </ listener-class >
     </ listener >
     <!-- END SPRING BEAN CONFIGURATION -->


所以我们必须在WEB-INF/beans.xml中定义一个bean的配置文件,其实大体上和我们上文中的cxf-servlet.xml差不多,只不过我们要导入一些spring配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<? 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.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
<!-- 导入cxf中的spring的一些配置文件,他们都在cxf-<version>.jar文件中 -->
< 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"  />
< jaxws:endpoint
id = "calcService"
implementor = "com.charles.cxfstudy.server.services.CalcServiceImpl"
address = "/calc"  />
</ beans >


从这里可以看出,显著的不同在于,我们用<import>元素导入了3个配置文件,他们都和spring相关,他们中定义的bean才会负责创建和管理web service,这些配置文件都在类路径下的 cxf-<version>.jar的jar包中。

然后我们在下面就可以定义我们的要创建的web service的endpoint了,这里我们用<endpoint>元素来给定要创建的webservice是用具体的什么实现类来创建的,并且绑定到什么路径上,最后赋予一个被bean容器引用的id.


因为在上面配置文件中我们定义了一个CalcServiceImpl,所以我们必须为其写一个服务接口和服务实现类:


服务接口如下,为了简单起见,我们计算服务只提供2个整数的相加运算:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
  * 这是一个web服务接口定义,假设这里定义了一个计算服务,并且简单起见只有加法与水暖
  */
package  com.charles.cxfstudy.server.services;
import  javax.jws.WebParam;
import  javax.jws.WebService;
/**
  * @author charles.wang
  *
  */
@WebService
public  interface  ICalcService {
                                                                                                                                                                                                                                                                    
     /**
      * 计算两个整数类型的和
      * @param val1   第一个运算子
      * @param val2   第二个运算子
      * @return     和
      */
     int  calcSum ( @WebParam (name= "a" ) int  val1, @WebParam (name= "b" ) int  val2);
}

这里我第一次使用了@WebParam的注解,这个目的是为了告诉CXF引擎在生成对应的wsdl文件时候,不要把这些参数映射到参数名val1,val2上,而是映射到这里我用name属性指定的a和b上。


然后就定义一个服务实现类,和以前完全一样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
  * 服务实现类,提供计算服务
  */
package  com.charles.cxfstudy.server.services;
import  javax.jws.WebService;
/**
  * @author charles.wang
  *
  */
@WebService (endpointInterface= "com.charles.cxfstudy.server.services.ICalcService" )
public  class  CalcServiceImpl  implements  ICalcService {
     /**
      * 计算两个整数类型的和
      * @param val1   第一个运算子
      * @param val2   第二个运算子
      * @return     和
      */
     @Override
     public  int  calcSum( int  val1,  int  val2) {
         return  val1+val2;
     }
}


现在就大功告成了,我们用maven构建成二进制war包然后部署到容器中:

wKiom1MFydCCU636AAinmnawPOc998.jpg

为了对比我们这个实验和上面实验,我吧2种方式同时放在一个工程下,如图 /calc的服务发布过程我们采用了spring的机制,而上文实验的/greeting我们没有采用spring,而是用原生的JAX-WS来负责发布,我们还是可以清晰的看到这2个过程是有区别的


最后发布成功,我们通过url   http://localhost:8080/cxf_jaxws_server/services/calc?wsdl 来访问对应的web服务:

wKioL1MFylqRztK-AAkDIvOZt7w427.jpg


事实证明,这是正确的,如果细心点,还可以发现,我们这里的方法"calcSum"定义的参数列表( 位于 <xs:complexType name="calcSum">中,参数名字是a和b而不是val1,val2,这表明我们在服务接口定义中的@WebParam的设定生效了。





本文转自 charles_wang888 51CTO博客,原文链接:http://blog.51cto.com/supercharles888/1361334,如需转载请自行联系原作者
目录
相关文章
|
11月前
|
搜索推荐 JavaScript Java
基于springboot的儿童家长教育能力提升学习系统
本系统聚焦儿童家长教育能力提升,针对家庭教育中理念混乱、时间不足、个性化服务缺失等问题,构建科学、系统、个性化的在线学习平台。融合Spring Boot、Vue等先进技术,整合优质教育资源,提供高效便捷的学习路径,助力家长掌握科学育儿方法,促进儿童全面健康发展,推动家庭和谐与社会进步。
|
安全 关系型数据库 测试技术
学习Python Web开发的安全测试需要具备哪些知识?
学习Python Web开发的安全测试需要具备哪些知识?
456 61
|
监控 Java 应用服务中间件
微服务——SpringBoot使用归纳——为什么学习Spring Boot
本文主要探讨为什么学习Spring Boot。从Spring官方定位来看,Spring Boot旨在快速启动和运行项目,简化配置与编码。其优点包括:1) 良好的基因,继承了Spring框架的优点;2) 简化编码,通过starter依赖减少手动配置;3) 简化配置,采用Java Config方式替代繁琐的XML配置;4) 简化部署,内嵌Tomcat支持一键式启动;5) 简化监控,提供运行期性能参数获取功能。此外,从未来发展趋势看,微服务架构逐渐成为主流,而Spring Boot作为官方推荐技术,与Spring Cloud配合使用,将成为未来发展的重要方向。
634 0
微服务——SpringBoot使用归纳——为什么学习Spring Boot
|
11月前
|
缓存 安全 Java
《深入理解Spring》过滤器(Filter)——Web请求的第一道防线
Servlet过滤器是Java Web核心组件,可在请求进入容器时进行预处理与响应后处理,适用于日志、认证、安全、跨域等全局性功能,具有比Spring拦截器更早的执行时机和更广的覆盖范围。
|
安全 Java 数据库
Spring Boot 框架深入学习示例教程详解
本教程深入讲解Spring Boot框架,先介绍其基础概念与优势,如自动配置、独立运行等。通过搭建项目、配置数据库等步骤展示技术方案,并结合RESTful API开发实例帮助学习。内容涵盖环境搭建、核心组件应用(Spring MVC、Spring Data JPA、Spring Security)及示例项目——在线书店系统,助你掌握Spring Boot开发全流程。代码资源可从[链接](https://pan.quark.cn/s/14fcf913bae6)获取。
2194 3
|
Java Spring
Spring框架的学习与应用
总的来说,Spring框架是Java开发中的一把强大的工具。通过理解其核心概念,通过实践来学习和掌握,你可以充分利用Spring框架的强大功能,提高你的开发效率和代码质量。
387 20
|
安全 Java 数据安全/隐私保护
springSecurity学习之springSecurity过滤web请求
通过配置 Spring Security 的过滤器链,开发者可以灵活地管理 Web 请求的安全性。理解核心过滤器的作用以及如何配置和组合这些过滤器,可以帮助开发者实现复杂的安全需求。通过具体的示例代码,可以清晰地了解 Spring Security 的配置方法和实践。
830 23
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
1250 7
Spring Boot 入门:简化 Java Web 开发的强大工具
|
SQL 安全 前端开发
Web学习_SQL注入_联合查询注入
联合查询注入是一种强大的SQL注入攻击方式,攻击者可以通过 `UNION`语句合并多个查询的结果,从而获取敏感信息。防御SQL注入需要多层次的措施,包括使用预处理语句和参数化查询、输入验证和过滤、最小权限原则、隐藏错误信息以及使用Web应用防火墙。通过这些措施,可以有效地提高Web应用程序的安全性,防止SQL注入攻击。
1057 2
|
Java Kotlin 索引
学习Spring框架特性及jiar包下载
Spring 5作为最新版本,更新了JDK基线至8,修订了核心框架,增强了反射和接口功能,支持响应式编程及Kotlin语言,引入了函数式Web框架,并提升了测试功能。Spring框架可在其官网下载,包括文档、jar包和XML Schema文档,适用于Java SE和Java EE项目。

推荐镜像

更多