使用axis调用WebService_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 使用axis调用WebService

使用axis调用WebService

 2013/9/30 16:15:30  gqsunrise  程序员俱乐部  我要评论(0)
  • 摘要:公司项目有一个给用户发送短信的需求,需要调用一个.NET写的WebService。在写客户端过程中,遇到了不少的问题,在这里整理下,也希望和我遇到同样问题的小伙伴些少走点弯路。直接上代码:publicstaticbooleansend(StringMsgContent,StringDestNumber){booleanres=false;try{//webservice路径//这里后面加不加"?wsdl"效果都一样的Stringendpoint="http://sms.28inter.com
  • 标签:Web Service 使用 Webservice

公司项目有一个给用户发送短信的需求,需要调用一个.NET写的WebService。在写客户端过程中,遇到了不少的问题,在这里整理下,也希望和我遇到同样问题的小伙伴些少走点弯路。

?

直接上代码:

?

class="java" name="code">public static boolean send(String MsgContent, String DestNumber){
        boolean res = false;
        try {
            // webservice路径
            // 这里后面加不加 "?wsdl" 效果都一样的
            String endpoint = "http://sms.28inter.com:8080/SmsService/SmsService.asmx";

            // 发送短信接口方法名
            String operationName = "SendEx";
            String targetNamespace = "http://tempuri.org/";
            // 定义service对象
            Service service = new Service();
            // 创建一个call对象
            Call call = (Call) service.createCall();
            // 设置目标地址,即webservice路径
            call.setTargetEndpointAddress(endpoint);
            // 设置操作名称,即方法名称
            call.setOperationName(new QName(targetNamespace, operationName));
            // 设置方法参数
            call.addParameter(new QName(targetNamespace, "UserId"),
                    XMLType.XSD_STRING,
                    ParameterMode.IN);
            call.addParameter(new QName(targetNamespace, "Password"),
                    XMLType.XSD_STRING,
                    ParameterMode.IN);
            call.addParameter(new QName(targetNamespace, "MsgContent"),
                    XMLType.XSD_STRING,
                    ParameterMode.IN);
            call.addParameter(new QName(targetNamespace, "DestNumber"),
                    XMLType.XSD_STRING,
                    ParameterMode.IN);
            call.addParameter(new QName(targetNamespace, "SendTime"),
                    XMLType.XSD_STRING,
                    ParameterMode.IN);
            call.addParameter(new QName(targetNamespace, "SubNumber"),
                    XMLType.XSD_STRING,
                    ParameterMode.IN);
            call.addParameter(new QName(targetNamespace, "BatchSendID"),
                    XMLType.XSD_STRING,
                    ParameterMode.IN);
            call.addParameter(new QName(targetNamespace, "BizType"),
                    XMLType.XSD_STRING,
                    ParameterMode.IN);    // XMLType.XSD_INT
            call.addParameter(new QName(targetNamespace, "WapURL"),
                    XMLType.XSD_STRING,
                    ParameterMode.IN);

            /**
             * 设置返回值类型-由于文档给的是返回一个代理类SendExResp-这个需要用ws工具生成,不然就要手动写,
             * 故这里设置成org.w3c.dom.Element.class,不然会报org.xml.sax.SAXException: SimpleDeserializer encountered a child element, which is NOT expected错误。
             * 注:具体的返回类型,根据对方提供的ws进行设置即可,如:call.setReturnClass(String[].class);
             */
            call.setReturnClass(org.w3c.dom.Element.class);

            // 解决错误:服务器未能识别 HTTP 头 SOAPAction 的值
            call.setUseSOAPAction(true);
            call.setSOAPActionURI(targetNamespace + operationName);

            // 调用ws方法
            call.invoke(new Object[]{SMS.USERID, SMS.PASSWORD, MsgContent, DestNumber, SMS.SENDTIME, SMS.SUBNUMBER, SMS.BATCHSENDID, SMS.BIZTYPE, SMS.WAPURL});
            res = true;
        } catch (ServiceException e) {
            res = false;
            e.printStackTrace();
        } catch (RemoteException e) {
            res = false;
            e.printStackTrace();
        }

        return res;
    }

注:上述WSDL里面描述的参数BIZTYPE是int类型的,但传递参数时要传递字符串类型,否则报如下错误:
服务器无法读取请求。 ---> XML 文档(1, 841)中有错误。 ---> 输入字符串的格式不正确

?

??? 参考:http://gaozi131.iteye.com/blog/516309

发表评论
用户名: 匿名