<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-124  評論-194  文章-0  trackbacks-0
    最近想用PERL通過SOAP與JAVA通信,想到了XFIRE,現在叫CXF提供的服務。但總是差一點成功。

    第一步,
    由于用了SPRING,所以最先看了這篇文章:Writing a service with Spring
    服務是建成功了,PERL和JAVA是可以正常通信了,詳見上篇文章
    可是CXF自己的CLIENT生成代碼卻訪問“自定義結構數組”的函數不成功:
     public List<DeviceValue> sendAlarmArr (List<DeviceValue> arr);

    第二步,
    左試右試不成功,甚至去試了Axis2,但那個生成的WSDL把上面的結構變成AnyType,估計不對。
    又回來,看了Aegis綁定,我還找到將它用到SPRING里的方法:
    <beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi
    ="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:jaxws
    ="http://cxf.apache.org/jaxws"
     xsi:schemaLocation
    ="
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
     http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"
    >

     
    <import resource="classpath:META-INF/cxf/cxf.xml" />
     
    <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
     
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />

       
    <bean id="serviceClass" class="com.exchangebit.nms.magic.NotifyServiceImpl"/>
      
        
    <bean id="aegisDatabinding" class="org.apache.cxf.aegis.databinding.AegisDatabinding"/>
              
        
    <bean id="serviceFactory" class="org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean">
            
    <property name="dataBinding" ref="aegisDatabinding"/>
        
    </bean>
        
        
    <bean id="serverBeanFactory" class="org.apache.cxf.frontend.ServerFactoryBean" init-method="create">
            
    <property name="address" value="/NotifyService"/>
            
    <property name="bindingId" value="http://schemas.xmlsoap.org/soap/"/>
            
    <property name="serviceBean" ref="serviceClass"/>
            
    <property name="serviceFactory" ref="serviceFactory"/>
        
    </bean>

        
    <jaxws:endpoint 
          
    id="notifyService" 
          implementor
    ="com.exchangebit.nms.magic.NotifyServiceImpl" 
          address
    ="/NotifyService">
             
    <!--jaxws:serviceFactory>
                <ref bean="serviceFactory"/>
             </jaxws:serviceFactory
    -->
         
    </jaxws:endpoint>
       
    </beans>


    其實,跟前一種JAX-WS的方式轉換非常簡單,把其中的注釋去掉就是Aegis綁定,注釋掉就是JAX-WS。
    客戶端沒有在SPRING里試成功,但寫代碼也相當簡單,Aegis真好:
            getBean ("notifyClient");
            
            ClientProxyFactoryBean factory 
    = new ClientProxyFactoryBean();
            factory.setServiceClass(NotifyService.
    class);
            factory.setAddress(
    "http://127.0.0.1:8080/ebnms/NotifyService");
            factory.getServiceFactory().setDataBinding(
    new AegisDatabinding());
            NotifyService client 
    = (NotifyService) factory.create();
            DoTest (client);


    這次,到是CXF的SERVER和CLIENT都可以正常通信了。但我不說也知道啦,PERL又出問題了!

     

    第三步,
    又進一步搜,才知道Document, Literal, RPC, Encoding對SOAP消息的影響,這篇文章(中文的)相當好!
    大義是RPC/Encoding將方法名稱放入了operation節中,并且消息里含有類型信息,不方便檢驗。
    而Document/Literal通過增加WSDL復雜度,將方法名、參數類型全部放入了types一節,方便了處理。
    而SOAP::Lite只支持RPC/Encoding的方式,但也有辦法讓它形成Doc/Lit的消息:點這里
    但,這種方法只支持JAX-WS的服務,Aegis的PERL就會出錯了。

    所以,不管用哪種要么JAVA的CLIENT和SERVER通信有問題,不然就是把PERL拒之門外。我懷疑是不是CXF的JAX-WS的數組處理有問題,不然Aegis為何不出錯?另外,Aegis對PERL的消息不夠寬容,本已是Doc/Lit格式,只是帶有TYPE信息也會出錯。
    不知如何解,先記在此,以后回過頭來再研究了。
    posted on 2007-08-07 21:39 我愛佳娃 閱讀(2920) 評論(1)  編輯  收藏 所屬分類: Perlweb技術

    評論:
    # re: CXF:咋總差一點呢? 2011-05-10 22:58 | lty
    請問您cxf返回復雜類型怎么做呢?  回復  更多評論
      
    主站蜘蛛池模板: 亚洲第一二三四区| 91精品国产免费久久国语蜜臀| 免费看又爽又黄禁片视频1000| 亚洲最大视频网站| 亚洲精品免费视频| 日本亚洲视频在线| 羞羞视频免费网站在线看| 亚洲国产成人久久综合碰| 日韩色日韩视频亚洲网站| 永久免费av无码网站大全| 亚洲国产乱码最新视频| 嫖丰满老熟妇AAAA片免费看| 亚洲美女aⅴ久久久91| 日韩精品人妻系列无码专区免费| 国产精品国产亚洲精品看不卡| 国产精品免费大片一区二区| 亚洲性久久久影院| 一级毛片a女人刺激视频免费| 亚洲精品动漫人成3d在线| 成人a毛片视频免费看| 一级毛片直播亚洲| 日本免费精品一区二区三区 | 久久免费线看线看| 亚洲熟妇av一区二区三区漫画| a级毛片免费网站| 国产亚洲精品无码拍拍拍色欲| fc2成年免费共享视频网站| 亚洲欧洲日产国码一级毛片 | 日本高清免费不卡在线| 日本亚洲欧美色视频在线播放| 日本免费人成视频播放| 最新亚洲人成无码网站| 亚洲成人一区二区| 国产精品美女免费视频观看| 亚洲精品白浆高清久久久久久| 国产一区二区三区免费观看在线| 亚洲αv在线精品糸列| 污污网站18禁在线永久免费观看| 久久亚洲精品无码VA大香大香| 91短视频免费在线观看| 亚洲免费在线视频观看|