• (转)Java通过axis调用WebService


    转自:http://blog.csdn.net/wanglha/article/details/49679825

    转载地址:http://www.linuxidc.com/Linux/2015-06/118460.htm

    ------------------------------------------分割线------------------------------------------

    免费下载地址在 http://linux.linuxidc.com/

    用户名与密码都是www.linuxidc.com

    具体下载目录在 /2015年资料/6月/6日/Java通过axis调用WebService/

    下载方法见 http://www.linuxidc.com/Linux/2013-07/87684.htm

    ------------------------------------------分割线------------------------------------------

    包含:axis.jar,commons-discovery.jar,commons-logging-1.0.4.jar,jaxrpc.jar,wsdl4j.jar,mail.jar。

    为什么会有mail.jar呢?俺也不太清楚,如果没有的话会报警告:

    2014-10-22 15:07:45 org.apache.axis.utils.JavaUtils isAttachmentSupported
    警告: Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachment support is disabled.

    网上有很多说这个问题的,但是还是没闹明白,还是加上mail.jar稳妥点。

    对接webservice一定要有接口地址了

    例如:

    http://10.10.10.10:8080/xxxxx/services/XXXXWebservice?wsdl

    直接上我写的测试代码吧(包名、地址、类名我都换成xxx了)

    soapaction是通过访问接口地址获得的,targetNamespace

    <wsdl:definitions targetNamespace="http://webservice.xxxx.com">

    package xx.xxxx.xxx;
     
    import java.NET.URL;
     
    import javax.xml.namespace.QName;
    import javax.xml.rpc.ParameterMode;
    import javax.xml.rpc.encoding.XMLType;
     
    import org.apache.axis.client.Call;
    import org.apache.axis.client.Service;
     
    public class XXXWebService {
        public static void main(String[] args) {
            String soapaction = "http://webservice.xxxxxx.com";
            //你的webservice地址
            String endpoint = "http://10.10.10.10:8080/xxxxx/services/XXXXWebservice";
            Service service = new Service();
            try {
                Call call = (Call) service.createCall();
                call.setTimeout(new Integer(60000));
                call.setTargetEndpointAddress(new URL(endpoint));
                //你需要远程调用的方法
                call.setOperationName(new QName(soapaction,"getXXXX"));
                //方法参数,如果没有参数请无视
                call.addParameter(new QName(soapaction,"xxxxxx"), XMLType.XSD_STRING, ParameterMode.IN);
                call.addParameter(new QName(soapaction,"xxxx"), XMLType.XSD_STRING, ParameterMode.IN);
                //设置返回类型,对方接口返回的json,我就用string接收了,自定义类型另贴一个代码
                call.setReturnType(XMLType.XSD_STRING);
                //调用方法并传递参数,没有参数的话: call.invoke(new Object[] { null});
                String result = (String) call.invoke(new Object[]{"xxxxx","xx,xx"});
                System.out.println(result);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    下面是处理自定义类型        处理自定义返回类型我用的是dom4j  jar包: http://pan.baidu.com/s/1jGGfNZg

           call.setReturnType(XMLType.XSD_SCHEMA); 
                //没有参数就写个null
                Schema data = (Schema) call.invoke(new Object[] { null});
                MessageElement[] datas = data.get_any();
                for (int i = 0; i < datas.length; i++) {
                    SAXReader reader = new org.dom4j.io.SAXReader();
                    Document doc = reader.read(new ByteArrayInputStream(datas[i].toString().getBytes()));
                    /* 例:这是你调用方法返回的文档
                    * <ns:getXXXXXXX>
                    *    <ns:return type="xx.xxx.xxx.xxxx.XXXXX">
                    *        <ax21:objects type="xx.xxx.xxx.xxxx.XXXXX">
                    *            <ax21:attribute>巴拉巴拉</ax21:attribute>
                    *        </ax21:objects>
                    *    </ns:return>
                    * </ns:getXXXXXXX>
                    */
                    //这里的ns1:xxx 对应上面的ax21:objects
                    Node node = doc.selectSingleNode("ns1:xxx");
                    if (node != null) {
                        //这里就是获取object下的属性了
                        Node attribute= node.selectSingleNode("ns1:attribute");
                        System.out.println(attribute);
                    }
                }

    以上就是通过axis调用webservice的全部内容了,现在只是会点皮毛,工作之余还是要多加学习:)

  • 相关阅读:
    金额转换成中文大写金额
    键盘上的键值对应表
    vue项目一些常见问题
    Sview在线格式转换
    Windows环境下PPOCRLabel的简单使用
    js对数组进行分组且赋值给某对象的属性
    vue项目中,用axios获取当前页面header信息
    jemeter 并发创建
    PaddleOCR Structure表格识别
    C#中检查null的语法糖
  • 原文地址:https://www.cnblogs.com/kxxx/p/6148733.html
Copyright © 2020-2023  润新知