使用到的技术及其相关框架总结:
本次项目是给国广东方提供接口的项目,主要实现的功能,根据cis和cps传过来的xml链接地址,解析xml,然后保存到数据库相关表。webservice接口使用了开源Services框架--cxf,项目框架使用了spring3.2.11,xml使用了dom4j版本1.6.1解析,数据库框架利用jdbc自己封装的框架,数据库使用的是MySQL,使用了redis作为缓存,利用junit单元测试,使用soap协议给国广东方发送解析信息,使用了多线程,利用maven进行项目管理。
一、webService框架cxf
1.在pom.xml文件中引入包,如:
<
dependency
>
<
groupId
> org.apache.cxf
</
groupId
>
<
artifactId
>
cxf-
rt-
frontend-
jaxws
</
artifactId
>
<
version
> 3.0.2
</
version
>
</
dependency
>
2.spring.xml文件中配置cxf文件和webservice服务类名,如:
<
context:annotation-config
></
context:annotation-config
>
<
import
resource =
"classpath:META-INF/cxf/cxf.xml"
/>
<
import
resource =
"classpath:META-INF/cxf/cxf-servlet.xml"
/>
<
context:component-scan
base-package =
"com.**.manager.*"
></
context:component-scan
>
<
jaxws:endpoint
id=
"mange"
implementor =
"#CSPRequest"
address=
"/mange"
/>
CSPRequest为接口实现类名,mange为地址名,如接口地址为:
http://127.0.0.1:8080/cibnManager/mange?wsdl
3.webservice接口ICSPRequest类定义,如
@WebService (targetNamespace=
"iptv" ,portName=
"ctms")//ns为iptv,port binding name ctms
public
interface ICSPRequest {
public CSPResult ExecCmd(
@WebParam (name=
"CSPID" ) String CSPID,
@WebParam (name=
"LSPID" ) String LSPID,
@WebParam (name=
"CorrelateID" ) String CorrelateID,
@WebParam (name=
"CmdFileURL" )
String CmdFileURL);
}//
@WebParam 显示参数名字
4.webservice接口实现类CSPRequest类定义,如
@WebService (targetNamespace=
"iptv" ,portName=
"ctms",serviceName=
"CSPRequestService" )//ns 、 portname和接口定义成一致
@RespectBinding (enabled =
true)
@Service
public
class CSPRequest
implements ICSPRequest{
@Autowired
private AnalyzeXMLService
analyzeXMLService ;
@Autowired
private CacheRedisAction
cacheRedisAction ;
@WebResult (name=
"CSPResult" )
@Override
public CSPResult ExecCmd(String CSPID, String LSPID, String CorrelateID,
String CmdFileURL) {
二、解析xml
XMLStr:将xml文件转化成string
Document doc = DocumentHelper.
parseText(xmlStr) ;
Element root = doc.getRootElement();
Element objs = root.element(
"Objects" );
或者:
SAXReader saxReader =
new SAXReader();
Document document = saxReader.read(
new File(
"series.xml" ));
Element root = document.getRootElement();
Element objs = root.element(
"Objects" );
三、redis
<!-- redis配置 -->
<
bean
id=
"jedisConnectionFactory"
class=
"org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
>
<!-- <property name="hostName" value="183.136.202.147"></property> -->
<
property
name=
"hostName"
value =
"127.0.0.1"
></
property
>
<
property
name=
"port"
value =
"6379"
></
property
>
</
bean
>
<!-- redis template -->
<
bean
id=
"redisTemplate"
class =
"org.springframework.data.redis.core.RedisTemplate"
>
<
property
name=
"connectionFactory"
ref =
"jedisConnectionFactory"
></
property
>
</
bean
>
@Component
public
class CacheRedisAction {
@Resource(name=
"redisTemplate" )//与配置的名字一样
private RedisTemplate<String,String>
redisTemplate ;
@Resource(name=
"redisTemplate" )
private RedisTemplate<String,Object>
redisCommonTemplate ;
四、webservice客户端
1,创建服务
String ns =
"iptv" ;//ns
try {
URL url=
new URL(
"http://127.0.0.1:8080/cibnManager/CSPRequest1?wsdl" );//wsdl
// URL url=new URL("http://183.136.202.147:83/cibnInterface/mange?wsdl");
QName qname=
new QName(ns,
"CSPRequestService" );
//CSPResponseService修改
Service service=Service.
create(url,qname);//创建服务
// 2,创建 Dispicathc
Dispatch<SOAPMessage> dispatch=service.createDispatch(
new QName(
"iptv" ,
"ctms" ),
// ctms binding name
SOAPMessage.
class , Service.Mode.
MESSAGE );
// 3,创建消息
SOAPMessage message=MessageFactory.
newInstance().createMessage();
SOAPBody body =message.getSOAPPart().getEnvelope().getBody();
SOAPElement ele=body.addChildElement(
new QName(
"iptv" ,
"ExecCmd" ,
"nn" ));
//iptv:ns ExecCmd对应的方法
ele.addChildElement(
"CSPID" ).setValue(
"CIBN_CIS");//设置对应参数的值
ele.addChildElement(
"LSPID" ).setValue(
"CIBN_JH");
ele.addChildElement(
"CorrelateID" ).setValue(
"20150528111");
ele.addChildElement(
"CmdFileURL" ).setValue(
"http://114.247.94.21:80/hy/2015/05/26/9107_20150526123855.xml" );
message.writeTo(System.
out );
SOAPMessage response=dispatch.invoke(message);//发送消息
NodeList nodeList=response.getSOAPBody().getChildNodes();
Node node=nodeList.item(0);
五、解析json数据
JSONObject json = JSONObject.
fromObject(sJson);//把字符串转换成json对象
JSONObject jsonkk = json.getJSONObject(
"kanke" );//json对象中获取json对象
JSONArray array = jsonkk.getJSONArray(
"list" );//获取json数组
for (
int i = 0; i < array.size(); i++) {
JSONObject jsonfinal = array.getJSONObject(i);
String id = jsonfinal.getString(
"id" );//获取字符串
map.put(id, id);
}
六、多线程
1定义:
public
class CibnThread
implements Runnable{
String
CSPID;
String
LSPID;
String
CorrelateID;
String
CmdFileURL;
AnalyzeXMLService
analyzeXMLService ;
public
CibnThread (String CSPID, String LSPID, String CorrelateID,
String CmdFileURL,AnalyzeXMLService analyzeXMLService){
this .
CSPID =CSPID;
this .
LSPID = LSPID;
this .
CorrelateID = CorrelateID ;
this .
CmdFileURL = CmdFileURL;
this .
analyzeXMLService = analyzeXMLService;
}
@Override
public
void run() {
System.
out .println(
CSPID );
System.
out .println(
LSPID );
System.
out .println(
CorrelateID );
System.
out .println(
CmdFileURL );
String
result=
analyzeXMLService.analyzeCibnInfo(
CSPID,
LSPID ,
CorrelateID ,
CmdFileURL );
}
}
2.使用
Thread t=
new Thread(
new
CibnThread(CSPID,LSPID,CorrelateID,CmdFileURL,
analyzeXMLService ));
t.start();
cacheRedisAction .putRedis(CorrelateID, CorrelateID);