一个WebService入门实例

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 的一个孵化项目。

一个WebService入门实例_第1张图片


2开发WebService服务端

2.1下载CXF的包.

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

2.2新建一个JavaProject

导入CXF至少需要的包:

一个WebService入门实例_第2张图片


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文档:

一个WebService入门实例_第3张图片

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


3开发WebService客户端

3.1新建一个JavaProject

3.2生成客户端代码

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

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

一个WebService入门实例_第4张图片


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入门小例子就完成了.


项目的目录结构

服务端:

一个WebService入门实例_第5张图片

客户端:

一个WebService入门实例_第6张图片

你可能感兴趣的:(java,webservice)