`

Axis初学手册 -- 2

阅读更多

第四步就是写客户端程序了。

WSClient.java

try {
            String endpoint 
= "http://localhost:8080/ws/services/CalcService";

            Service service 
= new Service();
            Call call 
= service.createCall();

            call.setTargetEndpointAddress(endpoint);
            call.setOperationName(
new QName("http://ws.mstar.org""plus"));
            Object[] params 
= new Object[2];
            params[
0= 10;
            params[
1= 20;
            Integer result 
= (Integer) call.invoke(params);
            System.out.println(
"Result:  " + result);
        } 
catch (Exception e) {
            e.printStackTrace();
        }

这是动态的调用WebService的方法,并不需要根据WSDL生成客户端存根。但是对于Service中有复合类型的时候就不可以了。下一个例子讲的就是如何做客户端存根。如果这个例子能够正常运行就可以了。

然后是一个有FooBeanService

很简单,就是返回一个FooBean,在参数上做了一些手脚J

然后在server-config.wsdd中加入描述

这里多了typeMapping标记用来描述复杂数据类型FooBean。对入复杂类型的序列化可以是自定义的,在serializer deserializer属性中改。那个xmlns,要留意一下,因为在客户端生成存根时的AntTask中要写一些Mapping,来确定那些xmlns映射到哪些package。当然这些也可以在WSDL中找到。而WSDL中的xmlns也是在这里定义的。

下面也各客户端。由于这次的Service中有复杂类型所以要根据WSDL生成这些复杂类型和Service的存根。取得WSDL的方法可以使用java2WSDL来做,但那样太麻烦,其实在List页面中用右键-另存为就可以了。然后写一个ant文件

运行客户端看看!

 

做简单的WebService就基本上这样了。但这样的Webservice还远远不能用户真正的项目中,还有很多问题没有解决,比如安全问题,有状态会话问题等等。这些问题很多可以通过Hanlder来解决,他有点类似于FilterServlet。具体的东西我还有没有研究,axis在这方面的资料就很少了。研究明白以后再写一篇吧。

本文源码:http://www.blogjava.net/Files/mstar/WsLearn.rar

<?xml version="1.0" encoding="UTF-8"?>
<project default="GenJavaSub" basedir=".">
    
<taskdef name="wsdl2java" classname="org.apache.axis.tools.ant.wsdl.Wsdl2javaAntTask"/>
    
<target name="GenJavaSub">
        
<property name="output.dir" value="src"/>
        
<property name="generated.dir" value="src/org/mstar/wsclient/generated"/>
        
<property name="wsdl.url" value="wsdl/FooService.wsdl"/>
        
<delete dir="${generated.dir}"/>
        
<mkdir  dir="${generated.dir}"/>
        
<wsdl2java all="true" debug="false" helperGen="true"
            noimports
="false"
            output
="${output.dir}"
            serverside
="false"
            skeletonDeploy
="false"
            typeMappingVersion
="1.1"
            url
="${wsdl.url}"
            verbose
="false"
            noWrapped
="false">
            
<mapping namespace="http://ws.mstar.org" package="org.mstar.wsclient.generated"/>
            
<mapping namespace="http://localhost:8080/ws/services/FooService" package="org.mstar.wsclient.generated"/>
        
</wsdl2java>
    
</target>
</project>

这里上面的东西比较好理解,在下面的mapping中一定要注意,因为每个ServiceComplexType都有自己的xmlns,这里就是把xmlns映射到指定的package 比如 http://ws.mstar.org 映射到org.mstar.wsclient.generated包。这些namespace可以在wsdl文件中找到。运行ant就会看见在src中的org.mstar.wsclient.generated中多了几个java文件。接下在我们就可以用这几个类了。还有一点要注意wsdl2java output属性要指向src,而不是generated文件夹。

客户端调用就相对容易多了

 

FooServiceService serviceLocator = new FooServiceServiceLocator();
try {
FooService service 
= serviceLocator.getFooService();
    FooBean fooBean 
= service.getFooBean("fooBean"10true);
System.out.println(fooBean);
catch (ServiceException e) {
    e.printStackTrace();
catch (RemoteException e) {
    e.printStackTrace();
}
<service name="FooService" provider="java:RPC">
        
<parameter name="allowedMethods" value="*"/>
        
<parameter name="className" value="org.mstar.ws.FooService"/>
        
<parameter name="scope" value="session"/>
        
<typeMapping encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
                     xmlns:ns1
="http://ws.mstar.org"
                     qname
="ns1:FooBean"
                     languageSpecificType
="java:org.mstar.ws.FooBean"
                     serializer
="org.apache.axis.encoding.ser.BeanSerializerFactory"
                     deserializer
="org.apache.axis.encoding.ser.BeanDeserializerFactory"
                     name
="FooBean"/>
</service>
public class FooService {
    
public FooBean getFooBean(String foo1,Integer foo2,Boolean foo3){
        
return new FooBean(foo1+"(Remote)",foo2+10,!foo3);
    }
}

第五步做一个稍微复杂一点的例子,对于WebServices不能仅仅对简单类型的数据进行操作,也应该能对复杂类型进行操作。下面的例子就是:

先要一个复杂类型的类

 

public class FooBean {
    
private String foo1;
    
private Integer foo2;
    
private Boolean foo3;

    
public FooBean(String foo1, Integer foo2, Boolean foo3) {
        
this.foo1 = foo1;
        
this.foo2 = foo2;
        
this.foo3 = foo3;
}
…. Setter and Getter
}
分享到:
评论

相关推荐

    axis入门教程-开发详解

    本教程将深入浅出地介绍如何使用Axis进行Web服务的开发,帮助初学者快速掌握相关技能。 1. **什么是Web服务**:Web服务是一种基于互联网的应用程序接口,它允许不同系统之间通过标准协议进行通信。常见的Web服务...

    Axis2-study.zip_axis2_doc

    "Axis2-study.zip_axis2_doc"压缩包包含的"Axis2-study.pdf"文件很可能是Axis2的详细学习资料,覆盖了Axis2的基本概念、架构、特性、服务创建与调用方法等内容,对于初学者或希望深入了解Axis2的开发者来说是一份...

    myeclipse集成axis2

    【压缩包子文件的文件名称列表】中只有一个"axis2文档",这可能是一个包含Axis2使用教程、API文档或者配置手册的资料集合,对于初学者来说,这是了解和掌握Axis2在MyEclipse中使用的重要资源。 综合上述信息,我们...

    WebService-Axis2 详细讲解

    - **文档**:可能包括用户手册、API参考和其他技术文档,深入探讨Axis2的各种特性和用法。 通过学习这些材料,你可以了解如何使用Axis2创建、发布和调用Web Service,以及如何配置和优化Axis2服务器。无论是对于...

    axis2创建webservice操作手册.doc

    ### axis2创建webservice操作手册知识点详述 #### 1. 引言 ##### 1.1 目的 本文档旨在为初次接触WebService技术的开发者提供一份详细的操作指南,帮助他们了解WebService的基本原理以及如何使用Axis2框架来构建...

    axis开发使用手册

    2. 使用Axis的wsdl2java工具生成服务接口和服务实现类。这将基于你的服务类生成符合WS-I标准的WSDL文件。 3. 创建服务描述文件(wsdd)以定义服务的部署细节,如端点地址、操作名称等。 4. 在Tomcat的web应用中创建...

    highcharts实例配置手册-2014最新版

    本手册将详细解读“Highcharts实例配置手册-2014最新版”中的关键配置项,并通过一个具体的例子来说明如何配置和展示折线图。 #### 核心配置项详解 - **xAxis**: 定义X轴的相关属性。 - `categories`: 指定X轴上的...

    java-axis2.rar

    - **文档**:可能有Axis2的用户手册、API文档或教程,帮助开发者了解更多信息。 为了使用这个压缩包,你需要先将其解压,然后根据文档的指示配置环境,可能需要将库文件添加到项目的类路径中,编写服务代码,并使用...

    axis2 webservice入门手册(JS,Java,PHP调用实例源码)www.sietoo.com出品

    ### Axis2 WebService 入门手册知识点详解 #### 一、Axis2简介 **1. AXIOM (AXIs Object Model)** - **定义**:AXIOM 是 Axis2 中用于处理 XML 的核心模型。它不同于传统的 DOM 和 SAX 解析方式,提供了更高效、...

    axis1的示例和webservice开发手册

    【标题】:“Axis1的示例与Web服务开发手册” 【描述】中提到的“Axis1的示例”是一个实际的应用实例,它展示了如何利用...此外,手册部分可能详细介绍了每个功能的实现步骤,帮助初学者更好地理解和实践Web服务开发。

    axis2发布webservice和调用实例

    - "51CTO下载-Axis2 WebService手册.doc":这份文档可能提供了关于Axis2 Web服务的详细步骤,包括环境配置、服务发布、客户端调用等,是初学者的良好指南。 - "服务端":可能包含服务端的源码或配置文件,供学习者...

    axis2创建webservice

    对于初学者来说,这是一个非常有价值的资源,可以帮助理解Axis2的工作原理并快速上手。 总结,使用Apache Axis2创建Web服务涉及多个步骤,包括环境配置、服务接口和实现编写、服务存根生成、服务部署以及使用各种...

    axis example.doc

    同时建议下载文档包DOCS,其中包含了用户手册和快速入门指南等资料,对于初学者来说非常有用。 #### 配置Tomcat 1. **部署WAR文件**:将下载的WAR文件复制到Tomcat的`webapps`目录下。 2. **启动Tomcat**:启动...

    matplotlib初学者手册.pdf

    Matplotlib初学者手册 Matplotlib是一个Python库,用于创建二维图表。它遵循设计哲学,即使用简单的命令创建简单的图表。 安装Matplotlib 在开始使用Matplotlib之前,需要先安装它。你可以使用pip安装Matplotlib...

    Asis2(文档+BIN+WAR+代码+配置)

    最后,`axis文档.zip`包含了Axis2的官方文档,可能包括用户指南、开发者手册、API文档等。这些文档将帮助用户深入理解Axis2的内部工作原理,以及如何进行高级定制和优化。 总的来说,这个压缩包提供了一个全面的...

    Developing Web Services with Apache CXF and Axis2_3rd Edition

    《开发Web服务:使用Apache CXF与Axis2》不仅是一本详尽的技术指南,也是一部实践手册,它通过丰富的示例和深入浅出的解释帮助读者快速掌握Web服务的核心技术和最佳实践。无论是初学者还是有经验的开发者,都能从中...

    Develop Web Services With Apache Axis

    总而言之,《使用Apache Axis开发Web服务》不仅是一本实用性极强的技术手册,更是一部引导初学者快速掌握Web服务开发技能的指南。无论是对于刚接触Web服务的新手还是寻求提升技术水平的开发者来说,这本书都是...

    ECharts开发手册.zip

    ECharts是一款由百度...无论你是初学者还是有经验的开发者,都能从中找到所需的信息,提升数据可视化的技能。通过深入学习这个手册,你将能够创建出美观、交互性强的数据可视化应用,有效地传达复杂数据背后的故事。

    Web-Service学习手册(Xfire).docx

    Axis适合初学者,因为它的文档和社区支持广泛。Xfire以其简洁和速度受到青睐,而CXF由于其全面的功能和强大的企业级支持,常用于大型项目。 【开发篇】 2.1 Xfire 2.1.1 下载 Xfire 开发者可以从官方网站或其他...

Global site tag (gtag.js) - Google Analytics