文档章节

一个WebService入门实例

蜡笔小小小新
 蜡笔小小小新
发布于 2015/12/26 15:45
字数 1308
阅读 136
收藏 13
点赞 0
评论 0

1Web Service基本概念和CXF

Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。是:通过SOAP在 Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册。

XML:(Extensible Markup Language)扩展型可标记语言。面向短期的临时数据处理、面向万维网络,是Soap的基础。

Soap:(Simple Object Access Protocol)简单对象存取协议。是XML Web Service 的通信协议。当用户通过UDDI找到你的WSDL描述文档后,他通过可以SOAP调用你建立的Web服务中的一个或多个操作。SOAP是XML文档形式的 调用方法的规范,它可以支持不同的底层接口,像HTTP(S)或者SMTP。

WSDL:(Web Services Description Language) WSDL 文件是一个 XML 文档,用于说明一组 SOAP 消息以及如何交换这些消息。大多数情况下由软件自动生成和使用。

UDDI (Universal Description, Discovery, and Integration) 是一个主要针对Web服务供应商和使用者的新项目。在用户能够调用Web服务之前,必须确定这个服务内包含哪些商务方法,找到被调用的接口定义,还要在服 务端来编制软件,UDDI是一种根据描述文档来引导系统查找相应服务的机制。UDDI利用SOAP消息机制(标准的XML/HTTP)来发布,编辑,浏览 以及查找注册信息。它采用XML格式来封装各种不同类型的数据,并且发送到注册中心或者由注册中心来返回需要的数据。

Apache CXF一个开源的Service框架,它实现了JCP与Web Service中一些重要标准。CXF简化了构造,集成,面 向服务架构(SOA)业务组件与技术的灵活复用。在CXF中,Service使用WSDL标准定义并能够使用各种不同的消息 格式(或binding)和网络协议(transports)包括SOAP、XML(通过HTTP或JMS)进行访问。CXF同样支持多种model 如:JAX-WS,JBI,SCA和CORBA service。CXF设计成可灵活部署到各种容器中包括Spring-based,JBI,SCA, Servlet和J2EE容器。

Apache CXF = Celtix + XFire,Apache CXF 的前身叫 Apache CeltiXfire,现在已经正式更名为 Apache CXF 了,以下简称为 CXF。CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding 、DataBinding、Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First)或者 WSDL 优先(WSDL First)来轻松地实现 Web Services 的发布和使用。目前它仍只是 Apache 的一个孵化项目。


2开发WebService服务端

2.1下载CXF的包.

地址:http://cxf.apache.org/download.html

2.2新建一个JavaProject

导入CXF至少需要的包:


2.3设计服务的接口,实体类

package com.lin.ws.entity;

public class User{
    
    private Integer id;
    
    private String name;
    
    private String password;

    public User() {
        super();
        // TODO Auto-generated constructor stub
    }

    public User(Integer id, String name, String password) {
        super();
        this.id = id;
        this.name = name;
        this.password = password;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + ", password=" + password
                + "]";
    }
}
package com.lin.ws.intf;

import javax.jws.WebService;

import com.lin.ws.entity.User;

/**
 * 服务的接口
 * @author lin
 *
 */
//暴露的事这个接口
@WebService
public interface IUserService {
    
    public void addUser(User user);
    
    public User getUserById(Integer id);
    
    public Integer countOfUser();

}


2.4编写服务的实现类

package com.lin.ws.impl;

import java.util.Random;

import javax.jws.WebService;

import com.lin.ws.entity.User;
import com.lin.ws.intf.IUserService;

/**
 * 服务实现类
 * @author lin
 *
 */
//注解指定该服务的接口,和服务的名称
@WebService(endpointInterface="com.lin.ws.intf.IUserService",serviceName="UserService")
public class UserServiceImpl implements IUserService {

    @Override
    public void addUser(User user) {
        
        System.out.println("Add a user:"+user.toString());
    }

    @Override
    public User getUserById(Integer id) {
        
        System.out.println("Get a user by id:"+id);
        
        return null;
    }

    @Override
    public Integer countOfUser() {
        
        Integer count = (new Random()).nextInt();
        
        System.out.println("Return the count of users: "+count);
        
        return count;
    }

}


2.5发布服务

package com.lin.ws.main;

import javax.xml.ws.Endpoint;

