• webservice调用接口,接口返回数组类型


    1.

    其中sendSyncMsg1接口是方法名,Vector实现了List接口,xml是sendSyncMsg1的方法形参

    Service service = new Service();   

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

    call.setTargetEndpointAddress(new URL(     "http://127.0.0.1:8080/services/fangkunTest"));   

    call.setOperationName(new QName("http://127.0.0.1:8080/",     "sendSyncMsg1"));  

    call.addParameter(new QName("http://127.0.0.1:8080/", "xml"),     XMLType.XSD_STRING, ParameterMode.IN);   //必须这么用,不知道为啥,此处与返回基本类型写法有差别

    call.setReturnType(XMLType.SOAP_VECTOR);   //返回时数组类型,暂时知道用XMLType.SOAP_VECTOR

    call.setUseSOAPAction(true);  

    call.setSOAPActionURI("http://127.0.0.1:8080/sendSyncMsg1");  

    Vector result = (Vector) call.invoke(new Object[] { "昆明" });   

    // Vector实现了List接口   

    System.out.println((String) result.get(1));   

    if (result != null && result.size() != 0) {   

     if (result.get(0).equals("1")) {     

    String etoken = (String) result.get(1);    

    } else {

        System.out.println(result.get(2));    

        return;    

    }

      }

    2.(转来自google)

    Java利用Axis远程调用WebService接口

    准备工作:

      主要依赖的包:

      1.axis.jar

      官网:http://axis.apache.org/axis/

      2.jaxrpc.jar

      下载地址:http://www.java2s.com/Code/Jar/j/Downloadjaxrpcjar.htm

    说明:

      在拿到wsdl地址后先分析清楚xml文件的一些参数,然后再动手写代码,例如service名称,targetNamespace,请求operation的名称,要传入的参数类型,返回结果类型等等。具体的代码参考如下:

     
    
     1 package com.joysee.account.service.impl;
     2 
     3 
     4 import java.rmi.RemoteException;
     5 
     6 import javax.xml.namespace.QName;
     7 import javax.xml.rpc.ParameterMode;
     8 import javax.xml.rpc.ServiceException;
     9 
    10 import org.apache.axis.client.Call;
    11 import org.apache.axis.client.Service;
    12 
    13 
    14 public class Test {
    15 
    16     /**
    17      * @param args
    18      * @throws ServiceException 
    19      * @throws MalformedURLException 
    20      * @throws RemoteException 
    21      */
    22     public static void main(String[] args) throws ServiceException, RemoteException {
    23         
    24         //WSDL地址
    25         String wsdlUrl ="http://IP:PORT/ExampleWebService?wsdl";  
    26         //看具体响应的WSDL中的namespace
    27         String nameSpaceUri ="http://ws.exmaple.com/";    
    28 
    29         Service service = new Service();
    30         
    31         Call call = (Call)service.createCall();
    32         call.setTargetEndpointAddress(wsdlUrl);
    33         
    34         //设置operation 名称,
    35         call.setOperationName(new QName(nameSpaceUri, "order"));
    36         
    37         //设置账户,注意参数为XSD_STRRING
    38         call.addParameter("account", org.apache.axis.Constants.XSD_STRING,
    39                 ParameterMode.IN);
    40         
    41         //设置账户,注意参数为XSD_LONG
    42         call.addParameter("price", org.apache.axis.Constants.XSD_LONG,
    43                 ParameterMode.IN);
    44         
    45         //设置返回类型为对象数组
    46         call.setReturnClass(Object[].class);
    47    
    48         Object[] result = (Object[]) call.invoke(new Object[]{"test","123456"});
    49 
    50         System.out.println(result[0]);
    51         
    52     }
    53 
    54 }
    

    常见异常:

    1.org.xml.sax.SAXException: No deserializer for {http://www.w3.org/2001/XMLSchema}anyType

      这个异常需要检查call.setReturnClass(); 中的类型,或者是setReturnType()

    2. Unexpected wrapper element order found. 

     可以检查setOperationName中的QName参数,其中的NameSpace地址是不是有问题,或者operation名是否有误

  • 相关阅读:
    Toolbar设置回退箭头的方法
    Android进程绝杀技--forceStop
    线程池的经典使用
    Handler+ExecutorService(线程池)+MessageQueue模式+缓存模式
    adb pull apk
    工厂模式_工厂方法模式
    工厂模式_简单工厂模式
    spring_aop
    代理模式_动态代理
    代理模式_静态代理
  • 原文地址:https://www.cnblogs.com/beijingstruggle/p/5160108.html
Copyright © 2020-2023  润新知