您的位置:首页 > 其它

SOAP消息发送(拼装消息体)

2015-05-28 00:00 363 查看
摘要: SOAP消息发送(拼装消息体) 利用模板模式实现

1、ISoap.java

package com.linkage.lcsmp.interfaces.soap.epg.soapmanager;

import java.rmi.RemoteException;
import java.util.Map;

import org.apache.axiom.om.OMElement;

public interface ISoapSender {
Map<String,Object> send() throws RemoteException;

OMElement buildMethodBody();

Map<String,Object> buildResult(OMElement ome);
}


2、部分实现父类SoapTemplate.java

package com.linkage.lcsmp.interfaces.soap.epg.soapmanager;

import java.rmi.RemoteException;
import java.util.Map;

import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
import org.apache.axis2.transport.http.HTTPConstants;
import org.apache.commons.logging.Log;

import com.zte.iptv.volcano.core.io.logging.LogFactory;
import com.zte.iptv.volcano.core.io.logging.LogModel;

public abstract class SoapSenderTemplate implements ISoapSender
{
private static Log log = LogFactory.getLog(SoapSenderTemplate.class, LogModel.Soap);

//请求soap接口地址,示例:http://10.47.215.153:8088/iptvtest/soap/shanghai/service
private String address;
//请求soap接口命名空间:http://webservice.iptv3a.shtel.com/,一般是类所在包名的倒序
private String nameSapce;

private OMFactory fac;
private OMNamespace omNameSapce;
private ServiceClient sender;

public SoapSenderTemplate(){}

public SoapSenderTemplate(String address, String nameSapce)
{
this.address = address;
this.nameSapce = nameSapce;
//初始化SOAP消息发送器
init();
}

private void init() {
Options options = new Options();
// 指定调用WebService的URL
EndpointReference targetEPR = new EndpointReference(this.address);
options.setTo(targetEPR);
options.setProperty(HTTPConstants.CHUNKED, false);
try {
sender = new ServiceClient();
sender.setOptions(options);
} catch (AxisFault e) {
log.error("init soap service client error!", e);
}

fac = OMAbstractFactory.getOMFactory();
omNameSapce = fac.createOMNamespace(this.nameSapce,"");
}

@Override
public Map<String,Object> send() throws RemoteException {
//构建SOAP消息体
OMElement method = buildMethodBody();
method.build();
//发送SOAP消息
OMElement result = sender.sendReceive(method);
return buildResult(result);
}

public OMFactory getFac() {
return fac;
}

public void setFac(OMFactory fac) {
this.fac = fac;
}

public OMNamespace getOmNameSapce() {
return omNameSapce;
}

public void setOmNameSapce(OMNamespace omNameSapce) {
this.omNameSapce = omNameSapce;
}

}


3、具体实现类 AuthSoapSender.java

package com.shtel.iptv3a.webservice;

import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.axiom.om.OMElement;
import org.apache.commons.logg
4000
ing.Log;

import com.linkage.lcsmp.interfaces.soap.epg.soapmanager.ISoapSender;
import com.linkage.lcsmp.interfaces.soap.epg.soapmanager.SoapSenderTemplate;
import com.zte.iptv.epg.util.EpgUtility;
import com.zte.iptv.volcano.core.io.logging.LogFactory;
import com.zte.iptv.volcano.core.io.logging.LogModel;
import com.zte.iptv.volcano.epg.util.EpgUtils;

