隨筆-124  評(píng)論-194  文章-0  trackbacks-0
          上一篇文章中的問(wèn)題,今天又再試了下,居然解決了,看來(lái)把遇到問(wèn)題放一放是有好處的。

          第一,是要用對(duì)CXF的庫(kù),在一行代碼未變的情況下,只要使用最新的庫(kù)。看來(lái)在最新庫(kù)里解決了數(shù)組問(wèn)題:
          2.1-incubator-SNAPSHOT
          就沒(méi)問(wèn)題,如果是用:
          2.0-incubator
          就會(huì)出現(xiàn)上篇文章的情況。我使用MAVEN2,就寫(xiě)成:
                <!--for cxf-->
              
          <dependency>
                  
          <groupId>org.apache.cxf</groupId>
                  
          <artifactId>cxf-rt-frontend-jaxws</artifactId>
                  
          <version>2.1-incubator-SNAPSHOT</version>
                  
          <!-- version>2.0-incubator</version-->
              
          </dependency>
              
          <dependency>
                  
          <groupId>org.apache.cxf</groupId>
                  
          <artifactId>cxf-rt-transports-http</artifactId>
                  
          <version>2.1-incubator-SNAPSHOT</version>
              
          </dependency>
              
          <dependency>
                  
          <groupId>org.apache.cxf</groupId>
                  
          <artifactId>cxf-rt-databinding-aegis</artifactId>
                  
          <version>2.1-incubator-SNAPSHOT</version>
              
          </dependency>


          第二,對(duì)SOAP::Lite的改變,SOAP::Lite不支持doc/literal,但通過(guò)閱讀
          "NET-based Web Service Using the SOAP::Lite Perl Library".
          我的上篇文章有鏈接,我寫(xiě)的PERL程序在某些情況下依然不行。
          這次再加了兩處改動(dòng)后就可以了:(注意:CXF里不要使用aegisDatabinding,用默認(rèn)的即可)
          my $soap = SOAP::Lite
                 
          -> uri('http://magic.nms.exchangebit.com/')
                 
          -> on_action( subjoin '/', 'http://www.alfredbr.com', $_[1] })
                 
          -> proxy('http://127.0.0.1:8080/ebnms/NotifyService')
                     
          ->autotype(0);


          其中的autotype(0)非常重要。另外一處改動(dòng)是,程序中的根變量名改成"arg0",即與WSDL中定義一致。
          實(shí)驗(yàn)發(fā)現(xiàn),帶不帶attr中的xmlns都可以。完整代碼如下:
           use SOAP::Lite ( +trace => all, maptype => {} );

          my $soap = SOAP::Lite
                 
          -> uri('http://magic.nms.exchangebit.com/')
                 
          -> on_action( subjoin '/', 'http://www.alfredbr.com', $_[1] })
                 
          -> proxy('http://127.0.0.1:8080/ebnms/NotifyService')
                     
          ->autotype(0);

          #$soap->sendAlarmString ("good");

          #$soap->sendAlarm (SOAP::Data->name(arg0=>{devName=>"hehe", devIp=>"ip1"}));


          {
          # call send alarm
              my @params = (
              
          #   $header,
                 SOAP::Data->name(arg0 => goodhehe) 
              );
              
              
          my $method = SOAP::Data->name('ns1:sendAlarmString')
                 
          ->attr({"xmlns:ns1" => 'http://magic.nms.exchangebit.com/'});
              
              
          my $result = $soap->call($method => @params);
              
              
          print "\nsend string alarm result:\n";
              
          if ($result->fault)
              {
                 
          print $result->faultstring;
              }
              
          else
              {
                 
          print $result->result;
              }
              
          print "\nn";
          }

          {
          # call send dev alarm
              my @params = (SOAP::Data->name(arg0=>{devName=>"hehe", devIp=>"ip1"}));
              
              
          my $method = SOAP::Data->name('sendAlarm');
          #       ->attr({"xmlns:ns1" => 'http://magic.nms.exchangebit.com/'});
              
              
          my $result = $soap->call($method => @params);
              
              
          print "\nsend string alarm result:\n";
              
          if ($result->fault)
              {
                 
          print $result->faultstring;
              }
              
          else
              {
                 
          print $result->result;
              }
              
          print "\n\n";
          }

          {
          # call send arr alarm
              my @params = (
                 SOAP
          ::Data->name(arg0 => [
                 {devName
          =>"hehe1", devIp=>"ip1"}, 
                 {devName
          =>"hehe1", devIp=>"ip1"}, 
                 {devName
          =>"hehe1", devIp=>"ip1"}, 
                 {devName
          =>"hehe1", devIp=>"ip1"}, 
                 {devName
          =>"hehe1", devIp=>"ip1"}, 
                 {devName
          =>"hehe1", devIp=>"ip1"}, 
                 {devName
          =>"hehe1", devIp=>"ip1"}, 
                 {devName
          =>"hehe1", devIp=>"ip1"}, 
                 {devName
          =>"hehe1", devIp=>"ip1"}, 
                 {devName
          =>"hehe1", devIp=>"ip1"}, 
                 {devName
          =>"hehe2", devIp=>"ip2"}])
              );
              
              
          my $method = SOAP::Data->name('sendAlarmArr');
              
              
          my $result = $soap->call($method => @params);
              
              
          print "\nsend string alarm result:\n";
              
          if ($result->fault)
              {
                 
          print $result->faultstring;
              }
              
          else
              {
                 
          my @a = @{$result->result->{item}};
                 
          foreach $i (@a) {
                         
          print "ele: $i->{devName}, $i->{devIp}\n";
                 }
              }
              
          print "\n\n";
          }
          posted on 2007-08-23 14:13 我愛(ài)佳娃 閱讀(1442) 評(píng)論(1)  編輯  收藏 所屬分類(lèi): Perlweb技術(shù)

          評(píng)論:
          # re: CXF:咋總差一點(diǎn)呢? (續(xù):已解決) 2007-09-04 11:05 | willem
          CXF2.0.1 修復(fù)很多 CXF 2.0 的bug,在過(guò)一兩個(gè)禮拜 CXF2.0.2就要Release了。到時(shí)你可以下下來(lái)試一下。

          http://cwiki.apache.org/CXF/download.html  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 甘肃省| 新丰县| 四子王旗| 沧州市| 景德镇市| 梅河口市| 永顺县| 祁连县| 仙游县| 成安县| 上思县| 阳东县| 色达县| 潞西市| 扎囊县| 平果县| 安徽省| 康平县| 辉南县| 吉木乃县| 江华| 理塘县| 绩溪县| SHOW| 邻水| 南丹县| 包头市| 潼南县| 额济纳旗| 清远市| 顺义区| 曲阜市| 阿鲁科尔沁旗| 安新县| 涡阳县| 安远县| 大英县| 靖远县| 江都市| 平阴县| 象山县|