webservice通信 服务端 客户端简单实现

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了webservice通信 服务端 客户端简单实现相关的知识,希望对你有一定的参考价值。

schema规范中:

1.所有标签和属性都需要有schema文件来定义。

2.所有schema文件都需要有一个唯一标识id,单在xml文件中它叫namespace。

3.namespace的值由targetNamespace属性来指定,它的值是一个url(很可能不存在)。

4.如何引入一个schema约束?

1).属性?:用xmlns属性。

2).属性值?:对应schema文件的id即(namespace值)。

5.如果引入的schema约束不是w3c提供的,必须指定schema文件的位置。

6.schema文件的位置由什么属性来指定

1).属性?:用schemaLocation属性。

2).属性值?:引入文件的namespace+空格+path

7.如果引入了n个schema约束,需要给n-1个取别名。

同时取别名的schema定义的标签在引用之前都得先加上别名。


http协议:

请求的组成:

请求行:(请求方式(get/post),请求路径(不包含主机名),请求所用协议(http1.1))

请求头:

请求体:只有post请求才有请求体

响应组成:

响应状态行:(200请求成功,404路径错误,500服务器端异常情况,302客户端跳转)

响应头:

响应体:

8.webservice中的几个重要术语

1.WSDL:web service definition language(webservice定义语言)

1-1).对应一种类型的文件 xxx.wsdl

1-2).定义了webservice的服务器端与客户端应用交互传递请求和响应数据的格式和方式

1-3).一个webservice对应一个唯一的wsdl文件

2).SOAP:Simple Object Access Protocal 

2-1).简单对象访问协议

2-2).是一种简单的、基于http和xml的协议,用于在web上交换结构化的数据

2-3).SOAP消息请求消息和响应消息

2-4).http+xml片段

3).SEI:webservice Endpoint Interface

3-1).webservice的终端接口

3-2).webservice服务器端用来处理请求的接口

   4).CXF:Celtix +Xfire

4-1).一个apache的用于开发webservice服务器端和客户端的框架

4-2).

4-3).

9.webservice服务端代码实现   

1)创建一个java工程作为webservice服务端,如创建java工程hello_ws

2)在该项目的src项目下创建包 cn.bsxy.ws.server(任意取一个包名,遵循java包名定义的规则)

用于存放server端测试类 如 public class TestHelloWs(){}

 创建包名cn.bsxy.ws.sei 用于存放webservice的SEI webservice终端接口public interface HelloWs(){}

      创建包名cn.bsxy.ws.sei.impl 用于存放webservice的SEI的实现类,public class HelloWsImpl implements HelloWs(){}

以上各包中类的具体代码如下:

 

//webservice发布代码

package cn.bsxy.ws.server;


import javax.xml.ws.Endpoint;


import cn.bsxy.ws.sei.impl.HelloWsImpl;

/**

* @author smartluobo

*该类用来发布服务器端的wsdl文件

*/

public class TestHelloWs {


public static void main(String[] args) {

String address = "http://192.168.0.116:8888/hello_ws/hellows";

Endpoint.publish(address, new HelloWsImpl());

System.out.println("发布webservice成功");

}

}

//webservice终端接口定义

package cn.bsxy.ws.sei;


import javax.jws.WebMethod;

import javax.jws.WebService;

/**

* @author smartluobo

*该类用来定义webservice的终端接口,即对外提供的访问方法

*/

@WebService

public interface HelloWs {

@WebMethod

String sayHello(String name);

}

//webservice终端接口类的实现类,完成webservice对外提供接口的具体实现

package cn.bsxy.ws.sei.impl;


import javax.jws.WebService;


import cn.bsxy.ws.sei.HelloWs;

/**

* webservice终端接口实现类。对webservice对外提供接口的具体实现

* @author smartluobo

*

*/

@WebService

public class HelloWsImpl implements HelloWs {


@Override

public String sayHello(String name) {

System.out.println("hello web server"+name);

return "hello client"+name;

}


}

在TestHelloWs.java中运行该类当控制台打印发布成功后说明webservice已经发布成功。

webservice发布成功后打开浏览器,将在TestHelloWs.java中定义的address

复制到浏览器地址栏并在后面追加"?wsdl",就能看到发布后生成的wsdl文件。到此webservice服务端就已经ok

对webservice服务端的简单总结两个注解加上一个类

注解[email protected](该注解表示定义的该类是一个webservice终端接口,

但是在该终端接口类的实现类上任然需要加上该注解)

在上述的HelloWs.java和HelloWsImpl.java上都需加上@WebService注解

注解[email protected](该注解用在方法上表示该方法是webservice对外提供的一个方法,只需在接口定义方法上加该注解即可)

类.Endpoint(调用该类的Endpoint.publish方法发布webservice)

Endpoint.publish(String address, Object implementor)

address:webservice发布的地址。

implementor:webservice终端接口实现的类的对象。

10.webservice客户端实现:

1.创建一个普通的java项目作为客户端项目hello_ws_client(项目名称任意)。

2.根据wsdl文件发布地址借助jdk的wsimport.exe生成客户端代码。

path wsimport -keep url

path:表示生成的代码放在哪个路径下。

-keep:表示保存生成的代码的。

url:wsdl文件发布的url地址。

如:我想把通过wsdl文件生成代码放在hello_ws_client项目的src目录下。

进入hello_ws_client项目的src目录:我本地的路径为 D:\lmb\workspace\hello_ws_client\src在D盘下

2.1打开命令窗口 输入d: 切换盘符进入D盘

2.2 输入cd D:\lmb\workspace\hello_ws_client\src 进入到需要存放生成代码的路径下

2.3 输入 wsimport -keep http://192.168.0.116:8888/hello_ws/hellows?wsdl 

2.4 上述三步完成后即完成了根据wsdl文件生成java代码的工作,此时刷新hello_ws_client项目即可看到生成的java代码。

3.在hello_ws_client项目中新建包cn.bsxy.ws.client.test(包名随意)

3.1创建一个测试类 public class ClientTest(){}(类名随意)

package cn.bsxy.ws.client.test;


import cn.bsxy.ws.sei.impl.HelloWsImpl;

import cn.bsxy.ws.sei.impl.HelloWsImplService;


public class ClientTest {

public static void main(String[] args) {

//使用wsimport生成的一个工厂类(名字为XxxxService)

HelloWsImplService factory = new HelloWsImplService();

//使用wsimport生成的一个类(名字和服务端webservice终端接口实现类的名称一致。但是在本地是一个接口)

//factory.getHelloWsImplPort()返回的是一个动态代理对象

HelloWsImpl helloWs = factory.getHelloWsImplPort();

String result = helloWs.sayHello("smartluobo");

System.out.println(result);

}

}

4.webservice客户端简单访问也到此结束。


本文出自 “smartluobo” 博客,请务必保留此出处http://smartluobo.blog.51cto.com/6152293/1748293

以上是关于webservice通信 服务端 客户端简单实现的主要内容,如果未能解决你的问题,请参考以下文章

js调用webservice接口

webService服务端和客户端开发 简单实例

转Spring的WebServiceTemplate访问WebService的方法及其本质原理

Nodejs 实现服务端与客户端简单通信

Nodejs 实现服务端与客户端简单通信

AXIS2+Myeclipse实现WebService数据库存储简单实例