你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:技术专栏 / Java专栏
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/Service/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.6u25(1.6.0_25-b06),问题解决!

package org.duke.jaxws.server;

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

@WebService
public class Hello {

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

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

 

客户端:

    在命令行输入命令 wsimport -s[文件夹名] -p [包名] -keep [发布的服务地址?wsdl] 生成客户端代码,如生成本例的客户端代码”
wsimport -s src -p org.duke.jaxws.client -keep http://localhost:8080/Service/Hello?wsdl",当然,前提是你已经配好了JAVA环境变量。

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

package org.duke.jaxws.test;   www.2cto.com

import org.duke.jaxws.client.Hello;
import org.duke.jaxws.client.HelloService;

public class HelloClient {
    public static void main(String[] args) {
        Hello hello = new HelloService().getHelloPort(); 
        String s = hello.sayHello("World!"); 
        System.out.println(s);
    }

}

 

 

执行代码,输出:Hello World!

  推荐精品文章

·2024年12月目录 
·2024年11月目录 
·2024年10月目录 
·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089