webservice使用总结

使用到的技术及其相关框架总结:
     本次项目是给国广东方提供接口的项目,主要实现的功能,根据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 >  cxfrt- frontendjaxws </  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(  CSPIDLSPID ,  CorrelateID ,  CmdFileURL );
        
    }
}
2.使用
        Thread t=  new Thread(  new  CibnThread(CSPID,LSPID,CorrelateID,CmdFileURL,  analyzeXMLService ));
        t.start();
         cacheRedisAction .putRedis(CorrelateID, CorrelateID);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值