/**
* 对接上海BMS业务鉴权接口
* @author 10154908
*
*/
public class ShanghaiAuthSaopSender extends SoapSenderTemplate
{
private static Log log = LogFactory.getLog(ShanghaiAuthSaopSender.class, LogModel.Soap);

private Map<String,Object> params;

public ShanghaiAuthSaopSender() {
super();
}

public ShanghaiAuthSaopSender(String address, String nameSapce,Map<String, Object> params) {
super(address, nameSapce);
this.params = params;
}

@Override
public OMElement buildMethodBody() {
OMElement ServiceAuth = getFac().createOMElement("ServiceAuth",getOmNameSapce());
OMElement ServiceAuthIn = getFac().createOMElement("ServiceAuthIn",getOmNameSapce());

OMElement SPID =  getFac().createOMElement("SPID",getOmNameSapce());
OMElement UserID =  getFac().createOMElement("UserID",getOmNameSapce());
OMElement UserToken =  getFac().createOMElement("UserToken",getOmNameSapce());
OMElement ProductID =  getFac().createOMElement("ProductID",getOmNameSapce());
OMElement ServiceID =  getFac().createOMElement("ServiceID",getOmNameSapce());
OMElement contentID =  getFac().createOMElement("contentID",getOmNameSapce());
OMElement TimeStamp =  getFac().createOMElement("TimeStamp",getOmNameSapce());
OMElement IP =  getFac().createOMElement("IP",getOmNameSapce());
OMElement TransactionID =  getFac().createOMElement("TransactionID",getOmNameSapce());
OMElement MAC =  getFac().createOMElement("MAC",getOmNameSapce());

int timestampLength = EpgUtils.getParamAsInt(params.get("timestamplength"),19);
SPID.addChild(getFac().createOMText(EpgUtils.getParamAsString(params.get("spid"))));
UserID.addChild(getFac().createOMText(EpgUtils.getParamAsString(params.get("userid"))));
UserToken.addChild(getFac().createOMText(EpgUtils.getParamAsString(params.get("usertoken"))));
ProductID.addChild(getFac().createOMText(EpgUtils.getParamAsString(params.get("productid"))));
ServiceID.addChild(getFac().createOMText(EpgUtils.getParamAsString(params.get("serviceid"))));
contentID.addChild(getFac().createOMText(EpgUtils.getParamAsString(params.get("contentid"))));
TimeStamp.addChild(getFac().createOMText(EpgUtils.getParamAsString(System.currentTimeMillis())));
IP.addChild(getFac().createOMText(EpgUtils.getParamAsString(params.get("ip"))));
TransactionID.addChild(getFac().createOMText(EpgUtils.getParamAsString(params.get("transactionid"))));
MAC.addChild(getFac().createOMText(EpgUtils.getParamAsString(params.get("mac"))));

ServiceAuthIn.addChild(SPID);
ServiceAuthIn.addChild(UserID);
ServiceAuthIn.addChild(UserToken);
ServiceAuthIn.addChild(ProductID);
ServiceAuthIn.addChild(ServiceID);
ServiceAuthIn.addChild(contentID);
ServiceAuthIn.addChild(TimeStamp);
ServiceAuthIn.addChild(IP);
ServiceAuthIn.addChild(TransactionID);
ServiceAuthIn.addChild(MAC);

ServiceAuth.addChild(ServiceAuthIn);
if (log.isDebugEnabled())
{
log.debug("the shanghai bms auth request soap : " + ServiceAuth);
}
return ServiceAuth;
}

@Override
public Map<String,Object> buildResult(OMElement result) {
if (log.isDebugEnabled())
{
log.debug("the shanghai bms auth reponse soap : " + result);
}
if (result == null) {
return Collections.emptyMap();
}
Iterator<OMElement> firstIter = result.getChildElements();
if (!firstIter.hasNext())
{
return Collections.emptyMap();
}
Map<String,Object> returnMap = new HashMap<String,Object>();
OMElement serviceAuthReturn =  firstIter.next();
Iterator<OMElement> secondIter = serviceAuthReturn.getChildElements();
while(secondIter.hasNext())
{
OMElement valueElement = secondIter.next();
String name = valueElement.getLocalName();
if ("ProductList".equals(name)) {
returnMap.put(name, buildProductList(valueElement));
}
else
{
returnMap.put(name, valueElement.getText());
}
}
return returnMap;
}

private List<Map<String,String>> buildProductList(OMElement productListElement) {
if (productListElement == null)
{
return Collections.emptyList();
}
List<Map<String,String>> returnList = new ArrayList<Map<String,String>>();
Iterator<OMElement> productListElementIter = productListElement.getChildElements();
while (productListElementIter.hasNext()) {
OMElement productElement = productListElementIter.next();
Iterator<OMElement> productElementIter = productElement.getChildElements();
Map<String,String> product = new HashMap<String,String>();
while(productElementIter.hasNext())
{
OMElement valueElement = productElementIter.next();
product.put(valueElement.getLocalName(), valueElement.getText());
returnList.add(product);
}
}
return returnList;
}

public static void main(String[] args) throws RemoteException {
String address = "http://IP:PORT/test/soap//service";
String nameSapce = "http://soap.test.com";

Map<String,Object> params = new HashMap<String,Object>();
params.put("spid", "123");
params.put("productid", "dsfs34234");
params.put("contentid", "11111");
params.put("ip", "10.47.216.31");
params.put("serviceid", "aaaaaa");
params.put("transactionid", "bbbbbb");
params.put("userid", "00130738");
params.put("usertoken", "00130738");
params.put("mac", "00-16-41-EE-C3-D5");
params.put("timestamp", "201501301343");
ISoapSender sender = new ShanghaiAuthSaopSender(address, nameSapce, params);
Map<String,Object> result = sender.send();

System.out.println(result);

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  SOAP 模板模式