import com.lin.ws.impl.UserServiceImpl;
import com.lin.ws.intf.IUserService;

public class ServerMain {
    
    public static void main(String[] args) {
        
        System.out.println("Publishing the service...");
        
        IUserService userService = new UserServiceImpl();
        
        //发布webService服务,http://localhost:8080/UserService是该服务的地址,userService是该服务的服务端实现类
        Endpoint.publish("http://localhost:8080/UserService", userService);
        
        System.out.println("Publish finish...");
    }

}

发布服务后,在浏览器里输入

http://localhost:8080/UserService?wsdl

查看服务的WSDL文档:

WSDl是描述该服务的一个XML文件,可以从该文档中清楚地知道服务的具体输入输出和参数类型(相当于知道一些服务端方法),具体网上可以搜WSDL文档的详解.


3开发WebService客户端

3.1新建一个JavaProject

3.2生成客户端代码

在命令终端进入客户端项目的src文件夹,执行apache-cxf/bin下的wsdl2java文件,wsdl2java wsdl文档地址

然后客户端项目的src里就有了一些java文件


3.3调用服务

package com.lin.ws.main;

import com.lin.ws.impl.UserService;
import com.lin.ws.intf.IUserService;
import com.lin.ws.intf.User;

public class ClientMain {
    
    public static void main(String[] args) {
        
        //wsdl2java工具生成的类,该;类继承子Service
        UserService factory = new UserService();
        
        IUserService userService = factory.getUserServiceImplPort();
        //调用服务
        userService.addUser(new User());
        userService.countOfUser();
        userService.getUserById(1);
        
        System.out.println("Invoke Server Finish...");
    }
}

我的一个WebService入门小例子就完成了.


项目的目录结构

服务端:

客户端:

© 著作权归作者所有

共有 人打赏支持
蜡笔小小小新
粉丝 32
博文 104
码字总数 75210
作品 0
深圳
后端工程师
Axis1.x WebService开发指南—目录索引

Axis的简单入门实例 Axis的jws发布WebService Axis的wsdd模式发布WebService Axis删除wsdd发布过的WebService Axis中传递复杂对象和内部类 Axis中的handler 、chain 的特性 axis调用RMI模式W...

ibm_hoojo ⋅ 2010/12/20 ⋅ 0

Axis2.x WebService开发指南-目录索引

Axis的简单准备 Axis的入门实例 Axis复杂对象类型的WebService Axis的辅助工具发布、调用WebService Axis WebService会话Session的管理 Axis用控制台Dos命令发布WebService Axis跨多个WebSe...

ibm_hoojo ⋅ 2011/03/15 ⋅ 0

WebService之Axis2快速入门(8): WebService的异步调用

在前面几篇文章中都是使用同步方式来调用WebService。也就是说,如果被调用的WebService方法长时间不返回,客户端将一直被阻塞,直到该方法返回为止。使用同步方法来调用WebService虽然很直观...

吕兵阳 ⋅ 2016/05/08 ⋅ 0

基于SOA 思想下的WebService实战资料分享

跟大家分享基于SOA 思想下的WebService实战(电子商务需求,分析,架构全涉及,百万数据优化) 课程讲解内容涵盖: 第1章 CXF框架快速起步(2课时) Webservice技术规则 Java-WebService技术规范...

abcfhl ⋅ 2013/06/24 ⋅ 7

WebService之Axis2快速入门(6): 跨服务会话(Session)管理

在《WebService之Axis2快速入门(5): 管理会话(Session)》一文中介绍了如何使用Axis2来管理同一个服务的会话,但对于一个复杂的系统,不可能只有一个WebService服务,例如,至少会有一个管理用...

吕兵阳 ⋅ 2016/05/08 ⋅ 0

Axis的简单入门实例

1、在官方网站下载axis的工程(这个等下就有用的)和源码、jar包等,下载地址是: http://labs.renren.com/apache-mirror//ws/axis/14/ 2、解压下载的工程或源码(两个中任意一个都可以),解...

jason小熊 ⋅ 2012/02/29 ⋅ 0

WebService入门系列教程-简单的WebSercice实例

