WebService学习之三:spring+cxf整合
步骤一:spring项目(java web项目)引入CXF jar包
步骤二:创建webservice服务器
1)创建一个服务接口
- package com.buss.app.login;
- import javax.jws.WebMethod;
- import javax.jws.WebParam;
- import javax.jws.WebResult;
- import javax.jws.WebService;
- /**
- * @author Administrator
- * 备注:targetNamespace为命名空间 默认http://package倒序/
- */
- @WebService(targetNamespace = "http://login.app.buss.com/")
- public interface LoginServiceI
- {
- @WebMethod(operationName="login")
- @WebResult(name="ReturnInfo")
- public String login(@WebParam(name="phone") String phone, @WebParam(name="pwd")String pwd);
- }
2)是接口实现类
有一点注意:CXF不支持复杂类型返回值,现在流行的做法有两种:
返回XML格式或者JSON格式字符串,在客户端使用DOM工具类或者json工具类转换解析,相对于直接返回对象或者集合等复杂数据结构需要客户端引入相应工具库 比较省事
- package com.buss.app.login;
- import java.util.ArrayList;
- import java.util.List;
- import javax.jws.WebService;
- import org.jeecgframework.core.util.LogUtil;
- import com.buss.app.common.ReturnInfo;
- import com.buss.app.login.entity.Student;
- import com.google.gson.Gson;
- @WebService(serviceName = "LoginServiceImpl")
- public class LoginServiceImpl implements LoginServiceI
- {
- public String login(String phone,String pwd)
- {
- LogUtil.info("登录手机号:"+phone+",密码:"+pwd);
- Gson gson = new Gson();
- List<Student> list = new ArrayList<Student>();
- Student s = new Student();
- s.setAddusername("测试");
- s.setJob("科长");
- s.setOrgname("省院");
- Student s1 = new Student();
- s1.setAddusername("测试");
- s1.setJob("科长");
- s1.setOrgname("省院");
- list.add(s);
- list.add(s1);
- ReturnInfo rt = new ReturnInfo();
- rt.setResult(list);
- String json = gson.toJson(rt);
- LogUtil.info("返回对象集合:"+json);
- return json;
- }
- }
3)创建cxf-servlet.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"
- 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">
- <import resource="classpath:META-INF/cxf/cxf.xml" />
- <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
- <!-- 登录验证服务 -->
- <jaxws:endpoint id="LoginServiceI" implementor="com.buss.app.login.LoginServiceImpl" address="/LoginService" />
- </beans>
在spring-mvc.xml中添加引入cxf配置
- <!--集成cxf webservice接口-->
- <import resource="classpath:cxf-servlet.xml" />
4)在web.xml中加入cxf servlet
- <servlet>
- <description>Apache CXF Endpoint</description>
- <display-name>cxf</display-name>
- <servlet-name>cxf</servlet-name>
- <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
- <load-on-startup>2</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>cxf</servlet-name>
- <url-pattern>/cxf/*</url-pattern>
- </servlet-mapping>
至此,web service服务器就创建好了
在浏览器中访问: http://localhost:8080/test/cxf/LoginService?wsdl ,(test是项目名称) 如果出现类似如下信息就配置成功了。
备注:常用注解
@WebService 必须,(name="UserService")可选,配置Service的名称,默认为类名。targetNamespace可选,默认为http:// package的倒序,可在一个自己的Constants里定义统一的namespace.
默认接口的所有方法均输出为WebService。
@WebResult 可选,配置方法的返回值在WSDL的名称,CXF默认为result。
@WebParam 可选,配置参数在WSDL的名称,CX比较笨,不会反射,默认为arg0,arg1....
@WebMethod 可选,有一个方法有此注释,则其他无注释的方法非WebService。
步骤三:创建客户端(根据客户端不同 调用手段也不同,如安卓端、Java端、C#端等)
不同客户端可以百度一下相应的调用方法。
步骤四:测试,使用工具SopeUI测试即可
另外:一种常见的应用场景:Java WEB项目与其他系统整合,java web项目作为客户端调用其他系统。
1、不导包,拼装soap消息, 调用HttpClient 发送get或者post请求服务方的web service ,然后使用dom解析返回soap消息;(常用)
2、一种是导包+wsdl2java 生成客户端,但这样会引入过多jar 重量级
需要配置远程web service代理:
其中自动注入远程ws代理的配置有两种方式:
(1)bean方式,使用factory
- <!-- WebService 客户端 spring 配置文件cxf与Spring集成,cxf里提供了一个工厂类org.apache.cxf.jaxws.JaxWsProxyFactoryBean,
- 可以方便实现的调用WebService。serviceClass属性是接口类,address是webService的路径在其他bean里如果要调用webservice,
- 只要将client这个bean注入到需要使用的bean里。-->
- <bean id="client" class="com.exp.service.outer.HelloWorld" factory-bean="clientFactory" factory-method="create" />
- <bean id="clientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
- <property name="serviceClass" value="com.exp.service.outer.HelloWorld" />
- <property name="address" value="http://localhost:8080/demo/webservice/HelloWorld" />
- </bean>
(2)jaxws:client
WebService学习之三:spring+cxf整合的更多相关文章
- Spring+CXF整合来管理webservice(服务器启动发布webservice)
Spring+CXF整合来管理webservice 实现步骤: 1. 添加cxf.jar 包(集成了Spring.jar.servlet.jar ),spring.jar包 ,serv ...
- WebService之Spring+CXF整合示例
一.Spring+CXF整合示例 WebService是一种跨编程语言.跨操作系统平台的远程调用技术,它是指一个应用程序向外界暴露一个能通过Web调用的API接口,我们把调用这个WebService的 ...
- Spring Boot 项目学习 (四) Spring Boot整合Swagger2自动生成API文档
0 引言 在做服务端开发的时候,难免会涉及到API 接口文档的编写,可以经历过手写API 文档的过程,就会发现,一个自动生成API文档可以提高多少的效率. 以下列举几个手写API 文档的痛点: 文档需 ...
- Elasticsearch学习(3) spring boot整合Elasticsearch的原生方式
前面我们已经介绍了spring boot整合Elasticsearch的jpa方式,这种方式虽然简便,但是依旧无法解决我们较为复杂的业务,所以原生的实现方式学习能够解决这些问题,而原生的学习方式也是E ...
- 【Java Web开发学习】Spring MVC整合WebSocket通信
Spring MVC整合WebSocket通信 目录 ========================================================================= ...
- Elasticsearch学习(1) Spring boot整合Elasticsearch
本文的Spring Boot版本为1.5.9,Elasticsearch版本为2.4.4,话不多说,直接上代码. 一.启动Elasticsearch 在官网上下载Elasticsearch后,打开bi ...
- Elasticsearch学习(4) spring boot整合Elasticsearch的聚合操作
之前已将spring boot原生方式介绍了,接下将结介绍的是Elasticsearch聚合操作.聚合操作一般来说是解决一下复杂的业务,比如mysql中的求和和分组,由于博主踩的坑比较多,所以博客可能 ...
- day63-webservice 11.cxf整合spring
如果我们有Spring配置文件,怎么把WebService整合到Spring里面,用Ioc容器来管理这个Bean. 做项目的时候一般都是分层:Dao层.Service层.Service层要调Dao层, ...
- WebService 学习记录
-------------------------------------------PS:这个WebService 服务必须一直开着,关闭就没法访问了 Web Service 教程 一.webser ...
随机推荐
- shell bash判断文件或文件夹是否存在
#shell判断文件夹是否存在 #如果文件夹不存在,创建文件夹 if [ ! -d "/myfolder" ]; then mkdir /myfolder fi #shell判断文 ...
- python学习中,list/tuple/dict格式化遇到的问题
昨天上了python培训的第一课,学习了基础知识.包括类型和赋值,函数type(),dir(),id(),help()的使用,list/tuple/dict的定义以及内置函数的操作,函数的定义,控制语 ...
- Eclipse中Python插件PyDev的安装与配置流程
安装PyDev插件的两种安装方法: 方法1.下载地址:http://sourceforge.net/projects/pydev/files/,将下载的PyDev解压(目前最新版本 PyDev 4.5 ...
- tranform-scale 缩小元素,移上去文字抖动
元素缩小后,鼠标移上去之后文字会出现抖动, -webkit-transform:scale(0.5); 修复代码如下: *{ -webkit-backface-visibility: hidden; ...
- adb shell settings ....
Android4.2的源码android-17\com\android\commands目录下较之前的版本多了一个settings命令,查看其中的SettingsCmd.java文件,末尾有命令的帮助 ...
- 你用哪种工具进行iOS app自动化功能测试?
原文见http://www.cocoachina.com/applenews/devnews/2013/1111/7332.html
- Java [Leetcode 125]Valid Palindrome
题目描述: Given a string, determine if it is a palindrome, considering only alphanumeric characters and ...
- JavaScript学习笔记(备忘录)
===运算符 判断数值和类型是否相等.如: console.log('s'==='s') //输出trueconsole.log('1'===1) //输出false
- Color Length
题意: 给出两个字符串,求把两字符串组成一个字符串使的字符串中的相同字母的最远距离的和最小. 分析: 本题关键在于怎么计算距离和的方法上.dp[i][j]表示处理到长度i的a串,长度j的b串还需要的计 ...
- IOS 屏幕截图 UIScrollview
//截图UIView:截全图 -(UIImage*)captureView:(UIView *)theView{ CGRect rect = theView.frame; if ([theView i ...