`
goodboy_hu
  • 浏览: 1694 次
社区版块
存档分类
最新评论

axis2通过wsdl生成客户端程序并本地调用

阅读更多

下载axis2-1.5.4-bin.zip文件并解压。

设置axis2的环境变量,如下图所示:axis2通过wsdl生成客户端程序并本地调用

利用axis2中的wsdl2java.bat生成客户端程序。

先启动Tomcat7并在IE里运行http://localhost:8081/TestAxis2Ws/services/HelloService?wsdl 看看服务端是否正常解析。

%AXIS2_HOME%\bin\wsdl2java -uri http://localhost:8081/TestAxis2Ws/services/HelloService?wsdl -p axis2.service.server -o stub

其中-uri参数指定了wsdl文件的路径,可以是本地路径,也可以是网络路径。-p参数指定了生成的Java类的包名,-o参数指定了生成的一系列文件保存的根目录。在执行完上面的命令后,读者就会发现在当前目录下多了个stub目录,可以找到一个HelloServiceStub.java文件,该文件复杂调用WebService,读者可以在程序中直接使用这个类。
运行-->cmd-->具体命令如下:

要先进入axis2的bin目录然后运行wsdl2java.bat

Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.

C:\Documents and Settings\Jambhala>d:

D:\>cd D:\WebService\Axis\axis2\axis2-1.5.4-bin\axis2-1.5.4\bin

D:\WebService\Axis\axis2\axis2-1.5.4-bin\axis2-1.5.4\bin>wsdl2java -uri http://l
ocalhost:8081/TestAxis2Ws/services/HelloService?wsdl -p axis2.service.server -o
stub
Using AXIS2_HOME:   D:\WebService\Axis\axis2\axis2-1.5.4-bin\axis2-1.5.4
Using JAVA_HOME:    C:\Java\jdk1.6.0
Retrieving document at 'http://localhost:8081/TestAxis2Ws/services/HelloService?
wsdl'.
D:\WebService\Axis\axis2\axis2-1.5.4-bin\axis2-1.5.4\bin>
这时到axis2的bin目录下会发现出现了一个stub目录,如下图所示:axis2通过wsdl生成客户端程序并本地调用

axis2通过wsdl生成客户端程序并本地调用

axis2通过wsdl生成客户端程序并本地调用

其中HelloServiceStub.java是客户端程序,HelloServiceCallbackHandler.java是异步客户端程序。

把这两个类复制到上次已经建立好的服务端工程里,如下图所示:

要参考上一次写的MyEclipse整合Axis2插件的文章(http://shihuan830619.iteye.com/blog/1136607)

axis2通过wsdl生成客户端程序并本地调用

注意:这个地方复制进来后会报错的,因为在D:\WebService\Axis\axis2\axis2-1.5.4-bin\axis2-1.5.4\bin\stub\src\axis2\service\server下的类路径为package axis2.service.server;需要改成package axis2.service.client;并且需要把HelloServiceStub.java和HelloServiceCallbackHandler.java相关的报错位置都把路径改一下,不要闲烦,要改的地方还满多的呢。

创建带main方法的StubClient.java类文件,代码如下:

package axis2.service.domain;

import java.rmi.RemoteException;

import org.apache.axis2.AxisFault;

import axis2.service.client.HelloServiceStub;

public class StubClient {

 
 public static void main(String[] args) {
  HelloServiceStub stub = null;
  try {
   stub = new HelloServiceStub();
   HelloServiceStub.SayHello sh = new HelloServiceStub.SayHello();
   sh.setName("于士博");
   System.out.println(stub.sayHello(sh).get_return());
  } catch (AxisFault e) {
   e.printStackTrace();
  } catch (RemoteException e) {
   e.printStackTrace();
  }
 }

}

运行后会看到如下结果:

log4j:WARN No appenders could be found for logger (org.apache.axis2.description.AxisService).
log4j:WARN Please initialize the log4j system properly.
Hello, 于士博!

 

解释:

上面的代码大大简化了调用WebService的步骤,并使代码更加简洁。但要注意的是,wsdl2java.bat命令生成的Stub类将WebService方法的参数都封装在了相应的类中,类名(SayHello)为方法名,例如,sayHello方法的参数都封装在了SayHello类中,要想调用sayHello方法,必须先创建SayHello类的对象实例。

 

--------------------------------------------------------------------------------------------------

下面介绍纯手动编写Java代码客户端程序:

package axis2.service.domain;

import javax.xml.namespace.QName;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;

public class HelloClient {

 
 public static void main(String[] args) {
  
  //使用RPC方式调用WebService 

  RPCServiceClient serviceClient = null;
  try {
         serviceClient = new RPCServiceClient();
         Options options = serviceClient.getOptions();
         //指定调用WebService的URL
         EndpointReference targetEPR = new EndpointReference("http://localhost:8081/TestAxis2Ws/services/HelloService");
         options.setTo(targetEPR);
         //指定sayHello方法的参数值
         Object[] opAddEntryArgs = new Object[] {"于士博"};
         //指定sayHello方法返回值的数据类型的Class对象
         Class[] classes = new Class[] {String.class};
         //指定要调用的sayHello方法及WSDL文件的命名空间
         QName opAddEntry = new QName("http://server.service.axis2", "sayHello");
         //调用sayHello方法并输出该方法的返回值

         String result = serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs, classes)

                         [0].toString();

         serviceClient.cleanupTransport();  //为了防止连接超时
         System.out.println(result);
         //System.out.println(serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs, classes)

           [0]);
  } catch (AxisFault e) {
   e.printStackTrace();
  }
  
 }

}

 

【注】:在本例中使用了RPCServiceClient类的invokeBlocking方法调用了WebService中的方法。

        invokeBlocking方法有三个参数,其中第一个参数的类型是QName对象,表示要调用的方法名;第二个

        参数表示要调用的WebService方法的参数值,参数类型为Object[];第三个参数表示WebService方法的

        返回值类型的Class对象,参数类型为Class[]。

        当方法没有参数时,invokeBlocking方法的第二个参数值不能是null,而要使用new Object[]{}

        如果被调用的WebService方法没有返回值,应使用RPCServiceClient类的invokeRobust方法,该方法只

        有两个参数,它们的含义与invokeBlocking方法的前两个参数的含义相同。

        在创建QName对象时,QName类的构造方法的第一个参数表示WSDL文件的命名空间名,也就是

        <wsdl:definitions>元素的targetNamespace属性值。

分享到:
评论

相关推荐

    axis根据服务端wsdl生成客户端工具

    3. **生成客户端工具**:在 Axis 中,通过 WSDL2Java 工具,我们可以根据服务端的 WSDL 文件自动生成客户端 stub 类。这些 stub 类包含了调用服务所需的所有方法,使得客户端开发人员无需手动编写与服务交互的代码,...

    使MyEclipse调用Axis的wsdl2java 通过wsdl生成客户端

    本文将深入探讨如何使用MyEclipse集成开发环境来调用Axis工具,通过WSDL(Web Service Description Language)文件生成客户端代码。这个过程对于理解Web服务的生命周期和客户端开发流程至关重要。 首先,我们需要...

    axis2根据wsdl生成客户端代码

    总结起来,使用Axis2的`WSDL2Java`工具,开发者可以轻松地根据WSDL文件生成客户端代码,从而快速构建与Web服务交互的应用程序。这个过程大大提高了开发效率,减少了手动编码的复杂性,使得Web服务的使用更加便捷。

    axis2 1.6.2 生产wsdl客户端代码

    总的来说,Axis2 1.6.2提供了一种简洁的方式,帮助开发者快速地从WSDL生成客户端代码,从而简化Web服务的使用。熟悉这一过程对于任何涉及跨系统交互的Java开发者来说都是非常有价值的技能。记住,如果在使用过程中...

    axis1.4生成客户端

    - **步骤2:启动Axis** - 运行Axis1.4的wsdl2java工具,输入WSDL文件的URL或本地路径,该工具会自动生成Java客户端代码。 - **步骤3:构建客户端代码** - 编译生成的Java源代码,然后在你的项目中引入这些类,这些...

    axis2生成客户端服务端代码

    ### Axis2生成客户端与服务端代码详解 ...通过以上步骤,我们可以有效地利用Axis2生成客户端和服务端代码,大大加快了Web服务的开发进度。这对于那些希望快速搭建基于Web的服务应用的开发者来说,是非常有价值的。

    AXIS2生成客户端代码教程.zip

    AXIS2是一个流行的开源Web服务框架,用于创建和部署SOAP(简单对象访问协议)服务以及生成客户端代码。在本文中,我们将深入探讨如何利用AXIS2在MyEclipse环境中生成客户端代码,以便与Web服务进行交互。这个过程...

    axis1.4生成访问客户端代码

    axis1.4生成访问客户端代码

    axis1.4jar包以及WSDL和服务端代码互转方法

    从WSDL生成的服务端代码通常包含以下部分:服务接口(Interface)、服务实现(Implementation)、服务部署描述符(Deployment Descriptor, 如wsdd.xml)、以及客户端Stubs和Skeletons。服务接口定义了服务提供的...

    axis2发布webservice和调用axis2服务接口

    本文将详细讲解如何使用Axis2来发布Web服务以及如何生成客户端代码来调用这些服务。 首先,让我们了解发布Web服务的过程: 1. **创建WebService**:在Axis2中,可以通过编写一个简单的Java类并暴露其方法作为Web...

    axis2生成客户端代码 (带jar包)

    总结来说,"axis2生成客户端代码 (带jar包)"涉及到的是利用Axis2框架及其提供的工具,从服务的WSDL文件生成Java客户端代码,并使用包含的jar包来支持服务的调用和交互。了解这些知识有助于开发人员更有效地集成和...

    根据wsdl使用gsoap生成的服务器和客户端

    - 当服务更新时,更新WSDL并重新生成客户端和服务器代码。 - 注意内存管理和错误处理,避免潜在的内存泄漏和异常情况。 总之,gSOAP是C和C++开发人员在处理WSDL和SOAP协议时的一个强大工具。通过正确使用gSOAP,...

    axis插件生成客户端

    3. 使用Axis插件生成客户端:在命令行中,你可以使用Axis的wsdl2java工具,输入Web服务的WSDL URL或本地WSDL文件路径,该工具会自动生成对应的客户端Java stubs(存根类)。这些存根类包含了调用Web服务所需的所有...

    Axis客户端调用代码

    本文将深入探讨如何使用Axis客户端进行调用,以及如何利用WSDL2JAVA工具生成客户端代码。 标题中的"Axis客户端调用代码"指的是使用Axis库来实现对Web服务的调用。Axis提供了Java客户端API,使得开发人员能够通过...

    axis生成wsdl的JAVA客户端服务接口

    当有了一个WSDL文件,开发者可以利用工具如Apache Axis将WSDL解析并生成相应的Java客户端 stubs(代理类),这些代理类包含了调用Web服务所需的所有逻辑。 **Apache Axis的工作流程:** 1. **解析WSDL**:首先,...

    AXIS2 1.7.3 idea wsdl 代码生成插件

    4. **IDEA集成**:AXIS2 1.7.3 idea wsdl插件使得这些功能无缝集成到IntelliJ IDEA中,用户可以直接在IDE内处理WSDL文件,生成并管理AXIS2相关的Java代码。这提高了开发效率,减少了在不同工具间切换的时间。 5. **...

    根据wsdl生成axis的服务端和客户端__工具.rar

    此外,它还可以自动生成客户端 stubs,让调用Web服务如同调用本地方法一样方便。 生成服务端代码的步骤通常如下: 1. **获取WSDL**:首先,你需要一个有效的WSDL文件,该文件详细描述了服务的接口、消息结构和绑定...

    AXIS生成java请求客户端

    - 优势:AXIS提供了一种自动化的方式生成客户端代码,大大简化了Web服务的调用过程。 - 挑战:AXIS生成的代码可能较为复杂,对于新手来说,理解并正确使用可能会有一定难度。 综上所述,AXIS1.4是开发Web服务...

    cxf客户端调用axis服务端流程

    总之,使用CXF客户端调用Axis服务端涉及多个步骤,包括生成客户端代码、配置客户端、创建服务代理以及进行实际调用。理解这些步骤并正确实现它们是成功通信的关键。在实际开发过程中,可能会遇到各种问题,需要耐心...

    myeclipse8.5中axis2插件的安装和使用:axis2客户端代码生成

    Axis2 插件在 MyEclipse 8.5 中的安装和使用 Axis2 插件是 MyEclipse 8.5 中的一...通过使用 Axis2 插件,可以快速生成客户端代码,并实现服务的发布和调用。因此,Axis2 插件是 MyEclipse 8.5 中一个非常有用的插件。

Global site tag (gtag.js) - Google Analytics