第一步 新建一个webservice interface(注意加入注解包) import javax.jws.WebService;@WebServicepublic interface MyService {public int add(int x,int y);public int dec(int x,int y)......

Josean_Luo ⋅ 2014/05/10 ⋅ 3

WebService之Axis2快速入门(2): 传递复合类型的数据

在实际应用中,不仅需要使用WebService来传递简单类型的数据,有时也需要传递更复杂的数据,这些数据可以被称为复合类型的数据。数组与类(接口)是比较常用的复合类型。在Axis2中可以直接使...

吕兵阳 ⋅ 2016/05/08 ⋅ 0

WebService之Axis2快速入门(4): 传输二进制文件

在《WebService之Axis2快速入门(2): 传递复合类型的数据》中讲过,如果要传递二进制文件(如图像、音频文件等),可以使用byte[]作为数据类型进行传递,然后客户端使用RPC方式进行调用。这样...

吕兵阳 ⋅ 2016/05/08 ⋅ 0

CXF 简单入门实例

由于工作的需要,最近在学习研究 CXF WebService的实现,从网上找了一个例子,自己参考写了一个简单例子,分享到 OSC@GIT 上面,为了后期跟踪学习使用。。 系统源码地址:http://git.oschin...

Jack王传杰 ⋅ 2013/09/19 ⋅ 2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

mysql5.7系列修改root默认密码

操作系统为centos7 64 1、修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables=1 这一行配置让 mysqld 启动时不对密码进行验证 2、重启 mysqld 服务:systemctl restart mysql...

sskill ⋅ 昨天 ⋅ 0

Intellij IDEA神器常用技巧六-Debug详解

在调试代码的时候,你的项目得debug模式启动,也就是点那个绿色的甲虫启动服务器,然后,就可以在代码里面断点调试啦。下面不要在意,这个快捷键具体是啥,因为,这个keymap是可以自己配置的...

Mkeeper ⋅ 昨天 ⋅ 0

zip压缩工具、tar打包、打包并压缩

zip 支持压缩目录 1.在/tmp/目录下创建目录(study_zip)及文件 root@yolks1 study_zip]# !treetree 11└── 2 └── 3 └── test_zip.txt2 directories, 1 file 2.yum...

蛋黄Yolks ⋅ 昨天 ⋅ 0

聊聊HystrixThreadPool

序 本文主要研究一下HystrixThreadPool HystrixThreadPool hystrix-core-1.5.12-sources.jar!/com/netflix/hystrix/HystrixThreadPool.java /** * ThreadPool used to executed {@link Hys......

go4it ⋅ 昨天 ⋅ 0

容器之上传镜像到Docker hub

Docker hub在国内可以访问,首先要创建一个账号,这个后面会用到,我是用126邮箱注册的。 1. docker login List-1 Username不能使用你注册的邮箱,要用使用注册时用的username;要输入密码 ...

汉斯-冯-拉特 ⋅ 昨天 ⋅ 0

SpringBoot简单使用ehcache

1,SpringBoot版本 2.0.3.RELEASE ①,pom.xml <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.3.RELE......

暗中观察 ⋅ 昨天 ⋅ 0

监控各项服务

比如有三个服务, 为了减少故障时间,增加监控任务,使用linux的 crontab 实现. 步骤: 1,每个服务写一个ping接口 监控如下内容: 1,HouseServer 是否正常运行,所以需要增加一个ping的接口 ; http...

黄威 ⋅ 昨天 ⋅ 0

Spring源码解析(八)——实例创建(下)

前言 来到实例创建的最后一节,前面已经将一个实例通过不同方式(工厂方法、构造器注入、默认构造器)给创建出来了,下面我们要对创建出来的实例进行一些“加工”处理。 源码解读 回顾下之前...

MarvelCode ⋅ 昨天 ⋅ 0

nodejs __proto__跟prototype

前言 nodejs中完全没有class的这个概念,这点跟PHP,JAVA等面向对象的语言很不一样,没有class跟object的区分,那么nodejs是怎么样实现继承的呢? 对象 对象是由属性跟方法组成的一个东西,就...

Ai5tbb ⋅ 昨天 ⋅ 0

Ubuntu16.04 PHP7.0 不能用MYSQLi方式连接MySQL5.7数据库

Q: Ubuntu16.04 PHP7.0 不能用MYSQLi方式连接MySQL5.7数据库 A: 执行以下2条命令解决: apt-get install php-mysql service apache2 restart php -m 执行后会多以下4个模块: mysqli mysqlnd...

SamXIAO ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部