`
Motte2010
  • 浏览: 22334 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

WebService学习之路五

阅读更多

 

WebService学习之路一 :http://trylin.iteye.com/blog/1906819

 

WebService学习之路二 :http://trylin.iteye.com/blog/1907883

 

WebService学习之路三 :http://trylin.iteye.com/blog/1908269

 

WebService学习之路四:http://trylin.iteye.com/blog/1910979

 

根据契约优先原则开发WS

 

 

 

其实前面的方式 我们都可以看作是使用代码优先的模式开发的WS端(代码优先,先开发代码生成WS,然后才有根据WS生成的WSDL;契约优先,先开发规则WSDL,在根据规则生成代码)。

 

在第二章简单的分析过WSDL的元素,WSDL的元素规律很像java代码中的之间的引用。试着手写出一个符合要求的WSDL

 

 

 

首先 新建一个WS_WEB的动态WEB项目(我使用的是eclipse,如果用的myeclipse直接新建web项目),这里用WEB项目是为了稍后能够发布到tomcat上启动我们的WS

 

 

然后新建testresource两个源码包 ,并且在resource 建立wsdl包,然后在wsdl包下创建UserService.wsdl文件(wsdl文件格式,eclipse可以直接创建,newàotherà输入wsdl选中即可,创建过程,默认就行)。创建后 出现的系统默认的wsdl格式

项目结构:

 
UserService.wsdl

 



 

 

这些个格式,看着应该很熟悉了吧.。。。

 

 

 

好了 ,我们开始手动写WSDL ,先把definitions节点下的所有节点删除,并且修改definitions的默认命名空间。



 
然后,我们开始定义元素类型和元素。(如果忘记WSDL格式,可以打开之前的项目,然后作为参考,多看几遍,记下来)

 

定义types



 
定义 portType binding

 

 

 

 



 定义服务项

 



 

 

如上,我们就手动写了一个WSDL,测试的时候,最好还是手动的敲。。。动手实践才是关键。

 

 

 

然后,我们用wsimport命令 ,根据此wsdl生成java

 

wsimport –d d:/webservice –keep –verbose E:\work\WS_WEB\resource\wsdl\UserService.wsdl

 

运行命令后,查看d:/webservice 是不是生成了这些文件,这就表示,我们手写的WSDL已经成功了。



 

 

然后这里我们需要做两步操作,第一步,将IUserService接口类复制到我们的服务端,第二步,新建一个客户端,然后将所有的java类放到客户端的代码中。

 

 

 

Copy到客户端,这个容易理解,我们做客户端调用需要这些类,但是服务端为什么也要这样copy呢,而且只需要copy一个java类。

 

这就是契约优先。我们之前先定义了一个WSDL的接口规范,规范定好了,服务端和客户端就可以同时按照WSDL定义的标准进行开发wsdl是xml格式,解释成java代码就服务端copy的接口类(这里是 IUserService),然后服务端就可以根据接口开发对应的功能呢。。。

 

 

 

开发服务端:

 

IUserService  copy到服务端后,会报错,有个错误的引用,把引用的注解删除。



 新建一个IUserService的实现类UserService类

 

 

 

@WebService(name="UserService",serviceName="UserService",endpointInterface="com.trylin.service.IUserService"
	, targetNamespace = "http://service.trylin.com")
@WebServiceRef(wsdlLocation="wsdl/UserService.wsdl")
public class UserService implements IUserService {
	
	@Override
	public int add(int a, int b) {
		System.out.println(a+"+"+b+"="+(a+b));
		return a+b;
	}

	@Override
	public int minus(int a, int b) {
		System.out.println(a+"-"+b+"="+(a-b));
		return a-b;
	}

}

 注意类上面的注解 :

@WebService  serviceName 表示服务名

@WebServiceRef  wsdlLocation 本地wsdl文件的引用

 

然后创建main启动服务

/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		Endpoint.publish("http://127.0.0.1:8888/WS", new UserService());

	}

 

浏览器中输入  http://127.0.0.1:8888/WS?wsdl是不是和之前生成的WSDL一样一样的。。。。

 

然后在客户端创建测试代码调用(客户端的代码我就不写出来了,和之前的差不多,文章结尾会有测试源码)

 

@Test
	public void test01() throws Exception{
		/*IUserService iUser = new UserService().getUserServicePort();*/
		//这里使用另外的一种方式调用  手动传QName   这样我们可以指定URL,如果项目迁移,或者是服务换端口,默认的地址就会失效
		//所以这里用下这种方式调用
		URL url = new URL("http://127.0.0.1:8888/WS");
		QName qname = new QName("http://service.trylin.com","UserService");
		IUserService iUser = new UserService(url,qname).getUserServicePort();
		System.out.println(iUser.add(1, 2));
		System.out.println(iUser.minus(3, 2));
	}

 

普通类型的完成,试试复杂类型的创建哦。

主要测试自定义类型User  List<User>

首先在节点中添加User对象List对象,并且新增login方法和getList方法

 

 

 

 

 

 
 然后使用 wsimport重新生成 java类,服务端覆盖原有的接口,并且从新实现,由于这里用到的自定义类型User,所以服务端,我们需要自己在建立一个user对象。

 

<!--EndFragment-->

<spay�ye(�j��ze:10.0pt; font-family:"courier="" new";color:black;mso-font-kerning:0pt'=""> 节点中添加User对象List对象,并且新增login方法和getList方法

 

Public class User{
	private String userName;
	private String userPwd;
	private String age;
	private String nickName;
}

 UserService新增方法

 

	@Override
	public List<User> getList() {
		List<User> lu = new ArrayList<User>();
		Set<String> keySet = DBUser.keySet();
		Iterator<String> key_it = keySet.iterator();
		while(key_it.hasNext()){
			String key = key_it.next();
			lu.add(DBUser.get(key));
		}
		return lu;
	}


	@Override
	public User login(String userName, String userPwd) {
		User user = DBUser.get(userName);
		if(null!=user && userPwd!=null && userPwd.equals(user.getUserPwd())){
			return user;
		}
		return null;
	}

 

重新发布:

public static void main(String[] args) {
		
		Endpoint.publish("http://127.0.0.1:8080/UserService", new UserService());

	}

 客户端调用:

 

@Test
	public void test02(){
		IUserService iUser = new UserService().getUserServicePort();
		List<User> userList = iUser.getList();
		for (User user : userList) {
			System.out.println("nickName :"+user.getNickName());
		}
		User loginUser = iUser.login("zhangsan", "123456");
		if(loginUser == null ){
			System.out.println("登录失败");
		}else{
			System.out.println(loginUser.getNickName());
		}
		
	}

 

 

这样我们的自定义类型也就发布成功了。。。

 

源代码在下方,欢迎下载,希望看到不足的地方,留下你们的金玉良言。。。

下一章会把基于 tomcat发布的写出来。今天太困了。。。撤退。。。

 

 

 

 

 

  • 大小: 7 KB
  • 大小: 107.9 KB
  • 大小: 38 KB
  • 大小: 103.9 KB
  • 大小: 46.4 KB
  • 大小: 101.3 KB
  • 大小: 23.7 KB
  • 大小: 11.1 KB
  • 大小: 11.1 KB
  • 大小: 94 KB
  • 大小: 39.4 KB
  • 大小: 23.6 KB
  • 大小: 28.3 KB
  • 大小: 56.8 KB
1
2
分享到:
评论

相关推荐

    webservice学习

    标题“webservice学习”表明我们将探讨WebService的基本概念、重要性以及如何在Java环境中进行开发。这里涉及的知识点主要包括: 1. **WSDL**:WSDL是一种XML格式的规范,用于定义Web服务接口。它描述了服务的位置...

    WebService学习之路三

    【WebService学习之路三】 在IT领域,WebService是一种用于构建分布式应用程序的技术,它允许不同系统间的交互,不受平台或编程语言的限制。本篇主要聚焦于WebService的学习,通过深入理解其原理和实践,来提升我们...

    WebService学习之路四

    【WebService学习之路四】 在IT领域,WebService是一种基于标准协议(如SOAP、WSDL和UDDI)的开放式网络服务,允许不同系统间的应用程序通过互联网进行通信。本篇将深入探讨WebService的学习路径,重点关注其核心...

    Eclipse下WebService学习

    【Eclipse下WebService学习】 在IT行业中,Web Service是一种基于开放标准(如XML、WSDL和SOAP)的互操作技术,允许不同系统间的应用程序通过网络进行通信。它提供了一种松散耦合的方式,使得软件组件可以跨越各种...

    WebService学习之路一

    本教程“WebService学习之路一”将引导我们踏入这一领域的探索,通过源码分析和工具使用,来深入理解Web Service的基本概念和技术。 首先,让我们了解Web Service的核心组成部分: 1. **SOAP (Simple Object ...

    WebService学习笔记

    **WebService学习笔记** WebService是一种基于互联网的、平台和语言无关的接口规范,它允许不同系统间的应用程序进行交互和数据共享。这项技术的核心是利用XML(可扩展标记语言)作为数据交换格式,SOAP(简单对象...

    尚硅谷Webservice学习笔记

    - 发布Web Service需要定义Service Endpoint Interface (SEI),使用`@WebService`和`@WebMethod`注解,然后通过`Endpoint.publish(url, SEIImplObject)`发布服务。 - 请求Web Service时,通常先根据WSDL文档生成...

    java注解webservice学习第一篇

    5. `@SOAPBinding`:当使用SOAP协议时,此注解可以用于配置绑定风格,如RPC或Document。 6. `@Path`:在JAX-RS中,用于标记资源类和资源方法,定义RESTful服务的URI模板。 7. `@GET`, `@POST`, `@PUT`, `@DELETE`...

    WebService之axis2案例

    在"WebService之axis2案例"中,我们有两个关键部分:服务端(WebService_server)和客户端(WebService_client)。服务端是提供Web服务的应用程序,它定义了对外公开的接口和业务逻辑,这些接口可以通过SOAP(Simple...

    WebService学习笔记0001

    【WebService学习笔记0001】 在IT领域,WebService是一种基于开放标准(如XML、SOAP、WSDL和UDDI)的互操作性技术,它允许不同系统间的应用程序通过网络进行通信。本学习笔记将围绕WebService的核心概念、工作原理...

    webservice学习之Axis2 (一)

    【标题】:“Web服务学习之Axis2(一)” 在Web服务的世界中,Apache Axis2是Java平台上一个强大且灵活的工具,用于构建和部署Web服务。本篇将重点介绍Axis2的基础知识,以及如何开始使用它进行开发。 **1. Web...

    WebService电子书6本(PDF)

    WebService电子书合集包含了六本深入浅出的教程,涵盖了从基础到高级的各类主题,是学习和理解WebService技术的理想资源。以下是对这些书籍内容的详细解析: 1. "axis webservice详尽教程(含初高级用法).pdf": 这...

    WebService学习1.docx

    【WebService学习】 WebService是一种基于XML的互联网交互协议,它允许不同系统间的应用程序进行通信,消除了语言和平台的障碍。在C#中,通过使用ASP.NET技术,我们可以轻松创建和消费WebService。以下是一个初学者...

    WebserviceStudio webservice调试工具

    学习使用WebserviceStudio需要对Web服务的基本概念和技术有一定了解,如XML、WSDL、SOAP等。深入掌握这些知识,将有助于更高效地利用WebserviceStudio进行Web服务的调试和测试。 总之,WebserviceStudio是一款实用...

    WebService CXF 详细教程

    **WebService CXF 详解** **一、WebService简介** WebService是一种基于标准的,可以在不同操作系统、编程...通过学习和实践CXF,开发者能够高效地构建和部署高质量的WebServices,实现企业间的系统集成和数据交换。

    浪曦][原创]WebService在.NET中的实战应用五

    5. **WebService在NET中的应用(五).ppt**:这是一个PowerPoint演示文稿,详细讲解了WebService在.NET环境中的第五部分应用,可能包括高级主题,如错误处理、安全性和性能优化。 6. **WebService动态调用.vsd**:这...

Global site tag (gtag.js) - Google Analytics