`

webservice入门篇(转)

阅读更多
webservice入门篇(转)

一、实验环境
        win2k + jdk1.6  + javee5.0  + Myeclipse5.1
         jdk和javee5.0均可从http://java.sun.com/javase/downloads/index.jsp下载,安装文件名为jdk-6-windows-i586.exe,java_ee_sdk-5_02-windows.exe;没有myeclipse的也可以用eclipse代替,只要ide能执行ant脚本就可以.

二、第一个最简单的例子
          jsee5安装以后会在系统中建立一个Application Serverpe9,这是sun自带的网络服务器,和tomcat、weblogic的性质类似。
      在D:\Sun\SDK\samples\javaee5\webservices\hello-jaxws下有一个自带的web service入门例子,(D:\Sun\SDK\为我机器上javaee5的安装路径)
我们就先实验它,来理解webservice的本质
     1、把jdk的安装路径如D:\Java\jdk1.6.0\bin 加到系统的path环境变量中
     2、运行sun自带的网络服务器,具体方法为
         开始->程序->Sun Microsystems->Application Server PE 9->Start Default Server
        然后当弹出的cmd窗口中出现提示“按任意键继续时”输入回车,窗口会关闭,此时在浏览器输入http://localhost:8080,应该出现如下内容:
       Sun Java System Application Server Platform Edition 9.0 
       Your server is up and running!
       说明服务器已经启动了

    3、在Myeclipse打开刚才的例子目录D:\Sun\SDK\samples\javaee\webservices\hello-jaxws下的build.xml文件,这个一个ant脚本,具体含义我们以后再讲,现在先执行它
    4、在build.xml文件中单击右键,在弹出菜单中选择"run as"->"1 antbuild",此时build.xml里的内容会被执行,在Myeclipse的console中会输出:
        buildfile: D:\Sun\SDK\samples\javaee5 \webservices\hellojaxws\build.xml
        init:compile-deploy-service:
        [echo] d:/Sun/SDK
        get-artifacts-windows:
        get-artifacts-unix:
        get-artifacts:
        compile-client:
        [javac] Compiling 1 source file to D:\Sun\SDK\samples\javaee5\webservices\hello-jaxws\build
        run-client-windows:
        [exec] Hello result = Hello Administrator!
        run-client-unix:
        run-client:
        all:
        BUILD SUCCESSFUL
        Total time: 43 seconds

        其中
        [exec] Hello result = Hello Administrator!
        的输出结果说明客户端调用服务器的webservice已经成功。
        第一个例子就完成了。我们下面会对这个例子进行详细讲解.



三、例子源代码剖析
       D:\Sun\SDK\samples\javaee5\webservices\hello-jaxws(以后简称为hello-jaxws)
项目里的源文件只有三个:(1) hello-jaxws\src\endpoint\Hello.java   提供webservice的服务器端实现类(2)hello-jaxws\src\client\Client.java  调用webservice的客户端测试类(3)hello-jaxws\build.xml  自动编译的ant脚本



下面我们把这三个文件的内容看一下
     1、服务器端的service实现类文件Hello.java,


     /* src\endpoint\Hello.java文件的内容 */
     package endpoint;
     import javax.jws.WebService;
     @WebService
     public class Hello
     {
        public String getHello(String name)
        {
             return "Hello " + name + "!";
        }
     }
    有这个文件可以看出,编写一个service的实现类,把编写普通的java类差不多,只不过又多了三点:
           ①要在该类前一个@WebService说明,
           ②引入javax.jws.WebService;
           ③在公开的方法前加@WebMethod说明,如果不加的话,所有的public方法都会自动变成service的对外接口.
    2、客户端测试类的实现文件
     package client;
     import javax.xml.ws.WebServiceRef;
     import endpoint.HelloService;
     import endpoint.Hello;
     public class Client
     {
         @WebServiceRef(wsdlLocation="http://localhost:8080/Hello/HelloService?WSDL")
         static HelloService service;
         public static void main(String[] args)
         {
                 Client client = new Client();
                 client.doHello();
         }
         public void doHello()
         {
             try
             {
                  Hello port = service.getHelloPort();
                  String ret = port.getHello(System.getProperty("user.name"));
                  System.out.println("Hello result = " + ret);
              }catch(Exception e){
                        e.printStackTrace();
              }
         }
    }
    客户端调用代码要点为:
    ①导入WebServiceRef包
       import javax.xml.ws.WebServiceRef;
    ②导入本地生成的stub类,另外编译时也要指明stub类的路径
       import endpoint.HelloService;
       import endpoint.Hello;
    ③指明服务器的wsdl路径
       @WebServiceRef(wsdlLocation="http://localhost:8080/myhello/HelloService?WSDL")
    ④声明一个静态的service对象
       static HelloService service;
    ⑤对要调用的远程方法声明一个代理对象,通过代理来调用真正的远程方法
       Hello port = service.getHelloPort();
       String ret = port.getHello(System.getProperty("user.name"));
    3、ant 脚本build.xml

   <!-- ant 脚本build.xml的内容 -->
   <?xml version="1.0" encoding="UTF-8"?>
   <project name="hello-jaxws" default="all" basedir=".">
   <!-- include user specific build properties -->

   <!-- 导入预先j2ee预先写好的设置文件--> <property file="../../../bp-project/build.properties"/>
       <property file="${user.home}/build.properties"/>
       <property file="../../../bp-project/app-server.properties"/> <!-- 设置发布目录和类的输出目录 -->
       <property name="autodeploydir" value="${javaee.domaindir}/autodeploy"/>
       <property name="classesdir" value="./build"/> <!-- 设置java的类库路径 -->
       <path id="classpath">
               <pathelement location="${javaee.home}/lib/j2ee.jar"/>
               <pathelement location="${classesdir}"/>
       </path> <!-- 项目的最终任务 -->
       <target name="all" depends="run-client"> <!--antcall target="restore"/--> </target>
       <!-- 测试操作系统环境-->
       <target name="init">
            <condition property="windows">
                   <os family="windows" />
            </condition>
            <condition property="unix">
                   <os family="unix" />
            </condition>
       </target>
  <!-- 编译服务器端并把它自动发布到sun的服务器上 -->
       <target name="compile-deploy-service" depends="init">
             <mkdir dir="${classesdir}"/>
             <echo message="${javaee.home}"/>
             <javac srcdir="./src" includes="endpoint/**" destdir="${autodeploydir}" classpath="${javaee.home}/lib/j2ee.jar"/>
             <waitfor maxwait="100" maxwaitunit="second">
             <or>
                  <available file="${autodeploydir}/endpoint/Hello.class_deployed"/>
                  <available file="${autodeploydir}/endpoint/Hello.class_deployFailed"/>
              </or>
          </waitfor>
          <condition property="deploy_succeeded">
                <available file="${autodeploydir}/endpoint/Hello.class_deployed"/>
          </condition>
          <condition property="deploy_failed">
                <available file="${autodeploydir}/endpoint/Hello.class_deployFailed"/>
          </condition>
     </target>
     <target name="get-artifacts" depends="compile-deploy-service,get-artifacts-windows,get-artifacts-unix"/>
<!-- 生成客户端所需的stub -->
     <target name="get-artifacts-windows" if="windows">
         <exec executable="${javaee.home}/bin/wsimport.bat">
             <arg line="-keep -d ${classesdir} http://${javaee.server.name}:${javaee.server.port}/Hello/HelloService?WSDL"/>
          </exec>
     </target>
     <target name="get-artifacts-unix" if="unix">
         <exec executable="${javaee.home}/bin/wsimport">
             <arg line="-keep -d ${classesdir} http://${javaee.server.name}:${javaee.server.port}/Hello/HelloService?WSDL"/>
         </exec>
     </target>
    <!-- 编译客户端 -->
     <target name="compile-client" depends="get-artifacts">
         <javac srcdir="./src/client" destdir="${classesdir}">
             <classpath refid="classpath"/>
         </javac>
     </target>

     <target name="run-client" depends="compile-client,run-client-windows,run-client-unix"/>

     <!-- 执行客户端 -->
     <target name="run-client-windows" if="windows">
         <exec executable="${javaee.home}/bin/appclient.bat" dir="${classesdir}">
             <arg value="client.Client"/>
         </exec>
     </target>
     <target name="run-client-unix" if="unix">
          <exec executable="${javaee.home}/bin/appclient" dir="${classesdir}" failifexecutionfails="false">
               <arg value="client.Client"/>
          </exec>
     </target>

   <!-- 以下几个任务用与清理和卸载-->
    <!-- 删除生成的类文件-->
    <target name="clean">
          <delete dir="${classesdir}"/>
    </target>
    <!-- 删除和卸载服务器的webservice-->
    <target name="restore">
          <delete>
                  <fileset dir="${autodeploydir}/endpoint" includes="Hello*.*"/>
          </delete>
     </target>
     <target name="undeploy">
         <antcall target="restore"/>
     </target>
  </project>

ps:原文载傲慢天使的天空http://yangjinhappy.iteye.com/blog/164761,不过不知道怎么格式很不好,看着眼睛不舒服,所以转过来
分享到:
评论

相关推荐

    Java WebService入门实例

    通过这个简单的Java WebService入门实例,我们可以了解到如何使用Java来创建、发布和调用一个基本的WebService。实际开发中,WebService还涉及到更多复杂的应用,如安全性、事务处理、错误处理等,这些都是进阶学习...

    WebService入门案例java工程代码

    本篇将详细讲解基于CXF框架的WebService入门案例,以及如何将其与Spring框架整合。 **1. CXF框架介绍** Apache CXF是一个开源的Java框架,用于构建和部署SOAP和RESTful WebServices。CXF不仅提供了SOAP服务的支持...

    WebService CXF学习-入门篇.pdf

    **WebService CXF 学习——入门篇** **一、WebService CXF 由来与目标** Apache CXF 是一个流行的开源框架,它源自 ObjectWeb Celtix 和 CodeHaus XFire 的合并,这两个项目分别由 IONA 公司和业界知名SOAP堆栈...

    webService入门

    【WebService入门】 Web服务是一种基于互联网的标准协议,用于应用程序之间的通信。它允许不同的系统通过互联网交换数据,使得软件能够跨越组织和技术平台的界限进行交互。Web服务的核心技术包括SOAP(Simple ...

    onvif开发了解webservice与wsdl的关系入门.rar

    这个压缩包文件"onvif开发了解webservice与wsdl的关系入门.rar"是关于ONVIF开发的一个资料集合,其中涉及到的关键技术是Web服务(Web Service)和WSDL(Web Services Description Language)之间的关系。 Web服务是...

    WebService

    ### WebService 在 Java 中的基础应用 ...以上就是关于 Java 方面的 WebService 入门级教程的主要内容。希望这些基础知识能够帮助初学者建立起对 WebService 的基本认识,并能够在实际开发中运用这些技术。

    c#Webservice的简单demo

    本篇文章将详细讲解C# Web服务(Webservice)的基础知识,以及如何创建一个简单的C# Webservice demo。 首先,我们需要理解什么是Web服务。Web服务是一种基于互联网标准的应用程序接口(API),它允许两个或多个...

    webservice的Axis2入门教程java版

    通过这篇Java版的Axis2入门教程,我们了解到如何轻松地利用Axis2构建和发布WebService,无需繁琐的配置文件。这种简化的方法使得开发人员可以更加专注于服务逻辑,而不用过于关心服务的底层实现。同时,由于Axis2的...

    使用CXF发布和调用webservice之HelloWorld入门

    ### 使用CXF发布和调用WebService之HelloWorld入门详解 #### 一、概述 本文将详细介绍如何使用Apache CXF框架来实现一个简单的WebService——HelloWorld示例。此示例不仅适用于初学者理解WebService的基本概念,...

    CXF入门 -- 第一个简单webService

    【CXF入门 -- 第一个简单webService】 Apache CXF 是一款强大的开源服务框架,它用于构建和开发服务,包括Web服务。本篇文章将带你入门CXF,通过创建一个简单的Web服务来理解其基本概念和工作流程。 1. **CXF简介*...

    WebService CXF学习文档

    WebService CXF学习——入门篇 1.CXF由来 2.HelloWorld 3.WSDL描述 WebService CXF学习——进阶篇 1.SOAP讲解 2.JAX-WS讲解 3.对象传递 WebService CXF学习——高级篇(一)(二) 1.整合Spring框架 2.CXF...

    WebService (一) CXF 入门 HelloWorld

    **WebService (一) CXF 入门 HelloWorld** 在IT行业中,WebService是一种基于开放标准(如XML、WSDL和SOAP)的互联网通信协议,允许不同系统之间的应用程序进行互操作。本篇将详细介绍如何使用Apache CXF框架来创建...

    WebService之Axis2介绍与入门

    本篇文章将深入探讨Axis2的基础概念、工作原理以及如何进行入门实践。 **1. WebService基础知识** 在理解Axis2之前,我们需要了解什么是Web服务。Web服务是一种通过互联网交换数据的方式,它基于开放标准(如XML、...

    AXIS2入门+进阶+webservice实例

    入门篇可能涵盖了以下内容: 1. **AXIS2基础概念**:介绍AXIS2的基本架构,包括模块、服务、消息接收者和服务部署等核心概念。 2. **环境配置**:如何安装和配置Java Development Kit (JDK)、AXIS2的运行时环境以及...

    Window Mobile SmartPhone智能手机软件开发入门篇

    标题中的“Window Mobile SmartPhone智能手机软件开发入门篇”是指针对搭载Windows Mobile操作系统的智能手机进行应用程序开发的初级教程。描述中提到的开发环境主要是利用Visual Studio .NET 2003来构建针对...

    使用xfire+spring构建webservice

    文件名“webservice_helloworld”可能是一个简单的Web服务示例,引导初学者入门。 总的来说,这篇教程应该涵盖了从创建服务到发布的全过程,通过具体的代码示例帮助读者掌握使用XFire和Spring构建Web服务的方法。...

    Delphi WebService 操作数据库

    本篇文章将深入探讨如何使用Delphi WebService操作数据库,特别是读取数据库数据,这对于初学者来说是一个很好的入门点。 首先,我们需要了解Web服务的基本概念。Web服务是一种基于互联网的、平台无关的应用程序...

    Labview创建webservice与C#进行简单的http通信(post,get)

    本篇将深入探讨如何使用LabVIEW创建Web服务并结合C#进行HTTP通信,特别是POST和GET请求的实现。LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是一种图形化编程环境,广泛应用于工程、科学和教育...

    WebService的实现——CXF学习笔记

    总结,本篇学习笔记通过一个简单的CXF服务端和客户端示例,介绍了CXF框架的使用,包括接口定义、实现、实体类以及相关配置。通过对这些概念和步骤的理解,读者可以快速入门CXF并开始创建自己的Web服务。

Global site tag (gtag.js) - Google Analytics