`

AXIS 客户端

    博客分类:
  • XML
 
阅读更多

1、defined input、output

import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.ServiceException;

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

Service service = new Service();//创建service对象
   Call call;
   try {

    call = (Call) service.createCall();//得到Call对象
    try {
     call.setTargetEndpointAddress(new java.net.URL(Constants.sns_sms_service));//将要访问的接口地址,将接口地址加上?wsdl在浏览器中访问就可以查看到wsdl文件的信息,以及你所需要的参数名称等。
    } catch (MalformedURLException e) {
     e.printStackTrace();
    }
    call.setOperationName("sendSms");//WSDL里面描述的接口名称
    call.getMessageContext().setUsername(Constants.sns_httpbase_username);//http认证用户名
    call.getMessageContext().setPassword(Constants.sns_httpbase_password);//http认证密码
    call.addParameter("sendnum", org.apache.axis.encoding.XMLType.XSD_STRING,

      javax.xml.rpc.ParameterMode.IN);//接口的参数 sendnum 为String类型。addParameter()第一个参数是参数的名称与wsdl中相对应必须相同。第二个参数是参数的类型 。也必须与wsdl相同。
    call.addParameter("acceptnums", org.apache.axis.encoding.XMLType.XSD_STRING,

      javax.xml.rpc.ParameterMode.IN);//接口的参数
    call.addParameter("smscnt", org.apache.axis.encoding.XMLType.XSD_STRING,

      javax.xml.rpc.ParameterMode.IN);//接口的参数
    call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//设置返回类型 简单类型的返回就可以这样简单操作,只要设置返回类型即可。甚至可以不设置返回类型。不设置返回类型操作方法请看2
    Object xml;
    try {
     xml = (Object)call.invoke(new Object[]{send,reving,content});//参数的顺序与addParameter的顺序相同,且设置了addParmaters就必须setRuturnType返回值
     //给方法传递参数,并且调用方法

     System.out.println("result is "+xml);
    } catch (RemoteException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }


   } catch (ServiceException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }

 

2、no defined input\output

Service和Call的创建都与1相同。

 

call = (Call) service.createCall();
   call.setOperationName(new QName(url, "getIByusername"));//getByusername是服务端接口的方法名称url是接口地址
   call.setTargetEndpointAddress(new java.net.URL(url));//接口地址
   Object o = call.invoke(new Object[] { account ,IP, mcode });//这里直接传入参数,但是需要注意的是,传入的参数顺序必须与wsdl顺序相同,且类型相同。可以接收一个map的对象。

 

3、obj->input/output

try{
   String url = Constants.sns_login_service;  
     Service service = new Service();
        Call call = (Call) service.createCall();
        call.setTargetEndpointAddress(url);
        call.setOperationName(new QName(url, "Login"));//Login为要调用的方法名

    // hoope.views.api.login_service.LoginService为 wsdl中 targetNamespace 的值 以下相同
         call.addParameter(new QName("hoope.views.api.login_service.LoginService",
         "username"),XMLType.SOAP_STRING,ParameterMode.IN);//这里的username为传入参数的变量名字
         call.addParameter(new QName("hoope.views.api.login_service.LoginService",
         "pwd"),XMLType.SOAP_STRING,ParameterMode.IN);//这里的units为传入参数的变量名字
         call.addParameter(new QName("hoope.views.api.login_service.LoginService",
         "code"),XMLType.SOAP_STRING,ParameterMode.IN);//这里的code为传入参数的变量名字
        
         call.setReturnType(new QName("hoope.views.api.login_service.LoginService",
        "response"), ITVAccount.class);//ITVAccount这里是重点,返回时主要在这配置,ITVAccount为返回的对象

        // 注册映射关系
        QName XljgInfo = new QName("hoope.views.api.login_service.LoginService", "LoginInfoDict");//此处的 LoginInfoDict为WSDL文件中complexType name的属性值

//这里注册映射关系,对自定义的类进行序列化与反序列化。

        call.registerTypeMapping(ITVAccount.class, XljgInfo,
                new BeanSerializerFactory(ITVAccount.class, XljgInfo),
                new BeanDeserializerFactory(ITVAccount.class, XljgInfo));//ITVAccount.class同上,

        ITVAccount itv =(ITVAccount) call.invoke(new Object[] {account,pwd,code});//接口接收的参数
        if(itv!=null){
        itv.setNickName(itv.getNickname());
        itv.setUserName(itv.getUsername());
        itv.setMobilePhone(itv.getUserphone());
        }
        System.out.println("xljg="+itv);//打印输出对象
   } catch (ServiceException e) {
        e.printStackTrace();
    } catch (RemoteException e) {
        e.printStackTrace();
    } 

 

4、obj[]->input/output

try{
   String url = Constants.sns_login_service;  
     Service service = new Service();
        Call call = (Call) service.createCall();
        call.setTargetEndpointAddress(url);
        call.setOperationName(new QName(url, "Login"));//Login为要调用的方法名

    // hoope.views.api.login_service.LoginService为 wsdl中 targetNamespace 的值 以下相同
         call.addParameter(new QName("hoope.views.api.login_service.LoginService",
         "username"),XMLType.SOAP_STRING,ParameterMode.IN);//这里的username为传入参数的变量名字
         call.addParameter(new QName("hoope.views.api.login_service.LoginService",
         "pwd"),XMLType.SOAP_STRING,ParameterMode.IN);//这里的units为传入参数的变量名字
         call.addParameter(new QName("hoope.views.api.login_service.LoginService",
         "code"),XMLType.SOAP_STRING,ParameterMode.IN);//这里的code为传入参数的变量名字
        
         call.setReturnType(new QName("hoope.views.api.login_service.LoginService",
        "response"), ITVAccount[].class);//ITVAccount这里是重点,返回时主要在这配置,ITVAccount为返回数组对象

        // 注册映射关系
        QName XljgInfo = new QName("hoope.views.api.login_service.LoginService", "LoginInfoDict");//此处的 LoginInfoDict为WSDL文件中complexType name的属性值

//这里注册映射关系,对自定义的类进行序列化与反序列化。

        call.registerTypeMapping(ITVAccount[].class, XljgInfo,
                new BeanSerializerFactory(ITVAccount[].class, XljgInfo),
                new BeanDeserializerFactory(ITVAccount[].class, XljgInfo));//ITVAccount.class同上,

        ITVAccount[] itv =(ITVAccount[]) call.invoke(new Object[] {account,pwd,code});//接口接收的参数
              System.out.println("xljg="+itv);//打印输出数组
   } catch (ServiceException e) {
        e.printStackTrace();
    } catch (RemoteException e) {
        e.printStackTrace();
    }
 

5、返回值为对象中包含对象及对象中包含数组

try {  
             Service service = new Service();
             Call call = (Call) service.createCall();
             call.setTargetEndpointAddress(url);
             call.setOperationName(new QName(url, "seachRelateUserInfo"));//seachRelateUserInfo为要调用的方法名
             call.getMessageContext().setUsername("admin");//httpbase认证用户名
             call.getMessageContext().setPassword("admin");//httpbase认证密码
             //hoope.views.api.userinfo_service.UserInfoWebService 为 wsdl中 targetNamespace 的值 以下相同
              call.addParameter(new QName("hoope.views.api.userinfo_service.UserInfoWebService",
              "condition"),XMLType.SOAP_STRING,ParameterMode.IN);//这里的condition为传入参数的变量名字
             
              call.addParameter(new QName("hoope.views.api.userinfo_service.UserInfoWebService",
              "type"),XMLType.SOAP_INT,ParameterMode.IN);//这里的type为传入参数的变量名字
             
              call.addParameter(new QName("hoope.views.api.userinfo_service.UserInfoWebService",
              "start"),XMLType.SOAP_INT,ParameterMode.IN);//这里的start为传入参数的变量名字
             
              call.addParameter(new QName("hoope.views.api.userinfo_service.UserInfoWebService",
              "pagesize"),XMLType.SOAP_INT,ParameterMode.IN);//这里的pagesize为传入参数的变量名字
             
              call.addParameter(new QName("hoope.views.api.userinfo_service.UserInfoWebService",
              "checkcode"),XMLType.SOAP_STRING,ParameterMode.IN);//这里的checkcode为传入参数的变量名字
             
              call.setReturnType(new QName("hoope.views.api.userinfo_service.UserInfoWebService",
              "response"), MapInfoDict.class);//这里设置返回值的类型

          // 注册映射关系   //此处的MapInfoDict userInfoDictArray userInfoDict为WSDL文件中complexType name的属性值 首先找到返回对象的complexType再看它中是否有其他的对象类型自定义对象类型,然后依次映射。
              //这里返回对象的complexType为MapInfoDict,MapInfoDict中有一个userInfoDictArray的对象,userInfoDictArray的对象中有一个List<UserInfoDict>的集合。
              //问题就在这里,这个集合获取不到。
             QName XljgInfo = new QName("hoope.views.api.userinfo_service.UserInfoWebService", "MapInfoDict");
             QName XljgInfo2 = new QName("hoope.views.api.userinfo_service.UserInfoWebService", "userInfoDictArray");
             QName XljgInfo3 = new QName("hoope.views.api.userinfo_service.UserInfoWebService", "userInfoDict");
           
           //为自定义类型进行序列化和反序列化。必须与上面定义的QName匹配。它与服务端返回的类型做映射匹配。
             call.registerTypeMapping(MapInfoDict.class, XljgInfo,
                     new BeanSerializerFactory(MapInfoDict.class, XljgInfo),
                     new BeanDeserializerFactory(MapInfoDict.class, XljgInfo));

             call.registerTypeMapping(UserInfoDictArray.class, XljgInfo2,
                     new BeanSerializerFactory(UserInfoDictArray.class, XljgInfo2),
                     new BeanDeserializerFactory(UserInfoDictArray.class, XljgInfo2));
             
     
//对UserInfoDictArray中存在的是对象,则直接对对象进行序列化与反序列话即可。但如果UserInfoDictArray中的是List该如何去映射呢?该如何序列化呢?还没找到实现方法。待解决中。。。望高人指点。
call.registerTypeMapping(UserInfoDict.class, XljgInfo3,
                     new BeanSerializerFactory(UserInfoDict.class, XljgInfo3),
                     new BeanDeserializerFactory(UserInfoDict.class, XljgInfo3));[/color]
             MapInfoDict xljg = (MapInfoDict) call.invoke(new Object[] {parm,"1","1","20","itv"});//执行调用服务接口

System.out.println("xljg="+xljg);//打印输出
         } catch (ServiceException e) {
             e.printStackTrace();
         } catch (RemoteException e) {
             e.printStackTrace();
         }  

 

分享到:
评论

相关推荐

    axis 客户端

    axis 客户端axis 客户端axis 客户端axis 客户端axis 客户端axis 客户端axis 客户端axis 客户端axis 客户端axis 客户端axis 客户端axis 客户端axis 客户端axis 客户端axis 客户端

    Axis客户端调用代码

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

    WebService:Axis客户端调用需要身份验证的CXF服务

    在本场景中,我们关注的是Axis客户端如何调用需要身份验证的CXF服务。Axis是一个开放源码的SOAP栈,常用于创建和部署Web服务,而CXF则是一个更现代的Java框架,也用于构建和消费Web服务,支持WS-Security等高级特性...

    axis客户端调用webservice

    java axis客户端调用webservice,可应用于ofbiz框架。 解决网络上共享代码两次调用后会出现timeout的BUG

    Axis客户端的几种实现方式

    标题中的“Axis客户端的几种实现方式”指的是在Java开发中,使用Axis库来创建和使用Web服务客户端的不同方法。Axis是Apache软件基金会的一个开源项目,它提供了一个强大的工具集,用于处理SOAP(简单对象访问协议)...

    axis客户端需要的最少包

    axis客户端调用WebService需要的最少包。包含axis.jar commons-discovery-0.2.jar commons-logging.jar jaxrpc.jar mail.jar saaj.jar wsdl4j.jar

    webservice for axis客户端详尽代码

    本资源“webservice for axis客户端详尽代码”提供了一套完整的Axis客户端代码示例,对于学习和理解如何在Java应用中使用Axis来调用Web服务极具价值。 一、Web Service基础知识 Web服务通常通过SOAP(Simple ...

    axis客户端

    本文将深入探讨Axis客户端的相关知识点,以及与之关联的jar包。 首先,让我们了解一下Axis客户端的核心功能。Axis客户端是Apache Axis框架的一部分,该框架允许开发者创建、部署和使用Web服务。它提供了一种简单的...

    axis客户端jar文件

    标题中的“axis客户端jar文件”指的是Axis,一个用于构建Web服务客户端和服务端的开源Java框架。Axis是由Apache软件基金会开发的,它允许开发者通过简单的API创建、发布和使用Web服务。这个压缩包包含了运行和使用...

    xfire接口程序,包含xfire服务端和axis客户端

    本项目名为"xfire接口程序,包含xfire服务端和axis客户端",旨在提供一个完整、可直接运行的示例,帮助开发者快速理解并应用这两种技术。 xfire是一个开源的Java库,它允许开发者创建和消费Web服务。xfire的核心...

    java调用webservice axis 客户端 服务器端 包含jar包

    本篇文章将详细解析如何使用Java通过Axis客户端调用WebService,以及如何搭建和配置Axis服务器端。 一、Axis简介 Axis是一个基于Java的SOAP(简单对象访问协议)栈,它提供了从Java类生成Web服务和从WSDL(Web服务...

    WebService Axis客户端调用接口需要用到的jar包

    以上jar包构成了Axis客户端调用Web服务的基础环境。在实际使用中,根据项目需求,可能还需要添加其他依赖,例如数据库驱动或特定的XML解析库。正确配置和使用这些jar包,可以确保客户端能够顺利地与Web服务进行交互...

    axis2客户端调用webService接口,精简jar包

    本文将深入探讨如何使用Axis2客户端调用WebService接口,并且会特别关注如何精简所需的jar包。 首先,了解Axis2客户端的基本概念是至关重要的。Axis2客户端是用于与远程Web服务交互的工具,它允许开发者通过SOAP...

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

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

    axis2客户端调用axis1服务接口

    axis2客户端调用axis1服务接口 调用方式 使用RPC方式调用WebService,为了防止冲突可以增加 // 与weblogic的lib冲突配置 System.setProperty("javax.xml.stream.XMLInputFactory", ...

    webservice-axis2客户端调用(多参).txt

    之前webservice客户端调用,使用RPC客戶端接口调用方法,但发现此种调用方式针对携参方式并不适用。最后经过多种方式测试选择了OMFactory......调用。经测试好用

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

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

    基于Axis的Web Service客户端调用

    【标题】基于Axis的Web Service客户端调用 在IT领域,Web Service是一种通过网络进行通信的标准协议,它允许不同系统间的应用程序互相交换数据。而Apache Axis是Java平台上的一个开源工具,专门用于创建和部署Web ...

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

    通过 Axis 根据服务端 WSDL 生成客户端工具,开发者可以高效地实现客户端与服务端的通信,降低了开发成本,提高了开发效率。了解并熟练掌握这一过程,对于从事 Web 服务开发的 IT 专业人员至关重要。

    axis2客户端需要的jar包

    ### Axis2客户端所需JAR包概述 Axis2是Apache组织提供的一个开源的Web服务框架,它支持SOAP协议,能够提供高性能、低资源消耗的服务。在搭建Axis2客户端时,需要一系列特定的Java库(JAR文件)来确保客户端能够顺利...

Global site tag (gtag.js) - Google Analytics