【转】Axis1.4开发

原文地址:http://www.blogjava.net/libin2722/archive/2007/11/22/162444.html

今天终于搞定,贴出来分享一下
1、在www.apache.org上下载Axis1.4,将解压后的Axis目录文件复制到%TOMCATHOME%\webapps目录下
2、重新启动Tomcat,访问http://localhost:8080/axis,如果能访问,表示Axis环境安装成功
3、在eclipse下建立webproject,将axis的jar包导入

写2个JavaBean,分别叫做Person.java和Book.java,代码如下
Book.java

package com.lucky.axis.service;

public class Book {
    private String bookname;
    private Long isbn;
    private float price;
    private Integer pages;
    public String getBookname() {
        return bookname;
    }
    public void setBookname(String bookname) {
        this.bookname = bookname;
    }
    public Long getIsbn() {
        return isbn;
    }
    public void setIsbn(Long isbn) {
        this.isbn = isbn;
    }
    public float getPrice() {
        return price;
    }
    public void setPrice(float price) {
        this.price = price;
    }
    public Integer getPages() {
        return pages;
    }
    public void setPages(Integer pages) {
        this.pages = pages;
    }

}

Person.java

package com.lucky.axis.service;

import java.util.Map;

public class Person {
    private String name;
    private int age;
    private Map skill;
    private Book mybook;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public Map getSkill() {
        return skill;
    }
    public void setSkill(Map skill) {
        this.skill = skill;
    }
    public Book getMybook() {
        return mybook;
    }
    public void setMybook(Book mybook) {
        this.mybook = mybook;
    }

}

建立服务器端代码,命名为PersonInfoService.java,实现三个method,分别为public String getPersonInfo(Person person)、public Book setBookInfo(String bookname, Long isbn)、public Person getPersonInfo(),以下为全部代码:

package com.lucky.axis.service;

import java.util.HashMap;
import java.util.Map;

public class PersonInfoService {
    public PersonInfoService() {
    }

    public String getPersonInfo(Person person) {
        String personinfo = "";
        personinfo = "Hello, " + person.getName()
                + " ! This is you information\r\n";
        personinfo = personinfo + "Ages: " + person.getAge() + "\r\n";
        Map skill = person.getSkill();
        String strskill = "";
        strskill = strskill + skill.get("NAME") + " : you have "
                + skill.get("YEAR") + " years experience!\r\n";
        personinfo = personinfo + strskill;
        personinfo = personinfo + "Book Name : "
                + person.getMybook().getBookname() + "\r\n";
        personinfo = personinfo + "ISBN : "
                + person.getMybook().getIsbn() + "\r\n";
        personinfo = personinfo + "You pay $"
                + person.getMybook().getPrice() + " for this book.\r\n";
        personinfo = personinfo + "This book have "
                + person.getMybook().getPages() + " pages.\r\n";
        return personinfo;
    }

    public Book setBookInfo(String bookname, Long isbn) {
        Book book = new Book();
        book.setBookname(bookname);
        book.setIsbn(isbn);
        book.setPages(new Integer(265));
        book.setPrice((float) 25.65);
        return book;
    }

    public Person getPersonInfo() {
        Person person = new Person();
        person.setName("Aaron");
        person.setAge(26);
        Map skill = new HashMap();
        skill.put("NAME", "JAVA");
        skill.put("YEAR", "3");
        person.setSkill(skill);
        Book book = new Book();
        book.setBookname("<Thinking in Java>");
        book.setIsbn(new Long(456256821));
        book.setPages(new Integer(982));
        book.setPrice((float) 99.8);
        person.setMybook(book);
        return person;
    }

}

将编译好的Java类直接放在%Tomcat%\webapps\axis\WEB-INFO\classess\目录下。注意将整个包路径复制到上述目录中

在%Tomcat%\webapps\axis目录下建立 server-config.wsdd 文件,内容如下

