在 Grails 中使用 Web 服务的最佳方式是什么?

发布于 2024-12-22 04:47:38 字数 118 浏览 0 评论 0原文

我知道有一些 Grails 的 Web 服务插件,其中一些看起来没有维护。我有一个 jar,其中包含从 wsdl 生成的所有存根,现在我需要开始集成。哪个插件最适合这个?此外,Web 服务使用 SOAP,而不是 REST。

I know there are a few web service plug-ins for Grails, some of them look like they aren't maintained. I have a jar with all the stubs generated from a wsdl and now I need to start integrating. Which plugin would serve best for this? Also, the web service uses SOAP, not REST.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

假装不在乎 2024-12-29 04:47:38

我知道您的问题是关于消费插件,但我从未使用过 Grails-WS 插件,所以我无法在那里发表评论。相反,如果您的存根与 JAXB 编组兼容,您可以使用 Spring Web Services 项目。您只需在 BuildConfig.groovy 中添加依赖项即可导入适当的 jar。

http://static.springsource.org/spring-ws /sites/2.0/reference/html/client.html

因此,您只需定义一些 JAXB marshaller/unmarshaller beans 和 Web 服务处理程序。如果您指定自己的连接处理程序或拦截器,您可以从上面的文档中获得所需的详细信息,并定义超时和安全性。

myJaxb2Marshaller(org.springframework.oxm.jaxb.Jaxb2Marshaller) {
    classesToBeBound = ['my.class.Class1','my.class.Class2']
}

myWebServiceMessageFactory(org.springframework.ws.soap.saaj.SaajSoapMessageFactory)

myWebServiceTemplate(org.springframework.ws.client.core.WebServiceTemplate, ref('myWebServiceMessageFactory')) {
    marshaller = ref('myJaxb2Marshaller')
    unmarshaller = ref('myJaxb2Marshaller')
}

此时,您可以使用 Grail 的依赖注入在 Grails 代码中使用 WebServiceTemplate

class myService {
    def myWebServiceTemplate

    void myMethod {
        ...
        Class1 myRequestObject = new Class1(data:myData)
        Class2 myResponseObject = myWebServiceTemplate.marshalSendAndReceive(mySoapEndpoint, myRequestObject)
        ...
    }
}

I know your question asked about a plugin for consuming, but I've never used one of the Grails-WS plugins, so I can't comment there. Instead, if your stubs are compatible with JAXB marshalling you can use the Spring Web Services project. You'll just have to add a dependency in BuildConfig.groovy to import the appropriate jars.

http://static.springsource.org/spring-ws/sites/2.0/reference/html/client.html

So you just define some JAXB marshaller/unmarshaller beans and web service handlers. You can get as detailed as you want with this from the documentation above and define timeouts and security if you specify your own connection handler or interceptors.

myJaxb2Marshaller(org.springframework.oxm.jaxb.Jaxb2Marshaller) {
    classesToBeBound = ['my.class.Class1','my.class.Class2']
}

myWebServiceMessageFactory(org.springframework.ws.soap.saaj.SaajSoapMessageFactory)

myWebServiceTemplate(org.springframework.ws.client.core.WebServiceTemplate, ref('myWebServiceMessageFactory')) {
    marshaller = ref('myJaxb2Marshaller')
    unmarshaller = ref('myJaxb2Marshaller')
}

At that point you can use Grail's dependency injection to use the WebServiceTemplate in your Grails code:

class myService {
    def myWebServiceTemplate

    void myMethod {
        ...
        Class1 myRequestObject = new Class1(data:myData)
        Class2 myResponseObject = myWebServiceTemplate.marshalSendAndReceive(mySoapEndpoint, myRequestObject)
        ...
    }
}
衣神在巴黎 2024-12-29 04:47:38

我推荐使用Spring的方式。
毕竟您是在 grails 中开发的,所以也许您不需要插件。
阅读有关 远程处理和 Web 服务,第 19.5.2 章“使用 JAX-RPC 访问 Web 服务”。

不需要任何罐子存根。 Spring 将为你生成一切...

PS:我假设你知道如何在 grails 中声明 spring beans...

I would recommend using Spring's way.
You're developing in grails after all, so maybie you don't need a plugin.
Read Spring docs on Remoting and webservices, chapter 19.5.2 "Accessing web services using JAX-RPC".

No need for any of your jar's stubs. Spring will generate everything for you...

P.S. : I assume you know how to declare spring beans in grails...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文