1.创建maven项目 加入pom依赖

<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>apache-cxf</artifactId>
<version>3.0.2</version>
<type>pom</type>
</dependency>

2.编写实体类,接口类与接口实现

User.java

package com.itstudy.domain;

import javax.xml.bind.annotation.*;

@XmlRootElement(name = "User")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "User")
public class User {
@XmlElement(nillable = true)
private Long id; @XmlElement(nillable = true)
private String name; @XmlElement(nillable = true)
private int age; public Long getId() {
return id;
} public void setId(Long id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
}
}

HelloService.java

package com.itstudy.service;

import com.itstudy.domain.User;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import java.util.List; @WebService
public interface HelloService { @WebMethod
public String say(@WebParam(name="name")String name); @WebMethod
public String sayHello(@WebParam(name="user") User user); @WebMethod
public List<User> getList(Long id);
}

HelloServiceImpl.java

package com.itstudy.service.impl;

import com.itstudy.domain.User;
import com.itstudy.service.HelloService; import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import java.util.ArrayList;
import java.util.List; @WebService
public class HelloServiceImpl implements HelloService {
@WebMethod
public String say(@WebParam(name = "name") String name) {
return name + ",您好!";
} @WebMethod
public String sayHello(@WebParam(name = "user") User user) {
return user.getName() + ",您好!";
} @WebMethod
public List<User> getList(Long id) {
List<User> list = new ArrayList<User>();
User user = new User();
Long sid = 1L;
user.setId(sid);
user.setName("张三" + sid);
list.add(user); user = new User();
sid = 2L;
user.setId(sid);
user.setName("张三" + sid);
list.add(user); return list;
}
}

3.启动 服务

package com.itstudy;