<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
    xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
    <globalConfiguration>
        <parameter name="sendMultiRefs" value="true" />
        <parameter name="disablePrettyXML" value="true" />
        <parameter name="adminPassword" value="admin" />
        <parameter name="attachments.Directory"
            value="C:\Tomcat 5.0 (iplanetldap)\webapps\axis\WEB-INF\attachments" />
        <parameter name="axis.servicesPath" value="/mossWS/" />
        <parameter name="dotNetSoapEncFix" value="true" />
        <parameter name="enableNamespacePrefixOptimization"
            value="false" />
        <parameter name="sendXMLDeclaration" value="true" />
        <parameter name="sendXsiTypes" value="true" />
        <parameter name="attachments.implementation"
            value="org.apache.axis.attachments.AttachmentsImpl" />
        <requestFlow>
            <handler type="java:org.apache.axis.handlers.JWSHandler">
                <parameter name="scope" value="session" />
            </handler>
            <handler type="java:org.apache.axis.handlers.JWSHandler">
                <parameter name="scope" value="request" />
                <parameter name="extension" value=".jwr" />
            </handler>
        </requestFlow>
    </globalConfiguration>
    <handler name="Authenticate"
        type="java:org.apache.axis.handlers.SimpleAuthenticationHandler" />
    <handler name="LocalResponder"
        type="java:org.apache.axis.transport.local.LocalResponder" />
    <handler name="URLMapper"
        type="java:org.apache.axis.handlers.http.URLMapper" />
    <handler name="soapmonitor"
        type="java:org.apache.axis.handlers.SOAPMonitorHandler">
        <parameter name="wsdlURL"
            value="/axis/SOAPMonitorService-impl.wsdl" />
        <parameter name="namespace"
            value="http://tempuri.org/wsdl/2001/12/SOAPMonitorService-impl.wsdl" />
        <parameter name="serviceName" value="SOAPMonitorService" />
        <parameter name="portName" value="Demo" />
    </handler>
    <service name="AdminService" provider="java:MSG">
        <parameter name="allowedMethods" value="AdminService" />
        <parameter name="enableRemoteAdmin" value="false" />
        <parameter name="className" value="org.apache.axis.utils.Admin" />
        <namespace>http://xml.apache.org/axis/wsdd/</namespace>
    </service>
    <service name="SOAPMonitorService" provider="java:RPC">
        <parameter name="allowedMethods" value="publishMessage" />
        <parameter name="className"
            value="org.apache.axis.monitor.SOAPMonitorService" />
        <parameter name="scope" value="Application" />
    </service>
    <service name="AxisDemo" provider="java:RPC">
        <parameter name="allowedMethod" value="*"></parameter>
        <parameter name="className"
            value="com.lucky.axis.service.PersonInfoService">
        </parameter>
        <beanMapping qname="myNS:Person" xmlns:myNS="urn:PersonInfo"
            languageSpecificType="java:com.lucky.axis.service.Person" />
        <beanMapping qname="myNS:Book" xmlns:myNS="urn:PersonBookInfo"
            languageSpecificType="java:com.lucky.axis.service.Book" />
    </service>
    <transport name="http">
        <requestFlow>
            <handler type="URLMapper" />
            <handler
                type="java:org.apache.axis.handlers.http.HTTPAuthHandler" />
        </requestFlow>
        <parameter name="qs:list"
            value="org.apache.axis.transport.http.QSListHandler" />
        <parameter name="qs:wsdl"
            value="org.apache.axis.transport.http.QSWSDLHandler" />
        <parameter name="qs.list"
            value="org.apache.axis.transport.http.QSListHandler" />
        <parameter name="qs.method"
            value="org.apache.axis.transport.http.QSMethodHandler" />
        <parameter name="qs:method"
            value="org.apache.axis.transport.http.QSMethodHandler" />
        <parameter name="qs.wsdl"
            value="org.apache.axis.transport.http.QSWSDLHandler" />
    </transport>
    <transport name="local">
        <responseFlow>
            <handler type="LocalResponder" />
        </responseFlow>
    </transport>
</deployment>

其中

<service name="AxisDemo" provider="java:RPC">
        <parameter name="allowedMethod" value="*"></parameter>
        <parameter name="className"
            value="com.lucky.axis.service.PersonInfoService">
        </parameter>
        <beanMapping qname="myNS:Person" xmlns:myNS="urn:PersonInfo"
            languageSpecificType="java:com.lucky.axis.service.Person" />
        <beanMapping qname="myNS:Book" xmlns:myNS="urn:PersonBookInfo"
            languageSpecificType="java:com.lucky.axis.service.Book" />
    </service>

是配置服务端的WebService,name="AxisDemo" 是WebService的名称,使用http://localhost:8080/axis/services/AxisDemo?wsdl来访问,name="allowedMethod" 表示服务类中那些方法需要封装,value="*" 表示所有的方法都封装,如果值封装其中部分方法,需要把方法名称列出来,用“,”逗号分割,name="className" 表示定义WebService服务端的类,value="com.lucky.axis.service.PersonInfoService" 表示将这个类作为WebService类封装,<beanMapping qname="myNS:Person" xmlns:myNS="urn:PersonInfo"
   languageSpecificType="java:com.lucky.axis.service.Person" />这个表示类中需要引入的其他类
重新启动Tomcat5.5,访问http://localhost:8080/axis/services/AxisDemo?wsdl,可以看到该Web Service的WSDL描述信息

