资源描述
1、 工具下载
1.1 JDK
JDK1.5下载页面:
jdk-1_5_0_13-windows-i586-p.exe下载链接:
http://192.18.108.145/ECom/EComTicketServlet/BEGINA3B0EEAA08A312C1FAEC55BAC2297BBB/-2147483648/2402513439/1/852050/851882/2402513439/2ts+/westCoastFSEND/jdk-1.5.0_13-oth-JPR/jdk-1.5.0_13-oth-JPR:3/jdk-1_5_0_13-windows-i586-p.exe
双击jdk-1_5_0_13-windows-i586-p.exe安装JDK1.5。
1.2 Eclipse(开发环境)
Eclipse下载页面:http://www.eclipse.org/downloads
eclipse-SDK-3.3.1-win32.zip下载链接:
http://www.eclipse.org/downloads/download.php?file=/eclipse/downloads/drops/R-3.3.1-200709211145/eclipse-SDK-3.3.1-win32.zip&url=
解压缩eclipse-SDK-3.3.1-win32.zip即可(不需安装)。
1.3 Tomcat(Web服务器)
Tomcat6.0下载页面:http://tomcat.apache.org/download-60.cgi
apache-tomcat-6.0.14.zip下载链接:
解压缩apache-tomcat-6.0.14.zip即可(不需安装)。
1.4 AXIS2(SOAP引擎)
AXIS2下载页面:http://ws.apache.org/axis2/download.cgi
axis2-1.3-bin.zip下载链接:
解压缩axis2-1.3-bin.zip,lib目录下的jar包是WebService业务开发需要的库文件。
axis2-1.3-war.zip下载链接:
2、 Tomcat + AXIS2 配置
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复制到<Tomcat目录>\webapps 下。
4. 双击<Tomcat目录>\bin\startup.bat 启动Tomcat服务器,启动过程会自动将axis2.war解压缩,在<Tomcat目录>\webapps 下生成axis2目录。
3、 客户端业务开发实例
本节以向用户发送彩信的业务为例讲解客户端业务开发的实例,其他业务能力的业务开发实例请参见各业务实例代码文件夹中的_readme.txt。
彩信发送业务:SP作为客户端调用ParlayX GW开放的SendMessage接口发送彩信。
3.1 由WSDL文件生成客户端代码
使用到的WSDL文件包括:
cuc_common_faults_2_0.wsdl,cuc_common_types_2_1.xsd,
cuc_mm_send_interface_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\www\wsdl\cuc\multimedia_messaging\send\v2_2\service]
3.2 在Eclipse中创建工程, 将WSDL生成的代码中src文件夹下的cn目录复制到工程中
3.3 在工程中加入AXIS2的lib库
选中工程cuc_mms,右击 -> 选择Properties ->
在工程属性对话框左边选择“Java Build Path”,然后选择右边的“Libraries”属性页 ->
点击“Add External JARs...”按钮,选择<axis2-1.3目录>\lib 目录下所有的jar文件,加入到工程的Libraries中 -> OK
3.4 编写客户端代码,开发彩信发送业务
3.4.1 设置SOAPHeader
新建类HeaderSetter,在HeaderSetter.java中编写代码:
(完整代码见“cuc_mms\HeaderSetter.java”)
public class HeaderSetter
{
protected static final String nameSpace = "
protected static final String SOAPHEADER_spId = "spId";
protected static final String SOAPHEADER_spPassword = "spPassword";
//...(略)
public static void setAOMTSoapHeader(ServiceClient serviceClient)
{
//SOAPHeader字段赋值
String spId = "41999";
String spPassword = "41999";
//...(略)
try
{
//获取AXIOM的对象工厂
OMFactory fac = OMAbstractFactory.getOMFactory();
SOAPFactory sfac = OMAbstractFactory.getSOAP11Factory();
//创建名字空间NameSpace
OMNamespace omNs = fac.createOMNamespace(nameSpace, "tns");
//创建RequestSOAPHeader
SOAPHeaderBlock block_RequestSOAPHeader = sfac.createSOAPHeaderBlock(
SOAPHEADER_RequestSOAPHeader, omNs);
//设置spId
SOAPHeaderBlock block_spId = sfac.createSOAPHeaderBlock(SOAPHEADER_spId, omNs);
block_spId.addChild(sfac.createOMText(spId));
//...(略)
//将字段spId,spPassword,timeStamp,serviceId,...
//作为RequestSOAPHeader的子节点
block_RequestSOAPHeader.addChild(block_spId);
block_RequestSOAPHeader.addChild(block_spPassword);
block_RequestSOAPHeader.addChild(block_timeStamp);
block_RequestSOAPHeader.addChild(block_serviceId);
block_RequestSOAPHeader.addChild(block_SPNumber);
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);
block_RequestSOAPHeader.addChild(block_groupMessaging);
serviceClient.addHeader(block_RequestSOAPHeader);
}
catch (Exception e)
{
e.printStackTrace();
}
}
//...(略)
}
3.4.2 修改存根类SendMessageServiceStub的sendMessage方法, 设置SOAP附件
[cn\com\chinaunicom\www\wsdl\cuc\multimedia_messaging\send\v2_2\service\SendMessageServiceStub.java]
第168行:
//【增加org.apache.axiom.attachments.Attachments attachments参数用于发送附件】
public .chinaunicom.www.wsdl.cuc.multimedia_messaging.send.v2_2.service.SendMessageServiceStub.SendMessageResponse6 sendMessage(
.chinaunicom.www.wsdl.cuc.multimedia_messaging.send.v2_2.service.SendMessageServiceStub.SendMessage7 sendMessage0,
org.apache.axiom.attachments.Attachments attachments)
第203行:
/*
* 增加以下代码用于设置SOAP附件
*/
/*****begin - 设置SOAP附件的代码*****/
if (attachments != null)
{
_operationClient.getOptions().setProperty(
org.apache.axis2.Constants.Configuration.ENABLE_SWA,
org.apache.axis2.Constants.VALUE_TRUE);
_messageContext.setAttachmentMap(attachments);
}
/*****end - 设置附件的代码*****/
3.4.3 调用SendMessage接口发送彩信
新建类TestSendMms,在TestSendMms.java中编写代码:
(完整代码见“cuc_mms\TestSendMms.java”)
public class TestSendMms
{
public static void main(String[] args)
{
try
{
/*
* MMS接口规范中定义的sendMessage接口参数:
*
* DestinationAddress xsd:anyURI [0..unbounded]
* SenderAddress xsd:anyURI
* Subject xsd:String
* Priority MessagePriority
* Charging Common:ChargingInformation
* ReceiptRequest Common:SimpleReference
*/
/*****begin - sendMessage接口参数设置*****/
SendMessage param = new SendMessage();
//DestinationAddress, 目的地址(群发的情况下, DestinationAddress为URI数组)
URI[] addr = new URI[1];
addr[0] = new URI("tel:+8613156111754");
param.setDestinationAddress(addr);
//SenderAddress
param.setSenderAddress("14244518");
//Subject
param.setSubject("MMSTest");
//Priority
param.setPriority(MessagePriority.Default);
//Charging(可选)
param.setCharging(null);
//ReceiptRequest, 为null表示SP不需要状态报告; 非null表示SP需要状态报告
SimpleReference simpleRef = new SimpleReference();
simpleRef.setEndpoint(new URI("http://localhost:8080"));
simpleRef.setCorrelator("123456");
simpleRef.setInterfaceName("test");
// param.setReceiptRequest(simpleRef); //ReceiptRequest非null表示SP需要状态报告
param.setReceiptRequest(null); //ReceiptRequest为null表示SP不需要状态报告
//设置彩信附件, 从磁盘读取图片文件
File f = new File("D:\\1.txt");
Attachments attachments = new Attachments();
FileDataSource ds = new FileDataSource(f);
DataHandler dh = new DataHandler(ds);
attachments.addDataHandler("12345678", dh);
/*****end - sendMessage接口参数设置*****/
//ParlayX GW的sendMessage开放接口URI
String sendMessageURI = "http://127.0.0.1:18080/wespa_mms/services/SendMessage";
//创建客户端Stub类的对象
SendMessageServiceStub sendMessageStub = new SendMessageServiceStub(sendMessageURI);
ServiceClient client = sendMessageStub._getServiceClient();
//【设置SOAPHeader】
HeaderSetter.setAOMTSoapHeader(client);
//【设置请求消息】
SendMessage7 reqMessage = new SendMessage7();
reqMessage.setSendMessage(param);
//【调用sendMessage接口并获取响应消息, 由AXIS2完成SOAP消息的封装、发送请求消息、接收响应消息】
//需要修改SendMessageServiceStub类的sendMessage方法
//需要增加参数org.apache.axiom.attachments.Attachments attachments用于传递附件
//并在sendMessage方法中增加以下代码, 用于设置SOAP附件 :
// if (attachments != null)
// {
// _operationClient.getOptions().setProperty(
// org.apache.axis2.Constants.Configuration.ENABLE_SWA,
// org.apache.axis2.Constants.VALUE_TRUE);
// _messageContext.setAttachmentMap(attachments);
// }
//见SendMessageServiceStub.java第203行
SendMessageResponse6 rspMessage = sendMessageStub.sendMessage(reqMessage, attachments);
System.out.println(rspMessage.getSendMessageResponse().getResult());
}
//...(略)
}
}
4、 服务端业务开发实例
本节以接收用户上发彩信的业务为例讲解服务端业务开发的实例,其他业务能力的服务端业务开发实例请参见各业务实例代码文件夹中的_readme.txt。
接收用户上发彩信业务:SP作为服务端,当用户上发彩信时ParlayX GW调用SP开放的NotifyMessageReception接口发送用户上发的彩信。
4.1 由WSDL文件生成服务端代码
使用到的WSDL文件包括:
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\www\schema]
|-[cn\com\chinaunicom\www\wsdl\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\www\wsdl\cuc\multimedia_ messaging\notification\v2_2\service\MessageNotificationServiceSkeleton.java
代码如下:
public .chinaunicom.www.schema.cuc.multimedia_messaging.notification.v2_2.local.NotifyMessageReceptionResponse5 notifyMessageReception(
.chinaunicom.www.schema.cuc.multimedia_messaging.notification.v2_2.local.NotifyMessageReception4 notifyMessageReception) {
MessageReference msgRef = notifyMessageReception.getNotifyMessageReception().getMessage();
//打印消息
System.out.println("Get notifyMessageReception message :");
System.out.println("RegistrationIdentifier = " + notifyMessageReception.getNotifyMessageReception().getRegistrationIdentifier());
System.out.println(" MessageIdentifier = " + msgRef.getMessageIdentifier());
System.out.println(" ActivationNumber = " + msgRef.getMessageServiceActivationNumber());
System.out.println(" SenderAddress = " + msgRef.getSenderAddress());
System.out.println(" Subject = " + msgRef.getSubject());
System.out.println(" Priority = " + msgRef.getPriority().getValue());
System.out.println(" Message = " + msgRef.getMessage());
//保存附件
try
{
Attachments attachments = new Attachments();
MessageContext msgCtx = MessageContext.getCurrentMessageContext();
attachments = msgCtx.getAttachmentMap();
String[] content_id = attachments.getAllContentIDs();
for (int i = 0; i < content_id.length; i++)
{
DataHandler dataHandler = attachments.getDataHandler(content_id[i]);
File file = null;
if (dataHandler.getContentType().contains("text"))
{
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");
}
FileOutputStream fileOutputStream = new FileOutputStream(file);
dataHandler.writeTo(fileOutputStream);
fileOutputStream.flush();
fileOutputStream.close();
}
}
catch (IOException e)
{
e.printStackTrace();
}
catch (Exception e)
{
e.printStackTrace();
}
NotifyMessageReceptionResponse5 response = new NotifyMessageReceptionResponse5();
NotifyMessageReceptionResponse param = new NotifyMessageReceptionResponse();
response.setNotifyMessageReceptionResponse(param);
return response;
// throw new java.lang.UnsupportedOperationException("Please implement " +
// this.getClass().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包复制到 <Tomcat服务器目录>\webapps\axis2\WEB-INF\services 下。
(2)启动Tomcat服务器,可以在http://localhost:8080/axis2/services/listServices中看到发布的服务“MessageNotificationService”。
展开阅读全文