isag java_ISAG SMS下行开发实例(JAVA-Eclipse) | 学步园

业务场景:SP向用户下发一条短信,并设置需要状态回执,用户收到短信后,网关将状态报告通知给CP/SP,CP/SP收到状态报告后,在控制台中打印出来。

开发平台:Eclipse

Step1:创建工程

创建之前请确认你的Eclipse已安装了WTP插件,没有安装的请去这里下:

新建一个Dynamic Web Project ,名字ctcc。

1.jpg

Target Runtime 选择你所使用的服务器版本,如TOMCAT 6.0,Finish.

3.jpg

Step2:导入并解析WSDL

接下来需要导入相关WSDL文件,右键点击工程->Import->File System,选择WSDL地址,导入所有的WSDL:

4.jpg

右键点击WSDL文件(后缀为wsdl的文件),选择Web Service->Generate Java bean skeleton生成接口代码框架。

5.jpg

成功后运行服务器,在IE中输入http://localhost:8080/ctcc/services应该会出现如下页面,显示现有的WEBSERVICE:

7.jpg

Step3:实现SendSms接口及SmsNotification接口

找到cn.com.chinatelecom.www.wsdl.ctcc.sms.send.v2_1.service.SendSmsBindingStub

类(请耐心寻找—。—),在createCall()开始加入下面语句:

org.apache.axis.client.Call _call = (org.apache.axis.client.Call) super.service.createCall();

//设置下行soap头

String fileName = System.getProperty("user.dir")+"//conf//downsoap.properties";

RouteSoapHeader rs = new RouteSoapHeader(fileName,0);

rs.setDownSoapHeader(_call);

其中downsoap.properties是下行SOAPHEADER的配置文件,读出REQUESTSOAPHEADER的各项属性;RouteSoapHeader是SoapHeader的封装解析类,与上下行SOAPHEADER,MD5加密类和上面的WSDL一样由电信提供。

找到cn.com.chinatelecom.www.wsdl.ctcc.sms.notification.v2_1.service.SmsNotificationBindingImpl

类,在notifySmsDeliveryReceipt中添加如下通知代码:

System.out.println("=========调用notifySmsDeliveryStatus接口=========");

System.out.println("correlator:" + correlator);

System.out.println("Address:" + deliveryStatus.getAddress());

System.out.println("DeliveryStatus:" + deliveryStatus.getDeliveryStatus());

Step4:编写主程序

创建一个Test类,代码:

import cn.com.chinatelecom.www.wsdl.ctcc.sms.send.v2_1.service.SendSmsServiceLocator;

import cn.com.chinatelecom.www.wsdl.ctcc.sms.send.v2_1._interface.SendSms;

import cn.com.chinatelecom.www.schema.ctcc.common.v2_1.ChargingInformation;

import cn.com.chinatelecom.www.schema.ctcc.common.v2_1.SimpleReference;

import org.apache.axis.types.URI;

import java.net.URL;

public class Test {

/**

* @param args

*/

public static void main(String[] args) {

try {

//网关的url地址,该地址提供短信下发能力

URL url = new URL("http://localhost:8080/ctcc/services/SendSms");

SendSmsServiceLocator ssl = new SendSmsServiceLocator();

SendSms service = ssl.getSendSms(url);

//部分业务逻辑处理在此省略...

URI uri[] = new URI[1];

//手机号码 一般跟SOAP头中的OA一致,都需要以tel:开头

uri[0] = new URI("tel:16989095686"); //终端号码

String message = "你好,短信测试"; //短信内容

String senderName = "1062895932"; //接入码,终端收到短信后显示的主叫

//ChargingInformation 目前暂不处理,但需要填写,变量值值可随意填写

ChargingInformation charging = new ChargingInformation();

charging.setAmount(new java.math.BigDecimal(new java.math.BigInteger("0")));

charging.setCode("123");

charging.setCurrency("456");

charging.setDescription("nihao");

//receiptRequest作用是,当不为空时,则要求网关返回状态报告

SimpleReference receiptRequest = new SimpleReference();

/*

* Correlator

* 该标识唯一,相当于该次下发流程的流水号,由SP生成,

* 将在状态报告接口notifySmsDeliveryReceipt中原样返回给SP,不超30位

* Endpoint InterfaceName目前这两个变量暂时不处理,可任意填写

*/

receiptRequest.setCorrelator("354347657534345");

receiptRequest.setEndpoint(new URI("tel:123"));

receiptRequest.setInterfaceName("sendSms");

//reqId 在请求下发成功后,网关会返回一个唯一标识

String reqId = service.sendSms(uri,senderName,charging,message,receiptRequest);

System.out.println("reqId:" + reqId);

}

catch (Exception ex) {

ex.printStackTrace();

}

}

}

Step5:运行

cn.com.chinatelecom.www.wsdl.ctcc.sms.notification.v2_1.service.SmsNotificationBindingImpl

类接到通知信息后就会调用notifySmsDeliveryReceipt方法(第三步已写好),输出Dilivery Statu等信息。

8.jpg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值