编写客户端测试类,命名为Client.java。在该类中分别对PersonInfoService.java所提供的方法进行调用,代码如下:

package com.lucky.axis.client;

import java.util.HashMap;
import java.util.Map;

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;

import com.lucky.axis.service.Book;
import com.lucky.axis.service.Person;

public class Client {
    public Client() {
    }

    public static void main(String[] args) throws Exception {
//        if (args.length < 1) {
//            System.out.println("错误:缺少参数");
//            System.exit(0);
//        }
        // Web服务的URL
        String url = "http://localhost:8080/axis/services/AxisDemo";
        Service service = new Service();
        Call call = (Call) service.createCall();
        call.setTargetEndpointAddress(url);

        // 注册序列化/反序列化器
        QName qn = new QName("urn:PersonInfo", "Person");
        call.registerTypeMapping(Person.class, qn, new BeanSerializerFactory(
                Person.class, qn),
                new BeanDeserializerFactory(Person.class, qn));
        QName qnb = new QName("urn:PersonBookInfo", "Book");
        call.registerTypeMapping(Book.class, qnb, new BeanSerializerFactory(
                Book.class, qnb), new BeanDeserializerFactory(Book.class, qnb));

        // 设置调用方法
        call.setOperationName(new javax.xml.namespace.QName("http://test",
                "getPersonInfo"));
        Person person = new Person();
        person.setName("Kiah Han");
        person.setAge(26);
        Map map = new HashMap();
        map.put("NAME", "李彬");
        map.put("YEAR", new Integer(3));
        person.setSkill(map);
        Book book = new Book();
        book.setBookname("<Thinking in Java>");
        book.setIsbn(new Long(123456789));
        book.setPrice((float) 25.98);
        book.setPages(new Integer(925));
        person.setMybook(book);

        // Web服务调用
        java.lang.Object _resp = call.invoke(new java.lang.Object[] { person });

        // 输出到屏幕
        System.out.println(_resp.toString());

        System.out
                .println("------------Starting setBookInfo()---------------------");
        call.setOperationName(new javax.xml.namespace.QName("http://test",
                "setBookInfo"));
        java.lang.Object _resbook = call.invoke(new java.lang.Object[] {
                "<Spring pro>", new Long(987654321) });

        Book mybook = (Book) _resbook;

        System.out.println(mybook.getBookname());
        System.out.println(mybook.getIsbn());
        System.out.println(mybook.getPrice());
        System.out.println(mybook.getPages());
        System.out
                .println("------------End setBookInfo()---------------------------");

        System.out
                .println("------------Starting getPersonInfo()---------------------");
        call.setOperationName(new javax.xml.namespace.QName("http://test",
                "getPersonInfo"));
        java.lang.Object _resperson = call.invoke(new java.lang.Object[] {});

        Person aaron = (Person) _resperson;
        System.out.println(aaron.getName());
        System.out.println(aaron.getAge());
        Map skill = aaron.getSkill();
        System.out.println(skill.get("NAME"));
        System.out.println(skill.get("YEAR"));
        Book aaronbook = aaron.getMybook();
        System.out.println(aaronbook.getBookname());
        System.out.println(aaronbook.getIsbn());
        System.out.println(aaronbook.getPrice());
        System.out.println(aaronbook.getPages());
        System.out
                .println("------------End getPersonInfo()---------------------");
    }

}

直接运行该Client.java中的main方法,运行结果如下:

Hello, Kiah Han ! This is you information...
Ages: 26
李彬 : you have 3 years experience!
Book Name : <Thinking in Java>
ISBN : 123456789
You pay $25.98 for this book.
This book have 925 pages.

------------Starting setBookInfo()---------------------
<Spring pro>
987654321
25.65
265
------------End setBookInfo()---------------------------
------------Starting getPersonInfo()---------------------
Aaron
26
JAVA
3
<Thinking in Java>
456256821
99.8
982
------------End getPersonInfo()---------------------

成功,好就到这里了,下班了,希望能给大家一点帮助

我的联系方式:
qq:33614814
e-mail:[email protected]

原文地址:http://www.blogjava.net/libin2722/archive/2007/11/22/162444.html

时间: 2024-08-11 07:34:46

【转】Axis1.4开发的相关文章

使用URLConnection调用axis1.4开发的webservice

