2012-08-07 23 views
6

GroovyWS是一個內部使用CXF的框架。我想提出一個要求如下:如何在groovy中使用cxf創建地圖?

<param2 xsi:type="ns2:Map"> 
    <item xsi:type="ns2:Map"> 
     <key xsi:type="xsd:string">param1</key> 
     <value xsi:type="xsd:string">param2</value> 
    </item> 
</param2> 

目前,我試圖從一個Grails服務做到這一點如下:

def proxy = new WSClient("http://xyz", this.class.classLoader) 
proxy.initialize() 

proxy.client.invoke("call", new HashMap<String, String>()) 

其中給出

javax.xml.bind.JAXBException 
class java.util.HashMap nor any of its super class is known to this context. 

我甚至嘗試[ :]和東西,但沒有得到它的工作。

+0

我不記得任何細節,但是如果你嘗試用'proxy.client.objectFactory.createMap()'創建map參數會怎麼樣? (最後一個方法的名稱可能會有所不同,它取決於WSDL類型名稱) – 2012-08-11 21:01:04

回答

3

好吧,它已經有一段時間,因爲我做了這樣的事情,但我似乎記得CXF生成的客戶端有一個名爲「創造」的方法,類似於:

def mapObject = proxy.create("ns2.Map"); 

給一個嘗試,看看mapObject是否有你期待的方法或成員。

+0

請注意,我從另一個我的答案得到了這個:http://stackoverflow.com/questions/3317453/groovyws-and-complex-requests/3328305 #3328305 – billjamesdev 2012-08-12 07:55:16

+0

我使用的WSDL沒有'ns2.Map'。我如何將它添加到回覆中? – Chris 2012-08-18 12:12:51

+0

我使用ns2.Map,因爲這是我在上面的XML片段中看到的。從本質上講,可以將名稱空間視爲這種類型的包,並將它們包含在希望代理創建的類的名稱中。 – billjamesdev 2012-08-18 15:30:02

1

這是一個known issue使用JAXB

根本的問題是,你的模式是不明確的。

解決辦法有兩個:

  • 使用的名稱空間給每個服務單獨消除任何含糊
  • 分解爲不同的Java包。
相關問題