`

用Java 开发 WebService Axis简单实例

阅读更多
在开发之前, 先了解一下AXIS,axis目前出现的2版本以其灵活性,快速开发工具的集成高于xfire而使用者居其上.用Eclipse开发,一开始就会想到xfire,它是集成与Eclipse的.所以
开发起来非常方便,现在我们来看看axis的开发是怎么样的? 看完本文后,你可以相互比较一下xfire与它的差别.

首先,创建axis环境 .(注:我事先说明.这是对此版本的基本功能与简单实例的描术)

本人的开发环境eclipse3.2 ,tomcat5.0.28 ,jdk1.4 axis_1.4目前最新版
这里主要讲一下webservice的一个开发过程,
1.         下载axis1.4最新版本http://apache.mirror.phpchina.com/ws/axis/1_4/
2.         将解压后的axis-1_4文件下的webapps目录下的axis目录考到
%TOMCAT_HOME%Webapps/目录下
3.         启动tomcat的.输入路径http://localhost:8080/axis - 打开axis主界面
4.        点击页面上的Validation ->查看一下你的axis 是否添加了完整的jar文件,注意,这
里要仔细看一下,自已少了什么 样的  jar文件,有时缺少了文件axis将无法正常工
作.补充一下:这里的xmlsec.jar文件如果缺少的话.  可以到这里
下载 http://xml.apache.org/security/dist/java-library/ c++的与java两个目录.
下载后把xmlsec-1.4.0.jar考到axis的lib目录下.
上面的步骤如果进行正常将会在Validation页面中就看不到有Error与Warning的
信息.好了,接下来我们开始编写代码
Axis支持三种web service的部署和开发,分别为:
1、Dynamic Invocation Interface ( DII)
2、Stubs方式
3、Dynamic Proxy方式
这里主要讲一下我的开发过程,通过这样过程,你也将初步的掌握axis 开发Webservice
的整体过程.
第一种Dynamic Invocation InterFace(DII) 开发方式
步骤1:打开eclipse创建一个新项目编写一个类.代码如下:
               public class SayHello {//这个类没有包,注意了.
                   public String say(String name){
                        return " Hello ~~" + name;
                    }
                }
步骤2:
编写好上面的类(SayHello.java)后,将源代码copy到%tomcat_home%webapps
/axis/目录下.这里要注意了,只需要把类考备到这个目录下
,然后重命名为:SayHello.jws
步骤3:
打开你的浏览器:http://localhost:8080/axis/SayHello.jws  打开页面后你会看到
  Click to see the WSDL   <--点击链接,如果你上面的步骤都正常,类也没有带
包的话,那么就生成了wsdl了.
恭喜你!到这里DII方式的服务器端编写完成了.接下来我们来看一下客户端是怎么调
用的
步骤4:DII方式的客户端的调用.
首先将axis/web-inf/lib/目录下的axis.jar,commons-discovery-0.2.jar,
comm.ons-logging-1.0.4.jar导入到刚才的项目中,因为编写客户端时
要用到这些包.客户端代码如下:
  package com.huwd.web;
  import org.apache.axis.client.Call;
          import org.apache.axis.client.Service;
  public class ToClient {
                public static void main(String args[]) throws Exception {
 
                           String urlname = "http://localhost:8080/axis/SayHello.jws";
                            //这是wsdl的绝对路径.也可以直接写成如下 ,这个没有区别.
//String urlname=”http://localhost:8080/axis/SayHello.jws?wsdl”
                           Service s = new Service();
 
                            Call call = (Call)s.createCall();
 
                          call.setOperationName("say");//注意。这里是要调用的方法名
 
                          call.setTargetEndpointAddress(urlname);//设置调用的目标url
 
                           String val = (String)call.invoke(new Object[]{"我是Blue’s Boy!"});                  //设置调用方法中的参数
 
                           System.out.println("这是webservice服务器返回给你的:>>>>"+val);
 
                     }
               }
运行结果输出:Hello ~~我是Blue’s Boy;
到此DII调用方式完成!接下来要讲的是第二种方式的调用.请继续学习第二种方式
第二种:Stubs 开发方式(stubs 故名思意,存根的方式)
  Stubs 方式相对要复杂一点.不过如果学会了这种方式,嘿嘿,那你开发的时候
 就会明显比第一种方式快了,接下来,跟我一起学吧.
步骤1:
创建环境变量,设置AXIS的环境变量.
这种方式的编码,先要设置一下命令行的环境.右键我的电脑――>属性――>
选择高级选项卡――>新建用户变量――>输入用户变量如下:
  变量名:AXIS_LIB
   变量值: E:\tomcat5.28\Tomcat 5.0\webapps\axis\WEB-INF\lib(这是本人的)
   变量名:CLASSPATH
变量值: .;%AXIS_LIB%\axis.jar;
%AXIS_LIB%\activation.jar;
%AXIS_LIB%\axis-ant.jar;
%AXIS_LIB%\commons-discovery-0.2.jar;
%AXIS_LIB%\commons-logging-1.0.4.jar;
%AXIS_LIB%\jaxrpc.jar;
%AXIS_LIB%\log4j-1.2.8.jar;
%AXIS_LIB%\mail.jar;
%AXIS_LIB%\saaj.jar;
%AXIS_LIB%\wsdl4j-1.5.1.jar;
%AXIS_LIB%\xmlsec-1.4.0.jar;
%AXIS_LIB%\dom4j-1.6.1.jar;
    变量名:AXIS_HOME
    变量值:E:\tomcat5.28\Tomcat 5.0\webapps\axis
  新建好上述的三个变量后.确定退出.
步骤2:
编码开始!这里要稍讲得详细并复杂一点了,我们上面看到了,只设置了一个普通
的参数,这里我就写一下自定义数据类型参数的传递.网上很多文章只讲到了
普通数据类型做参数传递.
 服务器端的编写,代码与注释如下:
 首先定义自定义参数类(第一个类)
    package com.web.test;

publicclass UserBean {//自定义数据类型.
     //很简单,只有一个String 与int 型
    private String name="";
    privateint age ;
    publicint getAge() {
       returnage;
    }

    publicvoid setAge(int age) {
       this.age = age;
    }

    public String getName() {
       returnname;
    }

    publicvoid setName(String name) {
       this.name = name;
    }
   
}
其次编写第二个类Webservice服务器端类
package com.web.test;

publicclass Server {//服务器端
    //服务端,传递的是一个自定义的数据类型. UserBean
    public String getBeanStr(UserBean bean){
       return"You Name:"+bean.getName() +
              " , You Age:" + bean.getAge();
    }
}
    最后编写一个deploy.wsdd文件如下:
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
           xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<!—这里的stubs为wsdd描述符中的ServiceNamespace à
<service name="stubs" provider="java:RPC">
<!—这里的ClassName就是我的服务类了,这个服务主要功能就是传递一个自定义的对象 à
<parameter name="className" value="com.web.test.Server"/>
<!—这里描术的意思是,此服务类中的方法全部享出来.value值为*号 如果你只想让你的
客户端只能调用其中一个方法时,value值改为方法名就可以了.à
<parameter name="allowedMethods" value="*"/>
<!—这个typeMapping 是类型映射,使传递的参数序列化用反序列化,一个自定义类型
在要网络上传递,那就一定得让他序列化. -->
<typeMapping
     <!—下面是反序列化类配置à
deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
        encodingStyle=http://schemas.xmlsoap.org/soap/encoding/
       <!—这是Qname名称的定义.à
        qname="ns1:user"
   <!――序列化类配置――>
       serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
     <!—我的数据参数类型类路径à
        type="java:com.web.test.UserBean"
      <!—Qname对映的keyà
        xmlns:ns1="urn:BeanService"
/>
</service>
</deployment>
到这一步,我们的服务端配置完成,整理一下思路,stubs方式调用需要
         (这里主要是为了讲述自定义类的对像传递)
    1.一个自定义类.2,一个服务端类,3.一个wsdd文件服务描术符.OK接着看.
将上面写好的两个类的class文件复制到/axis/web-inf/class目录下,只要把整个包复制过来就
行了,然后在把deploy.wsdd文件复制到/axis/web-inf/目录下.
打开控制台进入你的axis目录:
   >cd E:\tomcat5.28\Tomcat 5.0\webapps\axis\WEB-INF (我的目录)
  >java org.apache.axis.client.AdminClient
–lhttp://localhost:8080/axis/services/stubs deploy.wsdd
(说明: stubs就是刚才我们在deploy.wsdd文件里配置的<service name="stubs" )
这里是关键.这个命令就是发布这个服务.你只需这样理解它.发布成功后,你在看下你的
Axis/web-inf/目录下,多了一个server-config.wsdd文件,你可打开它看下里成的描述符
是不是跟我们写的deploy.wsdd相类似呢?
如果发布失败,那么在控制台下你将会看到一些错误信息,并仔细的解决它.
(注:一般错误的原因有这么几点,我个人在开发学习时,可能是类路径没有写对,也
可能是你的<service name="stubs" 这个名称有点错误,你要么改成别的名称试试
也有可能是你的wsdd文件里面写得不规范,最后可能就是你的命令无效,
ClassNotFoundException 错误,这个错误是因为你没有配置好axis的环境造
成的.)
发布成功后在控制台下会有提示:
Processing file deploy.wsdd
<Admin>Done processing</Admin>
OK当您发布成功后.可以开始往下写了.
步骤3:
嘿.完成了上面两个步骤,接下来的工作就是很轻松的了,我们来生成一个客户端
>cd E:\tomcat5.28\Tomcat 5.0\webapps\axis\WEB-INF (我的目录)控制台命令
>java org.apache.axis.wsdl.WSDL2Java –p client http://localhost:8080/axis/
   services/stubs?wsdl
打开axis/web-inf/目录下可以看到生成了一个client目录,OK,复制client目录,到你
的项目中.这个client就是我们的客户端代码了.
Client目录生成了:
   Server.java
ServerService.java
ServerServiceLocator.java
StubsSoapBindingStub.java
User.java
java文件;
接下来的工作就是编写一个调用类测试.代码与注释如下

package myclient;

import java.net.URL;

import javax.xml.namespace.QName;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.ser.BeanDeserializerFactory;
import org.apache.axis.encoding.ser.BeanSerializerFactory;

publicclass Test {

    publicstaticvoid main(String []args) throws Exception {
      
       QName qname = new QName("urn:BeanService","user");
      
       Service s = new Service();
      
       Call call = (Call)s.createCall();
       //注册这个bean为可序列化的.传递参数
       call.registerTypeMapping(User.class, qname, new BeanSerializerFactory(User.class,qname), new BeanDeserializerFactory(User.class,qname));
      
       //设置一下调用方法名.不设置肯定会报错的哦
       call.setOperationName("getBeanStr");
      
       //设置一下这个服务的绝对路径.
       call.setTargetEndpointAddress(new URL("http://localhost:8080/axis/services/stubs?wsdl"));
      
       //实例化一个User,这个User是生成出来的User哦.,不是原先那个,
       User u = new User();
      
       u.setAge(23);
      
       u.setName("do WebService!");
       //通知方法,并返回结果
       String str = (String)call.invoke(new Object[]{u});
      
       System.out.println(str);
      
       //out.print ==> You Name:do WebService! , You Age:23
    }
}
好了,这下完成了stubs的方式.看起来很累,其实当你开发第二个例子的时候
就不会这么累了.我已经满头大汗了,公司没开空调.

      接下来就是第三种方式了,其实第三种方式更简单了,我这里还是稍微讲一下:
第三种: Dynamic Proxy方式 (代理方式)
这个例子就以第一种方式为基础,因这服务端类的编写是一样的.
那么服务端类就是第一种方式的类了,(完成第一种方式的3个步骤)
主要讲一下客户端通过代理接口的方式调用.

接口这义
import java.rmi.Remote;
import java.rmi.RemoteException;
publicinterface SayHelloInter extends Remote{
    public String say(String name) throws RemoteException;
}

//客户端的调用类如下:
import java.net.URL;

import javax.xml.namespace.QName;
import javax.xml.rpc.Service;
import javax.xml.rpc.ServiceFactory;


publicclass Test2 {

publicstaticvoid main(String []args) throws Exception{
      
String wsdlname = "http://localhost:8080/axis/SayHello.jws?wsdl";
       //服务路径
String namespaceUrl = "http:// localhost:8080/axis/SayHello.jws";
      
       //服务名
       String serviceName = "SayHelloService";
       //服务
       String portName = "SayHello";
      
       //创建代理对像
       ServiceFactory service = ServiceFactory.newInstance();
      
       //创建远程服务
       Service s = service.createService(new URL(wsdlname), new QName(namespaceUrl,serviceName));
      
       //向上转型为接口
           AxisWebInter inter = (AxisWebInter)s.getPort(new QName(namespaceUrl,portName), AxisWebInter.class
              );
      
       System.out.println(inter.getName("Blue boy!"));
    }
}
//Out.print Hi~~ Blue boy!
好了,到现在为止三种调用方式都描术完了,不知道你有没有学会.如果还有什么问题,可
以给我留言,我会给你及时回复.如有不对的地方请指出.Thank you !

分享到:
评论

相关推荐

    Java开发WebService实例

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

    java axis webservice 开发实例

    通过这个简单的Java Axis WebService实例,你应该对Web服务的开发有了初步的认识。继续深入学习,包括理解SOAP消息结构、WSDL的细节以及如何处理更复杂的数据类型,将使你成为Web服务开发的专家。实践中不断探索,祝...

    用Java_开发_WebService_Axis简单实例

    ### 使用Java开发WebService:Axis简单实例详解 #### 一、Axis简介及安装配置 Axis是Apache组织提供的一个开源工具包,用于实现Web服务。它支持多种编程语言,并且提供了丰富的特性来帮助开发者轻松构建和发布Web...

    WebService Axis 搭建开发

    二、用Java开发WebService Axis简单实例 在使用Axis开发Web服务时,有三种主要的方法: 1. **Dynamic Invocation Interface (DII)方式** - 动态调用接口,允许直接调用Web服务方法。 2. **Dynamic Proxy方式** - ...

    java使用axis开发webservice服务端和客户端简单例子

    访问地址: http://127.0.0.1:8080/axis/services

    java-webservice-axis-例子

    在这个例子中,我们关注的是使用Apache Axis1.4库来创建和消费Web服务。Apache Axis是Java社区中最常用的Web服务工具之一,它提供了用于生成和部署Web服务的框架。 在Java中,Web服务通常通过SOAP(Simple Object ...

    java调用webservice的axis2.jar包

    总结,Java调用WebService使用Axis2.jar包时,需理解其组件功能,按照规范流程操作,结合最佳实践,可以有效地与Web服务进行交互。同时,随着技术的发展,也应关注新的Web服务框架和标准,如JAX-RS(Java API for ...

    基于axis2实现的webservice简单实现(客户端+服务端)。

    【标题】中的“基于axis2实现的webservice简单实现(客户端+服务端)”表明了本文将探讨如何使用Apache Axis2框架来创建和消费Web服务。Apache Axis2是Apache软件基金会开发的一个Web服务引擎,它提供了高效且灵活的...

    java webservice axis2简单开发实例.docx

    本文档旨在通过一个简单的实例介绍如何使用Apache Axis2来开发Java WebService。Apache Axis2是一个高性能、灵活且可扩展的服务框架,用于实现Web服务。它支持多种标准如SOAP、WS-Addressing等,并且提供了丰富的...

    Java+Axis2调用Web Services 网络接口

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

    java webservice Axis例子

    通过这个例子,初学者可以学习到如何在Java环境中使用Axis框架创建和测试Web服务,包括编写服务端代码、生成客户端代码、配置和运行Web服务,以及如何在Eclipse这样的IDE中进行调试和测试。同时,这也是一种理解Web...

    axis2webservice接口例子

    标题中的“axis2webservice接口例子”指的是使用Apache Axis2框架创建的一个Web服务接口实例。Apache Axis2是Java平台上的一款强大的Web服务开发工具,它提供了高效、灵活且可扩展的环境来构建和部署Web服务。这个...

    java_webservice_axis2简单开发实例

    【Java Webservice Axis2简单开发实例详解】 在Java开发中,Web Service是一种常见的通信机制,用于不同系统间的互操作性。Axis2是Apache组织提供的一个轻量级、高性能的Web Service框架,它使得开发者能够方便地...

    Java WebService 简单实例 方式二(axis1直接调用方式)

    ### Java WebService 简单实例 方式二(axis1直接调用方式) #### 背景介绍 在软件开发领域,特别是在企业级应用中,Web服务作为一种标准的技术规范被广泛采用,它允许不同系统间进行通信与数据交换。Java Web ...

    [JAVA]-Axis-Webservice-Demo

    【JAVA】Axis Webservice Demo详解 在Java开发中, Axis是一个强大的开源工具,它用于创建和部署Web服务。本文将详细介绍如何使用Axis进行Web服务的发布与调用,以及涉及的相关知识点。 一、Axis简介 Axis是Apache...

    WebService之Axis2实例

    WebService之Axis2实例是Web服务开发中的一个重要环节,它基于SOAP协议,允许不同平台和语言间的应用程序进行通信。本文将详细介绍Axis2实例的创建、配置和运行,以及如何利用Eclipse IDE、JDK 1.7和Tomcat 7.0进行...

    java-webservice-axis2简单开发实例.doc

    本篇文章将详细介绍如何使用Java和Axis2来创建一个简单的WebService服务。 ### 一、准备工作 1. **获取Axis2依赖**: 首先,你需要访问Apache Axis2的官方网站(http://ws.apache.org/axis/)下载适合你项目的...

    axis 实现 webservice 例子

    Apache Axis是Java平台上的一个开源工具,专门用于创建和部署Web服务,它为开发人员提供了方便的方式来实现这些服务。本篇文章将深入讲解如何使用Apache Axis1.4实现Web服务。 首先,我们需要理解Axis1.4的特点。...

    java实现webservice实例.doc

    在Java中实现WebService实例需要使用到Apache Axis工具。Axis是一个开源的WebService实现框架,提供了一个完整的WebService解决方案。它支持SOAP、WSDL和UDDI等WebService标准协议。 下面是使用Java实现WebService...

Global site tag (gtag.js) - Google Analytics