隨筆-124  評論-194  文章-0  trackbacks-0
          上一篇文章中的問題,今天又再試了下,居然解決了,看來把遇到問題放一放是有好處的。

          第一,是要用對CXF的庫,在一行代碼未變的情況下,只要使用最新的庫。看來在最新庫里解決了數(shù)組問題:
          2.1-incubator-SNAPSHOT
          就沒問題,如果是用:
          2.0-incubator
          就會出現(xiàn)上篇文章的情況。我使用MAVEN2,就寫成:
                <!--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>


          第二,對SOAP::Lite的改變,SOAP::Lite不支持doc/literal,但通過閱讀
          "NET-based Web Service Using the SOAP::Lite Perl Library".
          我的上篇文章有鏈接,我寫的PERL程序在某些情況下依然不行。
          這次再加了兩處改動后就可以了:(注意: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)非常重要。另外一處改動是,程序中的根變量名改成"arg0",即與WSDL中定義一致。
          實驗發(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 我愛佳娃 閱讀(1442) 評論(1)  編輯  收藏 所屬分類: Perlweb技術(shù)

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

          http://cwiki.apache.org/CXF/download.html  回復(fù)  更多評論
            
          主站蜘蛛池模板: 定日县| 阳江市| 镇原县| 长垣县| 周宁县| 陇川县| 泽州县| 元朗区| 吉林市| 汉寿县| 江津市| 楚雄市| 麻阳| 大厂| 泽普县| 绥棱县| 卓资县| 永年县| 武安市| 金沙县| 清新县| 甘南县| 深州市| 青海省| 沙洋县| 武邑县| 延津县| 江城| 海伦市| 陆河县| 汉中市| 沭阳县| 康定县| 镇原县| 江源县| 通榆县| 随州市| 桐柏县| 新泰市| 柳江县| 义马市|