webservice hello world

Web service是一个平台独立的跨语言、跨平台,低耦合的,自包含的、基于SOAP(simple object access protocal)协议的可编程的web的应用程序,可远程接口访问。可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。

####1、WebService术语
再写helloworld之前,我们先来介绍一下webService里面的术语:

1) WSDL
网络服务描述语言是Web Service的描述语言,它包含一系列描述某个web service的定义。后面我们会根据helloworld来分析它的结构层次,来了解webService的实现原理。

2) SOAP
SOAP(simple object access protocal),简单对象访问协议是交换数据的一种协议规范,是一种轻量的、简单的、基于XML(标准通用标记语言下的一个子集)的协议,它被设计成在WEB上交换结构化的和固化的信息。

3) SEI

SEI(webservice endpoint interface),服务端口接口。基于SOAP的Java Web服务尽管可以只由单独的Java类来实现,但是遵从最佳实践原则,首先应该定义一个Java接口类,在此接口内声明Web服务需要完成或实现的业务方法。通常这类接口被称为"SEI",即服务端点接口(Service Endpoint Interface)。

我们先来基于JDK的实现一个Webserivce的Helloworld,然后再来分析一下,Webservice的实现原理。

####2、创建Webservice-service项目

1) 项目结构

这里写图片描述

2) UserService.Java

@WebService
public interface UserService {

    void sayHi(String username);

}

3) UserServiceImpl.Java

@WebService
public class UserServiceImpl implements UserService {

    @WebMethod
    public void sayHi(String username) {
        System.out.println("hi, " + username);
    }

}

4) Publish.Java

public class Publish {

    public static void main(String[] args) {
        String url = "http://localhost:8080/demo/hello";
        Endpoint.publish(url, new UserServiceImpl());
        System.out.println("webservice publish service success...");
    }

}

5) 发布服务

启动publish.Java文件。然后进入http://:8080/demo/hello?wsdl就会出现以下画面:

这里写图片描述

这个webservice远程客户端调用服务的基础。如果你也能访问那么说明你的服务发布成功了,我们后面再来分析这个xml文件。

####3、创建Webservice-client项目

1) 创建Webservice-client项目

使用maven创建webservice-client空项目,然后进入${webservice-client}/src/main/java.打开命令窗口,输入wsimport -keep http://localhost:8080/demo/hello?wsdl就会生成客户端调用代码
调用。生成的项目结构图如下:

这里写图片描述

2) 调用远程服务

添加test类UserServiceTest.Java进行远程服务调用测试

public class UserServiceTest {

    public static void main(String[] args) {
        UserServiceImplService userService =  new UserServiceImplService();
        String hiWord = userService.getUserServiceImplPort().sayHi("carl");
        System.out.println(hiWord);
    }

}

运行结果如下:

这里写图片描述

####4、分析WSDL

顶级元素为definitions元素,表示这个是webservice的描述语言,然后里面有以下几种子元素:

#####1、types
Type(消息类型):数据类型定义的容器,它使用某种类型系统(如 XSD).首先我们来看一下types元素

这里写图片描述

然后我们再打开schemaLocation里面的地址:

这里写图片描述

我们可以看到在type元素中定义了远程服务暴露接口中

  1. 调用方法所需参数
  2. 调用方法的返回值类型

#####2、message
message:通信数据的抽象类型化定义,它由一个或者多个 part 组成.
这里写图片描述
我们可以看到message元素中持有调用方法请求参数与返回值类型的引用。

#####3、portType
Port Type(端口类型):特定端口类型的具体协议和数据格式规范。
这里写图片描述

#####4、binding
**Binding:**特定端口类型的具体协议和数据格式规范。
这里写图片描述

#####5、service
Service:相关端口的集合,包括其关联的接口、操作、消息等

这里写图片描述

####5、请求流程

其实熟悉Spring IOC的朋友可以看出来,这个和Spring的bean配置是不是很类型。Webservice的调用调用就是操作暴露服务的Service的Service这个容器。然后再调用服务的port.就可以获取到远程服务,这样就进行远程调用了。

这里写图片描述

请求的消息格式类型于:

<soap:…..>
	<sayHello>
	     <arg0>carl</arg0>
	</sayHello>
</soap>

然后返回的消息体类型于:

<sayHelloResponse>
	<return>hi, carl</return>
</sayHelloResponse>

这就是webservice的请求的整个过程了,现在清晰了吗?

发布了173 篇原创文章 · 获赞 221 · 访问量 70万+

猜你喜欢

转载自blog.csdn.net/u012410733/article/details/60323734