步骤一: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=&quot;UserService&quot;)可选,配置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整合的更多相关文章

  1. Spring+CXF整合来管理webservice(服务器启动发布webservice)

    Spring+CXF整合来管理webservice    实现步骤:      1. 添加cxf.jar 包(集成了Spring.jar.servlet.jar ),spring.jar包 ,serv ...

  2. WebService之Spring+CXF整合示例

    一.Spring+CXF整合示例 WebService是一种跨编程语言.跨操作系统平台的远程调用技术,它是指一个应用程序向外界暴露一个能通过Web调用的API接口,我们把调用这个WebService的 ...

  3. Spring Boot 项目学习 (四) Spring Boot整合Swagger2自动生成API文档

    0 引言 在做服务端开发的时候,难免会涉及到API 接口文档的编写,可以经历过手写API 文档的过程,就会发现,一个自动生成API文档可以提高多少的效率. 以下列举几个手写API 文档的痛点: 文档需 ...

  4. Elasticsearch学习(3) spring boot整合Elasticsearch的原生方式

    前面我们已经介绍了spring boot整合Elasticsearch的jpa方式,这种方式虽然简便,但是依旧无法解决我们较为复杂的业务,所以原生的实现方式学习能够解决这些问题,而原生的学习方式也是E ...

  5. 【Java Web开发学习】Spring MVC整合WebSocket通信

    Spring MVC整合WebSocket通信 目录 ========================================================================= ...

  6. Elasticsearch学习(1) Spring boot整合Elasticsearch

    本文的Spring Boot版本为1.5.9,Elasticsearch版本为2.4.4,话不多说,直接上代码. 一.启动Elasticsearch 在官网上下载Elasticsearch后,打开bi ...

  7. Elasticsearch学习(4) spring boot整合Elasticsearch的聚合操作

    之前已将spring boot原生方式介绍了,接下将结介绍的是Elasticsearch聚合操作.聚合操作一般来说是解决一下复杂的业务,比如mysql中的求和和分组,由于博主踩的坑比较多,所以博客可能 ...

  8. day63-webservice 11.cxf整合spring

    如果我们有Spring配置文件,怎么把WebService整合到Spring里面,用Ioc容器来管理这个Bean. 做项目的时候一般都是分层:Dao层.Service层.Service层要调Dao层, ...

  9. WebService 学习记录

    -------------------------------------------PS:这个WebService 服务必须一直开着,关闭就没法访问了 Web Service 教程 一.webser ...

随机推荐

  1. [置顶] android 与JavaScript的互相调用

    1.html代码 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> ...

  2. WIN32编程杂记(一)

    1.UNREFERENCED_PARAMETER的用处 作用:告诉编译器,已经使用了该变量,不必检测警告! 在VC编译器下,如果您用最高级别进行编译,编译器就会很苛刻地指出您的非常细小的警告.当你生命 ...

  3. 解决eclipse maven 项目重新下载包这个问题

    问题:eclipse项目使用maven下载依赖包,但是有时候断网什么来着就不会自动下载了,挺蛋疼了. 所以,需要我们重新更新项目下载呢. 首先是要在maven的conf文件下setting.xml配置 ...

  4. TeeChart的X轴为时间,多个Y轴的显示

    最后上代码 public partial class Test : Form { private TChart tChart = new TChart(); ; public Test() { Ini ...

  5. tomcat发布web service教程

    这几天一直在准备找工作,自学了关于web service的一些基本的内容,也遇到了不少问题.现在就把我自己学到的知识和大家分享一下,由于是初学,所以有什么错误的地方请大家帮忙指正,感激不尽~~!! 1 ...

  6. iOS开发:在Swift中调用oc库

    先列举这个工程中用到的oc源码库: MBProgressHUD:半透明提示器,Loading动画等 SDWebImage:图片下载和缓存的库 MJRefresh: 下拉刷新,上拉加载 Alamofir ...

  7. UVa 11774 (置换 找规律) Doom's Day

    我看大多数人的博客只说了一句:找规律得答案为(n + m) / gcd(n, m) 不过神题的题解还须神人写.. We can associate at each cell a base 3-numb ...

  8. UVa 1220 (树的最大独立集) Party at Hali-Bula

    题意: 有一棵树,选出尽可能多的节点是的两两节点不相邻,即每个节点和他的子节点只能选一个.求符合方案的最大节点数,并最优方案判断是否唯一. 分析: d(u, 0)表示以u为根的子树中,不选u节点能得到 ...

  9. 图像、帧、片、NALU

    图像.帧.片.NALU 是学习 H.264 的人常常感到困惑的一些概念,我在这里对自己的理解做一些阐述,欢迎大家讨论: H.264 是一次概念的革新,它打破常规,完全没有 I 帧.P帧.B 帧的概念, ...

  10. Library cache lock/pin详解

    Library cache lock/pin 一.概述 ---本文是网络资料加metalink 等整理得来一个实例中的library cache包括了不同类型对象的描述,如:游标,索引,表,视图,过程 ...