2009-11-20 5 views
0

J'ai récemment trouvé un exemple sur l'implémentation d'un We3bService avec groovy et jax-ws: le problème est que l'annotation @webmethod semble être ignorée.Groovy & Jax-ws: Annotation @WebMethod ignorée

C'est le code source du script 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()) 

et c'est l'exception pris: Pris: com.sun.xml.internal.ws.model.RuntimeModelerException: Erreur d'exécution de modeleur: SEI BookService a la méthode setProperty annoté comme BARE mais il a plus d'un paramètre lié au corps. Ceci est invalide. S'il vous plaît annoter la méthode avec l'annotation: @SOAPBinding (ParameterStyle = SOAPBinding.ParameterStyle.WRAPPED) à wstest.run (wstest.groovy: 21)

+0

Je sais que c'était il y a longtemps, mais avez-vous réellement résolu ce problème, je reçois la même erreur, mais je ne sais pas quoi faire à ce sujet? – ssayyed

Répondre

0

Il ne l'ignore pas votre @WebMethod. Si c'est le cas, vous ne verrez aucun message sur 'Bared' et 'Wrapped'. Essayez de changer le type de retour def avec void.

+0

Si une classe est simplement annotée avec @WebService et avec une annotation non @WebMethod, je pense que jax-ws essaie d'exposer toutes les méthodes de la classe. Si l'annotation @WebMethod est présente, jax-ws tente d'exposer uniquement les méthodes annotées. Si je suis correct, l'exception levée est référée à la méthode "setProperty", qui fait partie de l'implémentation de l'objet groovy. – pbanfi

0

Selon la spécification JAX-WS (JSR-224), si utilisé au niveau de type @SoapBinding, l'annotation spécifie le style de mappage WSDL pour toutes les méthodes de la classe. Cela inclut de ceux que Groovy ajoute. Déplacer @SoapBinding au niveau de la méthode devrait résoudre le problème.