第一步,
由于用了SPRING,所以最先看了這篇文章:Writing a service with Spring
服務是建成功了,PERL和JAVA是可以正常通信了,詳見上篇文章
可是CXF自己的CLIENT生成代碼卻訪問“自定義結構數組”的函數不成功:
public List<DeviceValue> sendAlarmArr (List<DeviceValue> arr);
第二步,
左試右試不成功,甚至去試了Axis2,但那個生成的WSDL把上面的結構變成AnyType,估計不對。
又回來,看了Aegis綁定,我還找到將它用到SPRING里的方法:






































其實,跟前一種JAX-WS的方式轉換非常簡單,把其中的注釋去掉就是Aegis綁定,注釋掉就是JAX-WS。
客戶端沒有在SPRING里試成功,但寫代碼也相當簡單,Aegis真好:








這次,到是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信息也會出錯。
不知如何解,先記在此,以后回過頭來再研究了。