1、 n 更多企业学院: 《中小企业管理全能版》 183套讲座+89700份资料 《总经理、高层管理》 49套讲座+16388份资料 《中层管理学院》 46套讲座+6020份资料 《国学智慧、易经》 46套讲座 《人力资源学院》 56套讲座+27123份资料 《各阶段员工培训学院》 77套讲座+ 324份资料 《员工管理企业学院》 67套讲座+ 8720份资料 《工厂生产管理学院》 52套讲座+ 13920份资料 《财务管理学院》 53套讲座+ 17945份资料 《销售经理学院》 56套讲
2、座+ 14350份资料 《销售人员培训学院》 72套讲座+ 4879份资料 n 更多企业学院: 《中小企业管理全能版》 183套讲座+89700份资料 《总经理、高层管理》 49套讲座+16388份资料 《中层管理学院》 46套讲座+6020份资料 《国学智慧、易经》 46套讲座 《人力资源学院》 56套讲座+27123份资料 《各阶段员工培训学院》 77套讲座+ 324份资料 《员工管理企业学院》 67套讲座+ 8720份资料 《工厂生产管理学院》 52套讲座+ 13920份资料 《财务管理
3、学院》 53套讲座+ 17945份资料 《销售经理学院》 56套讲座+ 14350份资料 《销售人员培训学院》 72套讲座+ 4879份资料 1、 工具下载 1.1 JDK JDK1.5下载页面: jdk-1_5_0_13-windows-i586-p.exe下载链接: 双击jdk-1_5_0_13-windows-i586-p.exe安装JDK1.5。 1.2 Eclipse(开发环境) Eclipse下载页面: eclipse-SDK-3.3.1-win32.zip下载链接: 解压缩eclipse-SDK-3.3.1
4、win32.zip即可(不需安装)。 1.3 Tomcat(Web服务器) Tomcat6.0下载页面: apache-tomcat-6.0.14.zip下载链接: 解压缩apache-tomcat-6.0.14.zip即可(不需安装)。 1.4 AXIS2(SOAP引擎) AXIS2下载页面: axis2-1.3-bin.zip下载链接: 解压缩axis2-1.3-bin.zip,lib目录下的jar包是WebService业务开发需要的库文件。 axis2-1.3-war.zip下载链接: 2、 Tomcat + AXI
5、S2 配置
1. 解压缩apache-tomcat-6.0.14.zip,axis2-1.3-bin.zip,axis2-1.3-war.zip。
2. 配置AXIS2环境变量:右击“我的电脑” -> 属性 -> 高级 -> 选择“环境变量”
将axis2-1.3下的bin目录增加到Path系统环境变量中(其中D:\axis2-1.3\bin需要根据实际情况设置):
3. 解压缩axis2-1.3-war.zip后,将axis2.war复制到
6、过程会自动将axis2.war解压缩,在
7、ace_2_2.wsdl,cuc_mm_send_service_2_2.wsdl,cuc_mm_types_2_2.xsd 在命令行下执行: WSDL2Java.bat -uri cuc_mm_send_service_2_2.wsdl 生成的代码在src目录下: [src] |-[cn\com\chinaunicom\\cuc\multimedia_messaging\send\v2_2\service] 3.2 在Eclipse中创建工程, 将WSDL生成的代码中src文件夹下的cn目录复制到工程中 3.3 在工程中加入AXIS2的lib库 选中工程cuc
8、mms,右击 -> 选择Properties ->
在工程属性对话框左边选择“Java Build Path”,然后选择右边的“Libraries”属性页 ->
点击“Add External JARs...”按钮,选择
9、c class HeaderSetter { protected static final String SOAPHEADER_spId = "spId"; protected static final String SOAPHEADER_spPassword = "spPassword"; //...(略) public static void setAOMTSoapHeader(ServiceClient serviceClient) { //SOAPHeader字段赋值
10、 String spId = "41999"; String spPassword = "41999"; //...(略) try { //获取AXIOM的对象工厂 OMFactory fac = OMAbstractFactory.getOMFactory(); SOAPFactory sfac = OMAbstractFactory.getSOAP11Factory();
11、 //创建名字空间NameSpace OMNamespace omNs = fac.createOMNamespace(nameSpace, "tns"); //创建RequestSOAPHeader SOAPHeaderBlock block_RequestSOAPHeader = sfac.createSOAPHeaderBlock( SOAPHEADER_RequestSOAPHeader, omNs); //设置spId
12、 SOAPHeaderBlock block_spId = sfac.createSOAPHeaderBlock(SOAPHEADER_spId, omNs); block_spId.addChild(sfac.createOMText(spId)); //...(略) //将字段spId,spPassword,timeStamp,serviceId,... //作为RequestSOAPHeader的子节点 blo
13、ck_RequestSOAPHeader.addChild(block_spId); block_RequestSOAPHeader.addChild(block_spPassword); block_RequestSOAPHeader.addChild(block_timeStamp); block_RequestSOAPHeader.addChild(block_serviceId); block_RequestSOAPHeader.addChild(block_SPNumber);
14、 block_RequestSOAPHeader.addChild(block_sessionId); block_RequestSOAPHeader.addChild(block_sessionEnd); block_RequestSOAPHeader.addChild(block_linkId); block_RequestSOAPHeader.addChild(block_OA); block_RequestSOAPHeader.addChild(block_FA
15、); block_RequestSOAPHeader.addChild(block_groupMessaging); serviceClient.addHeader(block_RequestSOAPHeader); } catch (Exception e) { e.printStackTrace(); } } //...(略) } 3.4.2 修改存根类SendMessageServiceStub的send
16、Message方法, 设置SOAP附件 [cn\com\chinaunicom\\cuc\multimedia_messaging\send\v2_2\service\SendMessageServiceStub.java] 第168行: //【增加org.apache.axiom.attachments.Attachments attachments参数用于发送附件】 public .chinaunicom. sendMessage( .chinaunicom. sendMessage0, org.apache.axiom.atta
17、chments.Attachments attachments) 第203行: /* * 增加以下代码用于设置SOAP附件 */ /*****begin - 设置SOAP附件的代码*****/ if (attachments != null) { _operationClient.getOptions().setProperty( org.apache.axis2
18、Constants.Configuration.ENABLE_SWA, org.apache.axis2.Constants.VALUE_TRUE); _messageContext.setAttachmentMap(attachments); } /*****end - 设置附件的代码*****/ 3.4.3 调用SendMessage接口发送彩信 新建类TestSendMms,在TestSendMms.java中编写代码: (完整代码见“cuc_mms\T
19、estSendMms.java”) public class TestSendMms { public static void main(String[] args) { try { /* * MMS接口规范中定义的sendMessage接口参数: * * DestinationAddress xsd:anyURI [0..unbounded] * SenderAddress
20、 xsd:anyURI * Subject xsd:String * Priority MessagePriority * Charging Common:ChargingInformation * ReceiptRequest Common:SimpleReference */ /*****
21、begin - sendMessage接口参数设置*****/ SendMessage param = new SendMessage(); //DestinationAddress, 目的地址(群发的情况下, DestinationAddress为URI数组) URI[] addr = new URI[1]; addr[0] = new URI("tel:+8613156111754"); param.setDestinationAddress(addr);
22、 //SenderAddress param.setSenderAddress("14244518"); //Subject param.setSubject("MMSTest"); //Priority param.setPriority(MessagePriority.Default); //Charging(可选) param.setCharging(null);
23、 //ReceiptRequest, 为null表示SP不需要状态报告; 非null表示SP需要状态报告 SimpleReference simpleRef = new SimpleReference(); simpleRef.setEndpoint(new URI("")); simpleRef.setCorrelator("123456"); simpleRef.setInterfaceName("test"); // param.setR
24、eceiptRequest(simpleRef); //ReceiptRequest非null表示SP需要状态报告 param.setReceiptRequest(null); //ReceiptRequest为null表示SP不需要状态报告 //设置彩信附件, 从磁盘读取图片文件 File f = new File("D:\\1.txt"); Attachments attachments = new Attachments(); ds = ne
25、w (f); DataHandler dh = new DataHandler(ds); attachments.addDataHandler("12345678", dh); /*****end - sendMessage接口参数设置*****/ //ParlayX GW的sendMessage开放接口URI String sendMessageURI = "wespa_mms/services/SendMessage"; //创
26、建客户端Stub类的对象 SendMessageServiceStub sendMessageStub = new SendMessageServiceStub(sendMessageURI); ServiceClient client = sendMessageStub._getServiceClient(); //【设置SOAPHeader】 HeaderSetter.setAOMTSoapHeader(client); //【设置请求消息】
27、 SendMessage7 reqMessage = new SendMessage7(); reqMessage.setSendMessage(param); //【调用sendMessage接口并获取响应消息, 由AXIS2完成SOAP消息的封装、发送请求消息、接收响应消息】 //需要修改SendMessageServiceStub类的sendMessage方法 //需要增加参数org.apache.axiom.attachments.Attachments atta
28、chments用于传递附件 //并在sendMessage方法中增加以下代码, 用于设置SOAP附件 : // if (attachments != null) // { // _operationClient.getOptions().setProperty( // org.apache.axis2.Constants.Configuration.ENABLE_SWA, // org
29、apache.axis2.Constants.VALUE_TRUE); // _messageContext.setAttachmentMap(attachments); // } //见SendMessageServiceStub.java第203行 SendMessageResponse6 rspMessage = sendMessageStub.sendMessage(reqMessage, attachments); System.out.pr
30、intln(rspMessage.getSendMessageResponse().getResult()); } //...(略) } } 4、 服务端业务开发实例 本节以接收用户上发彩信的业务为例讲解服务端业务开发的实例,其他业务能力的服务端业务开发实例请参见各业务实例代码文件夹中的_readme.txt。 接收用户上发彩信业务:SP作为服务端,当用户上发彩信时ParlayX GW调用SP开放的NotifyMessageReception接口发送用户上发的彩信。 4.1 由WSDL文件生成服务端代码 使用到的WS
31、DL文件包括: cuc_common_faults_2_0.wsdl,cuc_common_types_2_1.xsd, cuc_mm_notification_interface_2_2.wsdl,cuc_mm_notification_service_2_2.wsdl, cuc_mm_types_2_2.xsd 在命令行下执行: WSDL2Java.bat -uri cuc_mm_notification_service_2_2.wsdl -ss -sd 生成的代码在src目录下: [src] |-[cn\com\chinaunicom\] |-[cn\com\c
32、hinaunicom\\cuc\multimedia_ messaging\notification\v2_2\service] 生成的资源文件在resource目录下: [resource] |-services.xml services.xml是用于发布接口的资源文件。 4.2 在Eclipse中创建工程, 将WSDL生成的代码中src文件夹下的cn目录复制到工程中 同3.2。 4.3 在工程中加入AXIS2的lib库 同3.3。 4.4 编写服务端代码,接收用户上发的彩信 修改 cn\com\chinaunicom\\cuc\multimedia_
33、messaging\notification\v2_2\service\MessageNotificationServiceSkeleton.java 代码如下: public .chinaunicom. notifyMessageReception( .chinaunicom. notifyMessageReception) { MessageReference msgRef = notifyMessageReception.getNotifyMessageReception().getMessage(); //打印消息
34、 System.out.println("Get notifyMessageReception message :"); System.out.println("RegistrationIdentifier = " + notifyMessageReception.getNotifyMessageReception().getRegistrationIdentifier()); System.out.println(" MessageIdentifier = " + msgRef.getMessageIdentifier()); Sys
35、tem.out.println(" ActivationNumber = " + msgRef.getMessageServiceActivationNumber()); System.out.println(" SenderAddress = " + msgRef.getSenderAddress()); System.out.println(" Subject = " + msgRef.getSubject()); System.out.println("
36、Priority = " + msgRef.getPriority().getValue()); System.out.println(" Message = " + msgRef.getMessage()); //保存附件 try { Attachments attachments = new Attachments(); MessageContext msgCtx = MessageContext.getCurrentMessageContext();
37、attachments = msgCtx.getAttachmentMap(); String[] content_id = attachments.getAllContentIDs(); for (int i = 0; i < content_id.length; i++) { DataHandler dataHandler = attachments.getDataHandler(content_id[i]); = null; if (dataHandler.getContentType().contains("text"))
38、 { file = new File("C:\\test" + i + ".txt"); //文本附件 } else if (dataHandler.getContentType().contains("image")) { file = new File("C:\\test" + i + ".jpg"); //图片附件 } else { file = new File("C:\\test" + i + ".dat"); } = new (file);
39、 dataHandler.writeTo(); (); (); } } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } NotifyMessageReceptionResponse5 response = new NotifyMessage
40、ReceptionResponse5(); NotifyMessageReceptionResponse param = new NotifyMessageReceptionResponse(); response.setNotifyMessageReceptionResponse(param); return response; // throw new java.lang.UnsupportedOperationException("Please implement " + // this.getC
41、lass().getName() + "#notifyMessageReception");
}
4.5 将服务端代码生成aar包
(1)在Eclipse工程视图中选中服务端工程, 点击右键 -> Export -> 选择Java目录下的JAR file, 点击Next。
(2)选择aar包路径并以.aar作为后缀名 -> Finish。
(3)用winRar打开aar包,将资源文件中的services.xml加入到META-INF目录下。
4.6 在Tomcat服务器部署服务
(1)将aar包复制到






