2011-03-28 46 views
3

對於Grails來說相當新穎,我想知道人們在Grails項目中使用什麼來使用web服務。那麼系統的客戶端呢?任何建議?我看到有人使用GroovyWS,Spring-WS等。什麼是一個好的和易於使用的?Grails並使用SOAP webservice

+2

我實際上創建了我自己的項目(https://github.com/jwagenleitner/groovy-wslite)並將其與Grails一起使用。我想要更多地控制整個消息(與GroovyWS的wsdl解析和代理相反)。不想把這看作是一個實際的答案,以避免看起來像我自己的項目無恥的插件,並且對於一個項目來說太年輕,以至於說它很好用並且易於使用。 :)但想提到作爲替代。 – 2011-03-28 17:06:06

回答

1

在這裏使用Grails CXF插件。需要:

  1. classloader解決方法 - DynamicClientFactoryit更改了當前的類加載器;
  2. 以及手動編寫WS調用。

除此之外,消費者代碼很渺茫。

編輯:對不起,沒有了那麼這一點,我不知道,我沒有違反和NDA尚未:

#1:

def arrayOfLong = objectFactory.createArrayOfLong(XXX, ids) 
result = client.invoke(methodName, arrayOfLong as Object[]) 

#2:

def dcf = DynamicClientFactory.newInstance() 
def classLoader = Thread.currentThread().getContextClassLoader() 

// create a WS client 
// and assign end point address to it 
def client = dcf.createClient(WSDL_URL, classLoader) 
client.conduit.target.address.setValue(endpointUrl) 

// reacquire classloader because 'createClient' changes it 
def changedClassLoader = Thread.currentThread().getContextClassLoader() 
def objectFactory = changedClassLoader. 
    loadClass(FACTORY_CLASS_NAME).newInstance() 
+0

我的印象是,cxf用於提供web服務而不是消費。爲什麼需要類加載器解決方法?你能舉一個關於你如何編碼WS調用的小例子嗎?非常感謝! – Marco 2011-03-28 08:50:55

+0

好吧,我們都提供和消費,並試圖保持一個依賴。 – 2011-03-28 09:22:28

+0

我正在嘗試Groovy WS和CXF方法,我使用wsdl2java生成我的客戶端,將生成的代碼放在java文件夾中,現在我磕磕絆絆的是我不知道需要將哪些JAR文件複製到我的lib文件夾中讓事情成功編譯。 – Marco 2011-04-15 13:01:41

4

GroovyWS非常容易使用,並有很好的文檔我肯定會推薦它。

+0

IS Groovy WS與CXF處於同一級別嗎?這似乎很容易! – Marco 2011-04-15 12:59:59

1

使用Grails 1.3.7我正在使用我自己的網絡服務WS-Client Grails plugin。它實際上基於GroovyWS,而GroovyWS又使用CXF。至少在我的簡單場景中使用起來非常簡單,我只從後端Web服務獲取Strings。但我不知道它如何處理複雜的數據類型。

我以前從未使用過或創建過webservice,但在前端使用該插件,後端使用該插件,並在兩天內在我的grails應用程序之間進行了SOAP討論。你並不需要直接用非常好的ws-client插件來使用CXF或GroovyWS。速度(發展)和簡單。

+0

你遇到了與jaxb等依賴管理問題嗎? – dbrin 2013-02-06 01:02:05

+0

當時,沒有。但從那時起我就沒有在這個項目上工作過,所以我不能說真的。據我所知,這個項目的使用實際上從未投入生產,因爲有時會發生:) – Nenotlep 2013-02-06 07:13:36