Groovy& Jax-ws:忽略@WebMethod注释

时间:2009-11-20 16:03:35

标签: groovy jax-ws web-services

我最近发现了一个使用groovy和jax-ws实现We3bService的示例: 问题是@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,但它有多个绑定到body的参数。这是无效的。请使用注释注释方法:@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)     在wstest.run(wstest.groovy:21)

3 个答案:

答案 0 :(得分:0)

请参阅此问题:wsimport how to create web service client from WSDL for http:binding GET/POST 是同样的问题。在您的情况下,您在BookService类中有方法 setProperty ,并且根据错误,它有多个参数。确保在服务实现中确实需要此方法,如果是这样,请将此方法标记为私有(如果您在服务操作中使用此方法)

答案 1 :(得分:0)

根据JAX-WS(JSR-224)规范,如果在类型级别@SoapBinding使用,则注释指定类中所有方法的WSDL映射样式。这包括Groovy添加的那些。将@SoapBinding移至方法级别可以解决问题。

答案 2 :(得分:0)

它不会忽略您的@WebMethod。如果是这样,你就不会看到任何关于'Bared'和'Wrapped'的消息。

尝试使用def更改void返回类型。