写在前面: 调用webservice的方式有很多:1.直接在客户端使用工具生成客户端代码,将代码拷进项目中调用即可:2.使用对应的webservice框架来进行调用,比如如果我们我的服务端开发用的是axis,那么我在客户端也可以导入相应的axis的jar包,然后用它相关的方法来进行调用:3.js调用:4.URLConnection调用.上面的前两种方式个人认为比较适用于服务端与客户端都是java开发系统,如果是不同语言的调用那就不好说了.而第三种与第四种的方式其实差不多,如果在jsp页面中就要调

Java中WebService实例

Web Services是由企业公布的完毕其特定商务需求的在线应用服务,其它公司或应用软件可以通过Internet来訪问并使用这项在线服务. Web Service的关键技术和规则: 1.XML:描写叙述数据的标准方法. 2.SOAP:表示信息交换的协议(简单对象訪问协议). 3.WSDL:Web服务描写叙述语言. 4.UDDI:通用描写叙述.发现与集成,他是一种独立于平台,基于XML语言的用于在互联网上描写叙述商务的协议. 一.利用JDK web服务api实现,这里使用基于SOAP messa

WebService学习总结(一)

一.WebService的基础认识 1.WebService是什么? 服务器端整出的一些资源让客户端可以访问(获取数据).能解决跨平台调用.跨语言调用.远程调用等问题. 2.什么时候可以用到WeService? 第一:同一家公司的新旧应用之间.(我本次就是需要调用KMS系统中的数据直接写到DMS中,避免重复填写) 第二:不同公司的应用之间 第三:一些提供数据的内容聚合应用:天气预报.股票行情等. 3.WebService的几个重要术语 WSDL:对服务内容描述的一套标准文档,定义了客户端与服务端

基于Axis1.4的webservice接口开发(代码开发)

一.开发环境: 我的开发环境是MyEclipse 2015+Apache-Tomcat-8.0.21. 二.代码开发: 1.新建一个Web Project工程,并导入jar包(Axis1.4的环境搭建在上一篇博客http://www.cnblogs.com/zhukunqiang/p/7124977.html中有介绍): 1.在com.ll.server包下新建java类,工程结构目录如下: 2.java代码如下(由于该项目用于测试,简单点无所谓): package com.ll.server;

基于Axis1.4的webservice接口开发(接口调用)

一.webservice接口代码参考上一篇博客: http://www.cnblogs.com/zhukunqiang/p/7125668.html 二.代码部分 1.新建Web Project工程,取名为axiswebserviceClint,并导入Axis1.4所需jar包(将jar包粘贴到lib目录). 2.新建webservice接口调用类: package com.no8.clint; import java.net.URL; import javax.xml.rpc.ServiceE

Android开发之使用Web Service进行网络编程

使用Web Service进行网络编程 Android应用通常都是执行在手机平台上.手机系统的硬件资源是有限的,无论是存储能力还是计算能力都有限.在Android系统上开发.执行一些单用户.小型应用是可能的, 但对于须要进行大量的数据处理.复杂计算的应用.还是仅仅能部署在远程server上,Android应用将仅仅是充当这些应用的client. 为了让Android应用与远程server之间进行交互,能够借助子Java的RMI技术,但这要求远程server程序必须採用Java实现:也能够借助于C

企业开发技术选型

http://blog.csdn.net/jwdstef/article/details/23767033 企业级开发我们在开发前需要进行技术选型,选择合适的技术,会让我们事半功倍,这就是为什么站在巨人的肩膀我们会看的更远.下面是3年前写的,过了3年出现了很多新的技术和框架,我会尽快更新出最新的技术选型,希望对大家有所帮助. 2.1. 基础架构 IOC Container: Spring, Guice 我们需要IOC Container的依赖注入作为胶水,把其他工具包粘在一起.还需要它的AOP,

java开发webservice的几种方式(转载)

webservice的应用已经越来越广泛了,下面介绍几种在Java体系中开发webservice的方式,相当于做个记录. 1.Axis2方式 Axis是apache下一个开源的webservice开发组件,出现的算是比较早了,也比较成熟.这里主要介绍Axis+eclipse开发webservice,当然不用eclipse也可以开发和发布webservice,只是用eclipse会比较方便. (1)下载eclipse的Java EE版本 http://www.eclipse.org/downloa

JAVA开发Web Service几种框架介绍

在讲Web Service开发服务时,需要介绍一个目前开发Web Service的几个框架,分别为Axis,axis2,Xfire,CXF以及JWS(也就是前面所述的JAX-WS,这是Java6发布所提供的对Web Service服务的一种实现.)前面几项都为开源项目,而其中又以axis2与cxf所最为常用,Axis与XFire已随着技术不断的更替慢慢落幕,而目前也只有axis2和cxf官方有更新,Axis与XFire都已不再更新. 下面就分别介绍下这几个框架之间的区别,以便大家进行更好的选择: