2009-11-20 51 views
0

我最近發現了一個使用groovy和jax-ws實現We3bService的例子: 問題在於@webmethod註釋似乎被忽略。Groovy&Jax-ws:忽略@WebMethod註釋

這是Groovy腳本的源代碼:

import javax.jws.soap.* 
import javax.jws.* 
import javax.xml.ws.* 
import javax.xml.bind.annotation.* 

@XmlAccessorType(XmlAccessType.FIELD) 
class Book { 
    String name 
    String author 
} 
@WebService (targetNamespace="http://predic8.com/groovy-jax/") 
@SOAPBinding(parameterStyle=SOAPBinding.ParameterStyle.BARE) 
class BookService{ 

    @WebMethod 
    def add(Book book){ 
     println "Name of the book: ${book.name}" 
    } 
} 

Endpoint.publish("http://localhost:9000/book", new BookService()) 

,這是抓住了異常: 抓到:com.sun.xml.internal.ws.model.RuntimeModelerException: 運行建模錯誤: SEI bookService的具有方法的setProperty註釋爲BARE但它有一個結合於本體多於一個的參數。這是無效的。請註解註釋的方法:@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.WRAPPED) 在wstest.run(wstest.groovy:21)

+0

我知道這是很久以前的事,但你實際上解決了這個問題,我得到了同樣的錯誤,但不知道該怎麼辦呢? – ssayyed 2014-02-13 18:21:50

回答

0

它不會忽略你的@WebMethod。如果是這樣,你就不會看到有關'Bared'和'Wrapped'的消息。

嘗試改變def返回類型與void

+0

如果一個類只是使用@WebService和非@WebMethod註解我認爲,JAX-WS試圖揭露類的所有方法。如果註釋@WebMethod存在,那麼jax-ws會嘗試僅公開已註釋的方法。如果我是正確的拋出被稱爲方法「的setProperty」外,至極我認爲是常規的對象實施的一部分。 – pbanfi 2009-11-20 16:43:45

0

根據JAX-WS(JSR-224)規範,如果在類型級別使用@SoapBinding註釋,則指定類中所有方法的WSDL映射樣式。這包括Groovy補充說的。將@SoapBinding移至方法級別應該可以解決問題。