zoukankan      html  css  js  c++  java
  • 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名是否有误

  • 相关阅读:
    python中的__init__方法
    hosts文件是做什么的
    自动化测试--环境搭建python+pytest+selenium
    什么是Netty服务器
    Java 基础原理一
    Python MongoDB 基本操作
    Mysql 数据库的查询操作
    Git 笔记二
    Git 使用笔记
    最全正则表达式
  • 原文地址:https://www.cnblogs.com/zivxiaowei/p/3626124.html
Copyright © 2011-2022 走看看