`
wuhongyu
  • 浏览: 406903 次
  • 性别: Icon_minigender_1
  • 来自: 哈尔滨
社区版块
存档分类
最新评论

JAVA6开发WebService (一)

阅读更多

    WebService是SOA的一种较好的实现方式,它将应用程序的不同功能单元通过中立的契约(独立于硬件平台、操作系统和编程语言)联系起来,使得各种形式的功能单元更好的集成。


W3C对他的定义是:

    A Web service is a software system designed to support interoperable machine-to-machine interaction over a network. It has an interface described in a machine-processable format (specifically WSDL). Other systems interact with the Web service in a manner prescribed by its description using SOAP messages......"

    Web service是一个软件系统,为了支持跨网络的机器之间相互操作交互而设计。它有一个机器可识别的描述格式(特别是WSDL)。不同的系统之间可以通过SOAP消息在规定的方式下相互调用。(英文不好,请指正!)



    简单的说,WebService是一种独立于特定语言、特定平台,基于网络的、分布式的模块化组件。是一个能够使用xml消息通过网络来访问的Interface,这个Interface描述了一组可访问的操作。


WebService一般分为两种:

    REST式WebService,基于HTTP协议;

    RPC式WebService,基于SOAP协议,不过SOAP也是基于HTTP传输的。

  狭义上的WebService是指第二种RPC式的WebService,也就是我们常说的那种。


JAVA中有三种WebService规范,分别是JAX-WS(JAX-RPC)、JAX-RS、JAXM&SAAJ。


    这里先说JAX-WS(Java API For XML-WebService),JDK1.6 自带的版本为JAX-WS2.1,其底层支持为JAXB。早期的JAVA Web服务规范JAX-RPC(Java API ForXML-Remote Procedure Call)目前已经被JAX-WS 规范取代,JAX-WS 是JAX-RPC 的演进版本,但JAX-WS 并不完全向后兼容JAX-RPC。


    废话不多说了,先来写一个最简单的例子:


服务器端:

    在想要发布为WebService的类上加上注解@WebService,这个类的方法就变为WebService的方法了,再通过Endpoint的publish方法,发布这个服务,到此,一个最简单的WebService搞定。运行main方法,在浏览器里输入”http://localhost:8080/com.why.webservice.Hello?wsdl 会看到你的WSDL信息。


    不过需要注意一 下, 有的同学如果不加@SOAPBinding(style = SOAPBinding.Style.RPC)这行代码会报错:

com.sun.xml.internal.ws.model.RuntimeModelerException: runtime modeler error: Wrapper class com.why.webservice.jaxws.SayHello is not found. Have you run APT to generate them?

网上资料说只要将JDK升级到1.6u17就可以了,我直接升级到了1.6u22(1.6.0_22-b04),问题解决!

 

package com.why.webservice;

import javax.jws.WebService;
import javax.xml.ws.Endpoint;

/**
 * 
 * @author why
 *
 */
@WebService
public class Hello {

	public String sayHello(String name) {
		return "Hello " + name;
	}

	public static void main(String[] args){
		Endpoint.publish("http://localhost:8080/com.why.webservice.Hello", new Hello());
		System.out.println("Success");
	}
}
 

客户端:

    在命令行输入命令 wsimport -p [包名] -keep [发布的服务地址?wsdl] 生成客户端代码,如生成本例的客户端代码”wsimport -p com.why.client -keep http://localhost:8080/com.why.webservice.Hello?wsdl“,当然,前提是你已经配好了JAVA环境变量。控制台会显示



利用这些生成的客户端代码,就可以调用这个WebService服务了:

 

package com.why.client;

/**
 * 
 * @author why
 *
 */
public class HelloClient {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Hello hello = new HelloService().getHelloPort();
		String s = hello.sayHello("why");
		System.out.println(s);
	}
}

 

执行代码,输出:Hello why

  • 大小: 44.3 KB
13
0
分享到:
评论
14 楼 lcg711624 2014-06-17  
找不到生成的客户端代码的看这里:
命令行里如果是在D:\test>下执行wsimport -p com.why.client -keep http://localhost:8080/com.why.webservice.Hello?wsdl
生成的客户端代码就在D:\test\com\why\client下面,明白了么?就是在你执行命令所在的路径下再生成com.why.client这样的包,然后在里面生成客户端代码
13 楼 guodage003 2013-12-26  
真心找不到HelloService在哪,bin里的client文件夹中只有这三个文件啊:classes.jsa,jvm.dll , Xusage.txt
12 楼 Lra 2013-09-26  
Hello hello = new HelloService().getHelloPort();  中的HelloService类哪里来的呀?!怎么就是找不到啊
11 楼 Lra 2013-09-26  
SangBillLee 写道
@1楼,HelloService在Hello class所在所在项目的包com\why\client下,把里面的java文件copy到src的com.why.client包下,即可。

还是找不到呢?HelloService在哪里呢?
10 楼 xzs603 2013-07-23  
呵呵,感觉jdk内置的webservice比axis用起来简单清晰了。
9 楼 SangBillLee 2013-06-19  
@1楼,HelloService在Hello class所在所在项目的包com\why\client下,把里面的java文件copy到src的com.why.client包下,即可。
8 楼 穆绯 2013-05-02  
穆绯 写道
我第一次是成功执行了的,输出:Hello why 。不过后来又新建了个项目,将之前的都删掉了,步骤一样,在命令行里输入;wsimport -p com.why.client -keep http://localhost:8080/com.why.webservice.Hello?wsdl,却报错了,说
http://localhost:8080/com.why.webservice.Hello?wsdl is unreachable,Failed to parse the WSDL。请问这是为什么呢?


问题已经解决,要先把服务端跑起来,然后再去命令行输入命令。直接在Hello类里面右键》》run as》》java application就可以了。
7 楼 穆绯 2013-05-02  
我第一次是成功执行了的,输出:Hello why 。不过后来又新建了个项目,将之前的都删掉了,步骤一样,在命令行里输入;wsimport -p com.why.client -keep http://localhost:8080/com.why.webservice.Hello?wsdl,却报错了,说
http://localhost:8080/com.why.webservice.Hello?wsdl is unreachable,Failed to parse the WSDL。请问这是为什么呢?
6 楼 youjianbo_han_87 2012-03-12  
而且升级到 _26 后,方法必须 @SOAPBinding(style = SOAPBinding.Style.RPC)
5 楼 youjianbo_han_87 2012-03-12  
Exception in thread "main" java.lang.NoSuchMethodError: com.sun.xml.internal.bin
d.v2.runtime.JAXBContextImpl.<init>([Ljava/lang/Class;Ljava/util/Collection;Ljav
a/util/Map;Ljava/lang/String;ZLcom/sun/xml/internal/bind/v2/model/annotation/Run
timeAnnotationReader;ZZ)V
        at com.sun.tools.internal.xjc.reader.xmlschema.bindinfo.BindInfo.getJAXB
Context(BindInfo.java:316)
        at com.sun.tools.internal.xjc.reader.internalizer.SCDBasedBindingSet.app
ly(SCDBasedBindingSet.java:195)
        at com.sun.tools.internal.xjc.ModelLoader.createXSOM(ModelLoader.java:50
2)
        at com.sun.tools.internal.xjc.api.impl.s2j.SchemaCompilerImpl.bind(Schem
aCompilerImpl.java:216)
        at com.sun.tools.internal.xjc.api.impl.s2j.SchemaCompilerImpl.bind(Schem
aCompilerImpl.java:69)
        at com.sun.tools.internal.ws.processor.modeler.wsdl.JAXBModelBuilder.bin
d(JAXBModelBuilder.java:120)
        at com.sun.tools.internal.ws.processor.modeler.wsdl.WSDLModeler.buildJAX
BModel(WSDLModeler.java:2173)
        at com.sun.tools.internal.ws.processor.modeler.wsdl.WSDLModeler.internal
BuildModel(WSDLModeler.java:173)
        at com.sun.tools.internal.ws.processor.modeler.wsdl.WSDLModeler.buildMod
el(WSDLModeler.java:119)
        at com.sun.tools.internal.ws.wscompile.WsimportTool.run(WsimportTool.jav
a:170)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at com.sun.tools.internal.ws.Invoker.invoke(Invoker.java:100)
        at com.sun.tools.internal.ws.WsImport.main(WsImport.java:38)

E:\workspace\Webservice\src>

我的jdk 版本是 java version "1.6.0_24"
4 楼 wang_zhongsheng 2011-12-30  
用wsimport生成的代码在安装的JDK包的bin文件夹中。
3 楼 thzthbthy 2011-12-26  
这个客户端生成的代码在哪里哦。找不到呢
2 楼 wuhongyu 2011-10-26  
冬之语2008 写道
Hello hello = new HelloService().getHelloPort();  中的HelloService类哪里来的呀?!


是生成的客户端代码
1 楼 冬之语2008 2011-10-26  
Hello hello = new HelloService().getHelloPort();  中的HelloService类哪里来的呀?!

相关推荐

    Java开发WebService实例

    ### Java开发WebService实例详解 在IT领域,尤其是企业级应用开发中,WebService作为一种标准化的、跨平台的服务交互方式,被广泛应用于系统间的数据交换与服务调用。本文将基于给定的“Java开发WebService实例”...

    Java 6 开发 WebService

    【Java 6 开发 WebService】是关于使用Java 6版本进行Web服务开发的技术主题。Web服务是一种基于网络的应用程序接口,它允许不同系统之间的数据交换。在这个场景中,我们将探讨如何利用Java 6的新特性,通过注解轻松...

    JAVA6开发WebService (三)——几个概念

    在Java 6中开发Web服务(WebService)是企业级应用中的常见任务,它允许不同的系统之间通过网络交换数据。本文将深入探讨Web服务的几个关键概念,帮助开发者更好地理解和使用这项技术。 首先,我们来理解什么是Web...

    java webService接口开发案例

    Java WebService接口开发是将Java应用程序暴露为网络服务的一种方式,允许不同系统间的数据交换和交互。本案例将深入探讨如何使用Java实现Web服务的创建、发布和调用。 一、理解WebService WebService是一种基于...

    Java6开发WebService入门

    ### Java6开发WebService入门 #### 一、背景与意义 在早期的Web服务开发中,开发者通常会使用CXF、Axis2、XFire等工具来构建基于Java的应用程序。这些工具之所以被广泛采用,主要是因为它们能够提供广泛的兼容性和...

    Java6开发WebService详细啊.docx

    【Java6开发WebService详解】 在Java6中,开发Web Service变得更加简单和直接,无需依赖额外的框架如CXF、Axis2或XFire。Java6引入了内置的JAX-WS(Java API for XML Web Services)支持,使得创建和发布Web ...

    java开发webservice的简单例子

    Java开发Web服务(Web Service)是一种常见的技术,用于在不同应用程序之间实现互操作性。Web服务基于开放标准,如XML(可扩展标记语言)、WSDL(Web服务描述语言)和SOAP(简单对象访问协议),使得服务提供者可以...

    java 利用webservice传输文件

    在IT行业中,Java是一种广泛应用的编程语言,而Web服务(Web Service)则是一种基于标准的、平台无关的方式,使得不同的应用...理解并熟练掌握这一技术,对于Java开发者来说,无疑会提升其在企业级应用开发中的能力。

    Java6上开发WebService的实例

    在Java 6中,主要使用以下组件来开发WebService: 1. **Service端点接口(SEI)**:定义了服务的操作,使用`@WebService`注解标识。例如: ```java import javax.jws.WebService; @WebService public interface ...

    Java cxf开发webservice,分别有客户端和服务端

    2.用cxf开发webservice 3.这个服务端和客户端的小demo 在服务端 对外开放接口服务,然后在客户端 调用服务端的方法, 实现客户端(一个javaweb项目)对服务端(javaweb项目)方法的调用, 实际上就是发送和接收消息...

    java6创建webservice,原来这么简单啊

    在Java 6中创建Web服务(WebService)是一个相对简单的过程,尤其对于那些熟悉JAX-WS(Java API for XML Web Services)的开发者来说。本文将详细介绍如何利用Java 6的API来构建一个基本的SOAP(Simple Object ...

    Java6上开发WebService

    在Java 6中开发Web服务(WebService)是企业级应用中...同时,通过提供的HTML文档(Java6上开发WebService.html)和相关资源(java6WS、Java6上开发WebService_files),可以更深入地学习和实践Java 6 Web服务开发。

    Java与.net开发webservice详解大全

    【Java与.NET开发WebService详解大全】 在IT领域,WebService是一种基于标准协议(如SOAP和WSDL)的跨平台、跨语言的通信机制,允许不同系统间的应用进行交互。本篇文章将详细探讨使用Java和.NET(VB.NET为例)开发...

    java定时进行webservice数据上报

    Java定时进行WebService数据上报是一种常见的任务调度需求,用于定期向远程服务器发送数据,例如日志、统计信息或者业务数据。这个过程涉及到Java编程语言、WebService技术和时间触发机制。以下将详细讲解这些知识点...

    JAVA6开发WebService (四)——SAAJ调用WebService

    在本篇主题“JAVA6开发WebService(四)——SAAJ调用WebService”中,我们将探讨如何使用Java API for XML Messaging (SAAJ)来与WebService进行交互。SAAJ是Java平台中用于处理SOAP消息的API,它提供了创建、解析和...

    java 调用 odi webservice

    Java 调用 ODI webservice 是实现数据同步的一种常见方式。ODI(Oracle Data Integrator)是一种数据集成平台,提供了webservice接口,允许用户通过webservice调用ODI方案执行,从而实现数据的同步。 在本文档中,...

    java android 调用webservice

    在Android开发中,Java语言是主要的编程工具,而Webservice是一种通过网络提供服务的方式,通常基于HTTP协议,使得移动应用、Web应用等可以互相交换数据。本篇将详细讲解如何在Android应用中使用Java调用Webservice...

    Java访问c#开发的webservice

    ### Java访问C#开发的Webservice详解 #### 一、引言 在现代软件开发过程中,尤其是对于大型项目而言,采用分布式系统架构已经成为一种常态。分布式应用能够将复杂的业务逻辑分解并部署到不同的服务器上,从而提高...

    java axis 调用webservice服务端

    Axis是Apache软件基金会开发的一个开源项目,它提供了一种方便、高效的方式,使得Java应用程序能够作为客户端来消费或作为服务端来发布WebService。在这个过程中,Axis起到了一个SOAP(Simple Object Access ...

Global site tag (gtag.js) - Google Analytics