`
zhuchengzzcc
  • 浏览: 442344 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java6 纯发布WebServices及客户端调用

    博客分类:
  • RPC
 
阅读更多
一、简介
什么是Web Services
Web service 就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API。这就是说,你能够用编程的方法通过Web来调用这个应用程序。
基于浏览器的瘦客户应用程序,即BS 结构,是目前流行的,使得Web Services的应用越来越广泛。Web Services 是一种构建应用程序的模型,并能在所有支持 Internet 通讯的操作系统上实施运行。Web Services 令基于组件的开发和 Web 的结合达到最佳,基于组件的对象模型,利用 SOAP 和 XML对这些模型在通讯方面作了进一步的扩展以消除特殊对象模型的障碍。因为是使用XML作为传输的介质,所以可以跨平台跨语言。
Web Services 实现远程访问,有点类似RMI(远程方法调用)。 但它是利用 HTTP 和 SOAP 协议是商业数据在 Web 上传输,SOAP通过 HTTP 调用商业对象执行远程功能调用,Web 用户能够使用 SOAP 和 HTTP通过 Web 调用的方法来调用远程对象。
Web Services结构
客户根据WSDL描述文档,会生成一个 SOAP 请求消息。Web Services 都是放在Web服务器上面,客户生成的SOAP请求会被嵌入在一个HTTP POST请求中,发送到 Web 服务器来。Web 服务器再把这些请求转发给 Web Services 请求处理器。请求处理器的作用在于,解析收到的 SOAP 请求,调用 Web Services,然后再生成相应的 SOAP 应答。Web 服务器得到 SOAP 应答后,会再通过 HTTP应答的方式把信息送回到客户端。
什么是WSDL
WSDL是WebServicesDescriptionLanguage的缩写,是一个用来描述Web服务和说明如何与Web服务通信的XML语言。Web Services服务器把一个对像绑定到一个URL 上(如http://localhost:8080/webservices/hello),客户端就可以能过绑定的地址(如:http://localhost:8080/webservices/hello?wsdl)取得WSDL文件,该文件是标准的XML 格式,描述了被绑定对像的信息,包括可调用的方法,参数,及参数类型,返回值类型,异常类型等。客户端就是通过这些信息调用服务器的方法。
二、JDK6对Web Services的支持
JDK6提供了对Web Service原生的支持,对Web Service进行了完美的封装,完全隐藏了底层内容,甚至可以不用了解wsdl的具体规范。使用Web Service就像使用本地方法一样简单。下面来举个例子,依然从最简单的例子入手。
 
 
package test1;

import java.io.Serializable;

/**
 * @author zhuc
 * @version 2012-5-20 下午7:48:52
 */
public class Car implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = 606544377239576049L;

	private String name;
	private Integer capacity;
	
	/**
	 * @return the name
	 */
	public String getName() {
		return name;
	}
	/**
	 * @param name the name to set
	 */
	public void setName(String name) {
		this.name = name;
	}
	/**
	 * @return the capacity
	 */
	public Integer getCapacity() {
		return capacity;
	}
	/**
	 * @param capacity the capacity to set
	 */
	public void setCapacity(Integer capacity) {
		this.capacity = capacity;
	}
	
}
 
 
 
package test1;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;

/**
 * @author zhuc
 * @version 2012-5-20 下午7:47:52
 */
@WebService
@SOAPBinding(style = SOAPBinding.Style.RPC)
public class Message {

	/**
	 * @param userName
	 * @return
	 */
	@WebMethod(operationName = "toSayHello", action = "sayHello", exclude = false)
	@WebResult(name = "returnWord")
	// 自定义该方法返回值在WSDL中相关的描述
	public String sayHello(@WebParam(name = "userName") String userName) {
		return "Hello:" + userName;
	}

	/**
	 * @param name 
	 * @return
	 * @throws Exception 
	 */
	@WebMethod(operationName = "getCar", action = "getCar")
	@WebResult(name = "returnCar")
	public Car getCar(String name) throws Exception{
		Car c = new Car();
		c.setName(name);
		c.setCapacity(100);
		System.out.println("return a Car: " + name);
		return c;
	}
}
 
使用命令 wsgen -cp ./bin -r ./src/test1/wsgen -s ./src -d ./bin -wsdl test1.Message ,得到wsdl文件
(需要先在工程目录下src/test1下新建目录wsgen)
如果发布webservice的java类的方法中有异常声明,wsgen命令会在test1目录下自动新建目录jaxws,并生成Exception实体bean类,如本例中生成ExceptionBean.java (在指定的wsgen目录中生成wsdl文件和xsd文件)
 


 

 
而后发布Web Service
 
package test1;

import javax.xml.ws.Endpoint;

/**
 * @author zhuc
 * @version 2012-5-20 下午7:53:00
 */
public class StartServer {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Endpoint.publish("http://localhost:8080/Message", new Message());
		System.out.println("Server已启动");
		
//		wsgen -cp ./bin -r ./src/test1/wsgen -s ./src -d ./bin -wsdl test1.Message
//		wsimport -d ./bin -s ./src -p wsimport.url http://localhost:8080/Message?wsdl
//		wsimport -d ./bin -s ./src -p wsimport.file ./src/test1/wsgen/MessageService.wsdl
	}

}
 
 
在浏览器中输入url  http://localhost:8080/Message?wsdl  即可发现WebServices 已发布成功。
 
客户端调用
还是在工程目录下使用wsimport命令,根据wsdl描述生成的客户端执行类,下面2种方式都可以。
wsimport -d ./bin -s ./src -p wsimport.url http://localhost:8080/Message?wsdl
wsimport -d ./bin -s ./src -p wsimport.file ./src/test1/wsgen/MessageService.wsdl 
(关于wsgen和wsimport的具体和使用方法清参考文章 http://zhuchengzzcc.iteye.com/blog/1535066 )


 我们发现2种方式wsimport生成的客户端文件完全一样,接着我们只要新建一个客户端测试类执行(RunClient.java)。
package wsimport.url;

/**
 * @author zhuc
 * @version 2012-5-20 下午8:20:23
 */
public class RunClient {

	/**
	 * @param args
	 * @throws Exception_Exception 
	 */
	public static void main(String[] args) throws Exception_Exception {
		MessageService ms = new MessageService();
		Message m = ms.getMessagePort();
		System.out.println("客户端打印:");
		System.out.println(m.toSayHello("hello, java6 webservice"));
		Car c = m.getCar("zhuc-car");
		System.out.println(c.getName());
		System.out.println(c.getCapacity());
	}

}
 
输出结果:
客户端打印:
Hello:hello, java6 webservice
zhuc-car
100
  • 大小: 5.7 KB
  • 大小: 7 KB
分享到:
评论
1 楼 xpxxxxxxyou 2012-11-07  
  这个可以有

相关推荐

    基于 .NET, Java and MS SOAP Toolkit进行Web Services 的客户端调用程序例子

    本篇文章将深入探讨如何使用.NET、Java和Microsoft SOAP Toolkit来实现Web服务的客户端调用。 首先,让我们关注.NET框架。在.NET环境中,我们可以利用.NET Framework的System.Web.Services客户端代理类来调用Web...

    Java与.NET 的Web Services相互调用

    对于.NET做客户端调用Java Web Services,步骤相对类似。首先,你需要在.NET中创建一个Web服务项目,例如使用ASP.NET创建一个简单的服务。然后,公开一个Web服务方法,如`Service1.asmx.cs`中的`getSample`方法。 ...

    Java webservice cxf客户端调用demo和服务端

    Java WebService CXF客户端调用和服务端的实现是企业级应用程序中常见的通信方式,它基于标准的SOAP(Simple Object Access Protocol)协议,提供了一种在分布式环境中交换信息的方法。CXF是一个开源框架,它简化了...

    Springboot整合CXF发布Web service和客户端调用(用户和密码验证)

    要创建客户端调用这个Web服务,我们需要生成客户端代理类。CXF提供了`wsdl2java`工具,可以基于Web服务的WSDL文件生成客户端代码。你可以使用Maven的CXF插件或者命令行工具来执行此操作。 生成客户端代码后,你可以...

    JAX-WS_Java API for XML Web Services

    JAX-WS(Java API for XML Web Services)是Java平台上用于创建Web服务和Web服务客户端的核心API。这个标准由Java社区进程(JCP)制定,旨在简化面向服务架构(SOA)的实现。JAX-WS允许开发者使用Java编程语言来构建...

    webservices客户端方式调用接口

    我们的讨论将主要集中在SOAP Web服务的客户端调用上,因为这是标题中提到的。 1. **创建Web服务客户端** - **WSDL(Web Services Description Language)**:要调用一个Web服务,首先需要获取其WSDL文件,这是一个...

    java调用exchange web services

    Java调用Exchange Web Services(EWS)是一种常见的技术实践,用于与Microsoft Exchange Server进行交互,进行邮件发送、日历管理、联系人同步等任务。EWS是Exchange Server提供的一组基于SOAP协议的Web服务接口,...

    WebServices服务端和客户端DEMO

    总结来说,"WebServices服务端和客户端DEMO"涵盖的内容广泛,包括Spring Boot的使用、Apache CXF的集成、服务端Web Services的创建、以及客户端的SOAP请求和响应处理。理解这些概念和技术对于开发分布式系统和实现跨...

    webservices客户端

    3. **编译和使用客户端**:编译生成的Java代码,然后在你的应用程序中实例化客户端对象,调用其方法以与Web服务交互。 ### 结论 Web服务客户端生成器是开发人员的有力工具,能够快速集成Web服务并与之交互。理解...

    java利用 xfire实现 webservices 服务端与客户端

    Java使用XFire实现Web服务(WebServices)是Java开发中的一种常见技术,它允许应用程序通过网络交换数据。XFire是一个轻量级、高性能的框架,它简化了在Java应用程序中创建和消费Web服务的过程。本篇文章将深入探讨...

    C#调用JavaWebService(客户端)

    2. **C#客户端调用**: 在C#中,我们可以利用.NET Framework提供的`System.ServiceModel`命名空间,尤其是`SoapHttpClientProtocol`类(在较新版本中,可以使用`System.ServiceModel.ClientBase<TChannel>`或`...

    Java调用.net webservices实例

    本教程将通过一个具体的实例,讲解如何使用Java调用.NET Webservices,帮助初学者理解和掌握这两种技术的结合使用。 首先,理解Web Services的基本概念至关重要。Web Services是一种基于网络的、标准化的模块化应用...

    java webservices例子,java webservices,webservices

    总结,这个Java Web服务示例涵盖了从创建服务到客户端调用的全过程,包括使用MyEclipse作为IDE,JDK 1.6作为开发环境,以及Tomcat和JBoss作为应用服务器。理解这些基本概念和步骤对于任何Java开发者在构建分布式系统...

    Java+Axis2调用Web Services 网络接口

    Java和Axis2是开发Web服务客户端的重要工具,用于调用基于SOAP协议的Web服务。本文将深入探讨如何利用Java和Axis2库来实现这一功能,同时结合提供的代码示例进行详细解析。 首先,Web服务是一种通过网络进行通信的...

    java调用webservices

    本文详细介绍了如何使用Java调用WebServices的过程,包括了从环境搭建、工具使用到客户端代码编写等多个环节。希望这些内容能够帮助读者更好地理解和掌握这一技术。在未来的学习和工作中,我们还可以进一步探索更...

    WebServices服务接口调用---用ducument方式应用

    标题中的“WebServices服务接口调用---用document方式应用”指的是使用XML文档作为消息交换格式来调用Web服务接口的一种方法。 在Web服务中,有两种主要的消息交换模式:RPC(Remote Procedure Call)风格和...

Global site tag (gtag.js) - Google Analytics