惱人的 WSDL / SOAP Style

WSDL (Web Services Description Language) 在 WIKI 是這麼寫的:

WSDL描述Web服務的公共介面。這是一個基於XML的關於如何與Web服務通訊和使用的服務描述;也就是描述與目錄中列出的Web服務進行交互時需要綁定的協議和信息格式。通常採用抽象語言描述該服務支持的操作和信息,使用的時候再將實際的網路協議和信息格式綁定給該服務。
描述的很簡單,林北也以為很簡單,反正就不過是描述 SOAP 的格式,然後又有工具可以產生,隨便弄弄知道它是再做啥就好。弄下去才知道我錯了,基本上這根本不是給人看的東西,然後光標準就有五種類型,每個系統負責人都不知道自己產生的是哪一種 WSDL (大家都想說產出 WSDL 就沒自己的事情了),我這做 SOA 的光接這些不知名的 WSDL 就搞到快翻掉,踩雷踩太多次了,故整理起來自己以後好 google 恢復記憶。

使用方法很簡單,直接看圖顏色有高亮的地方來區別每個類型的不同處,至於優缺點可以直接參考下面的文章連結(英文)。扣掉 Document/Encoded 沒人用以外,剩下四種類型的 WSDL 和對應的 SOAP 格式請參考下圖(點圖可到 flickr 去下載原檔 960*720):

WSDL (紅字代表差異部分)
WSDL Style

SOAP (藍字代表 Operation 相關差異,紅字代表 Type Encoded 相關差異)
SOAP Style
參考:

JMS - 如何使用 Queue




說明

利用 JBoss 7 上的 JMS (透過 HornetQ 實作),寫了兩個簡單的程式測試 Queue 的操作。
  • QueueSenderExample - 等待 Queue 裡頭的訊息。
  • QueueConsumerExample - 把訊息丟到 Queue。

程式碼放在 github ,有需要可以參考。


使用方式

  1. JBoss 7 做好 JMS 相關設定後啟動。
  2. 執行 QueueConsumerExample 等待 Queue 裡頭的訊息。
  3. 執行 QueueSenderExample 把訊息丟到 Queue。
  4. Console 上會看到 Consumer 收到 Sender 丟的訊息並印出。


參考



惱人的 CreateProcess error=206


問題

執行 JUnit 時會吐出以下類似錯誤訊息:
Exception occurred executing command line.Cannot run program "C:\Program Files\Java\jre6\bin\javaw.exe" (in directory "D:\src\expweb\expweb\trunk"): CreateProcess error=206, The filename or extension is too long


解法

Someone has written the SOP, you can fix this bug on your own.

https://bugs.eclipse.org/bugs/show_bug.cgi?id=327193#c69
有人幫忙修改好相關的程式碼轉成 class 檔,下載後按下面步驟做即可:
  1. 備份 ${elipse_home}/plugins/org.eclipse.jdt.launching_3.4.*.jar。
  2. 關掉 Eclipse。
  3. 把 ${elipse_home}/plugins/org.eclipse.jdt.launching_3.4.*.jar 改成 .zip。
  4. 把下載的四個 class 檔案放入 zip 檔中的 org\eclipse\jdt\internal\launching (覆蓋原有的 class 檔)。
  5. 把 zip 檔 META-INF 資料夾下除了 MANIFEST.MF 都刪除。
  6. 修改 MANIFEST.MF 把 "NAME:" 開頭的項目都刪除,確認有留兩列空白列。
  7. 把 .zip 改回 .jar。
  8. 重啟 Eclipse 即可。


下載 Download Here!!

If you are using Eclipse 4.2 Juno and org.eclipse.jdt.launching_3.6.100.v20120523-1953.jar, you can download the new jar file here! Enjoy it!

如果你剛好跟我一樣
  • 都是用 Eclipse 4.2 Juno
  • jar 檔名也是 org.eclipse.jdt.launching_3.6.100.v20120523-1953.jar
我已經修改包好,你可以到 GoogleDrive 下載。


官方討論

https://bugs.eclipse.org/bugs/show_bug.cgi?id=327193
看來是因為引用到的外部函示庫、其他專案太多,造成 Eclipse 呼叫 Java 執行 JUnit 時的 ClassPath 太長就爆炸了。

在 Windows 下的 Eclipse 都有可能發生此問題,然後官方只會在 Eclipse 4.3 之後才會修復(官方認為大多數人都不會發生這問題,但也不是每個人都只是寫寫 Hello World 啊 囧rz)。

SwitchYard - Web Service Proxy


SwitchYard 為 JBoss 下一代 ESB (Enterprise Service Bus) Framework,小弟沒玩過 JBoss ESB 所以就不多做比較了,至於 SwitchYard 的簡單介紹,等之後有時間或是有人問再考慮整理最近把玩的心得。

這裡實作一個簡單的範例,利用 SwitchYard 來橋接其他外部的 Web Service,實際上的用途可以用來橋接企業內部的所有系統服務 (ex: ERP、簽呈、產線相關...),全部接上 SwitchYard 這個 ESB 後,後續的企業程式開發,就可以只針對 SwitchYard 統整好的服務來引用。這樣的好處為可以減少應用程式與系統之間的耦合。


PS 1:投影片並非最終版本,還在細部修改中。
PS 2:Source Code on GitHub