import com.itstudy.service.HelloService;
import com.itstudy.service.impl.HelloServiceImpl;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean; public class App {
public static void main(String[] args) {
//启动方式1 此方式接口实现必须添加注解 @WebService @WebMethod等
// System.out.println( "Hello World!" );
// HelloServiceImpl implementor = new HelloServiceImpl();
// String address = "http://localhost:8080/ws/" + HelloService.class.getSimpleName();
// Endpoint.publish(address, implementor); //启动方式2 此方式接口实现不需要添加注解
JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
factory.setServiceClass(HelloService.class);
// 发布接口  
factory.setAddress("http://localhost:8080/ws/" + HelloService.class.getSimpleName());
factory.setServiceBean(new HelloServiceImpl());
factory.create();
      
     //发布多个接口,多定义几个factory即可 }
}

4.动态调用webservice

package com.itstudy;

import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory; public class HelloWorldClient {
public static void main(String[] argv) { JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client client =
dcf.createClient("http://localhost:8080/ws/HelloService?wsdl"); //sayHello为接口中定义的方法名称张三为传递的参数返回一个Object数组
Object[] objects = new Object[0];
try {
objects = client.invoke("getList", 1L);
} catch (Exception e) {
e.printStackTrace();
} //输出调用结果
System.out.println(objects[0]); }
}

总结
1.两种创建方式
  1.1 JaxWsServerFactoryBean启动(接口实现不需要相关注解)
  1.2 Endpoint启动 (接口实现与需要相关注解)
2.三种调用方式
  2.1动态代理
  2.2拿到现有接口与类
  2.3生成相关代理类

参考文档

cxf 发布多个接口

https://blog.csdn.net/qq_21399933/article/details/78818240

cxf 三种发布方式与4种调用方式
https://blog.csdn.net/u011498933/article/details/75355338

cxf 客户端调用2
https://blog.csdn.net/z69183787/article/details/53488887
cxf 客户端调用3
https://my.oschina.net/nba/blog/482117

cxf 安全认证1
https://blog.csdn.net/rangqiwei/article/details/19282271

cxf 安全认证2
https://blog.csdn.net/weixin_41138656/article/details/79393366

cxf实战 创建webservice 与创建restfulapi
https://blog.csdn.net/kongxx/article/details/7534035

java webservice - cxf使用总结 一的更多相关文章

  1. Java WebService 教程系列之 Spring 整合 CXF

    Java WebService 教程系列之 Spring 整合 CXF 一.引入 jar 包 <dependency> <groupId>org.apache.cxf</ ...

  2. 转-JAVA webservice之CXF 范例--http://cxshun.iteye.com/blog/1275408

    JAVA webservice之CXF 博客分类: j2ee相关 昨天我们一起学习了一下xfire,今天我们来看一下CXF,为什么学完那个接着学这个呢.因为CXF是在xfire的基础上实现 的,所以我 ...

  3. Java WebService学习笔记 - Axis(一)

    WebService 简介 实际开发中,很多系统都是基于历史遗留系统进行开发,有时,这些系统基于不同的语言,如C,C++,C#,java,PHP等等.为了实现历史系统的再利用,或向外部程序暴露调用接口 ...

  4. Java WebService 开发简单实例

    Web Service 是一种新的web应用程序分支,他们是自包含.自描述.模块化的应用,可以发布.定位.通过web调用.Web Service可以执行从简单的请求到复杂商务处理的任何功能.一旦部署以 ...

  5. paip.myeclipse7 java webservice 最佳实践o228

    paip.myeclipse7  java webservice 最佳实践o228 java的ws实现方案:jax-ws>>xfire ws的测试工具  webservice测试调用工具W ...

  6. MAXIMO系统 java webservice 中PDA移动应用系统开发

    MAXIMO系统 java webservice 中PDA移动应用系统开发  平时经常用的wince PDA手持设备调用c#写的webservice, 当然PDA也可以调用java webservic ...

  7. c#调用带有安全认证的java webservice

    最近使用c#调用另外一个同事写的java webservice耽误了很多时间,网上资料不太完整,走了很多弯路,希望对大家有帮助. 基本思路是1.拼装soap使用http post ,主要将验证身份信息 ...

  8. 为什么C#动态调用Java的cxf多了bool型参数

    最近的一个项目需要C#调用Java的cxf发布的接口,接口参数文档只给我的是两个long型,但是通过我动态加载发现,参数是四个. 比如接口文档给的接口是 TestFunc(long, long); 而 ...

  9. 主题:Java WebService 简单实例

    链接地址:主题:Java WebService 简单实例    http://www.iteye.com/topic/1135747 前言:朋友们开始以下教程前,请先看第五大点的注意事项,以避免不必要 ...

随机推荐

  1. bzoj4011 [HNOI2015]落忆枫音 拓扑排序+DP

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4011 题解 首先考虑如果没有那么一条被新加进来的奇怪的边的做法. 我们只需要给每一个点挑一个父 ...

  2. flask之日志的配置

    1. 项目中,日志和配置文件都是单独在一个文件夹中,一般log文件夹和config文件夹,两个文件夹和manage.py在同一个目录下. 2. 配置日志前,先给flask装上script脚本扩展,Fl ...

  3. Python---常用的内置模块

    #fsum() 对整个序列求和   返回浮点数 print(math.fsum([1,4.5,5,7])) #sum() python内置求和 print(sum([1,4,5,7])) print( ...

  4. 【JavaScript】对象 obj.name 语法与 obj[name]语法

    obj.name ==> obj["name"]  底层的自动转化,所以直接写 obj["name"] 效率会高一些 var obj = { name: ...

  5. HTML和CSS遇到的细节问题

    一.列表项标记窜出div盒子 列表项标记窜出盒子,是因为设置了 *; } ,消除了<li>元素的默认外边距. 结解决方法:消除*{}选择器或是设置外边距 列表项目标记与边距有关 二.div ...

  6. CSS盒子模型(框模型)

     一.如何理解盒子模型  盒子模型(框模型)是css部分非常重要的一部分知识,CSS在处理网页的时候,认为每个元素都处在一个不可见的盒子中.盒子模型的构想,把所有的元素都想象成盒子,那么对网页进行布局 ...

  7. 开发工具Intellij IDEA:常用快捷键

    重命名:shift + F6 查看Javadoc/详情:ctrl + Q 查找接口的实现类:ctrl + alt + B format代码:ctrl + alt + L 全局查询:ctrl + shi ...

  8. mysql IN操作符 语法

    mysql IN操作符 语法 作用:在 WHERE 子句中规定多个值.深圳大理石平台 语法:SELECT column_name(s) FROM table_name WHERE column_nam ...

  9. 【bzoj3171】[Tjoi2013]循环格

    题目描述: 一个循环格就是一个矩阵,其中所有元素为箭头,指向相邻四个格子.每个元素有一个坐标(行,列),其中左上角元素坐标为(0,0).给定一个起始位置(r,c) ,你可以沿着箭头防线在格子间行走.即 ...

  10. sip/sdp/rtp/rtcp/rtsp间的关系

    用一句简单的话总结:RTSP发起/终结流媒体.RTP传输流媒体数据 .RTCP对RTP进行控制,同步. 转自该博客:http://blog.csdn.net/xdwyyan/article/detai ...