文档章节

一个WebService入门实例

蜡笔小小小新
 蜡笔小小小新
发布于 2015/12/26 15:45
字数 1308
阅读 137
收藏 14

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
博文 114
码字总数 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
0
Axis2.x WebService开发指南-目录索引

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

ibm_hoojo
2011/03/15
0
0
WebService之Axis2快速入门(8): WebService的异步调用

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

吕兵阳
2016/05/08
32
0
基于SOA 思想下的WebService实战资料分享

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

abcfhl
2013/06/24
1K
7
WebService之Axis2快速入门(6): 跨服务会话(Session)管理

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

吕兵阳
2016/05/08
17
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

es6

在实际开发中,我们有时需要知道对象的所有属性,原生js给我们提供了一个很好的方法:Object.keys(),该方法返回一个数组 传入对象,返回属性名 var obj = {'a':'123','b':'345'};console.l...

不负好时光
23分钟前
0
0
叮!您收到一份超值Java基础入门资料!

摘要:Java语言有什么特点?如何最大效率的学习?深浅拷贝到底有何区别?阿里巴巴高级开发工程师为大家带来Java系统解读,带你掌握Java技术要领,突破重点难点,入门面向对象编程,以详细示例...

全部原谅
24分钟前
0
0
web.xml容器加载顺序

容器对于web.xml的加载过程是context-param >> listener >> fileter >> servlet

Aeroever
26分钟前
1
0
Docker容器日志查看与清理

1. 问题 docker容器日志导致主机磁盘空间满了。docker logs -f container_name噼里啪啦一大堆,很占用空间,不用的日志可以清理掉了。 2. 解决方法 2.1 找出Docker容器日志 在linux上,容器日...

muzi1994
27分钟前
0
0
J2Cache 和普通缓存框架有何不同,它解决了什么问题?

不少人看到 J2Cache 第一眼时,会认为这就是一个普普通通的缓存框架,和例如 Ehcache、Caffeine 、Spring Cache 之类的项目没什么区别,无非是造了一个新的轮子而已。事实上完全不是一回事!...

红薯
30分钟前
484
14

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部