Grails 和使用 SOAP Web 服务

发布于 2024-10-27 03:27:42 字数 112 浏览 4 评论 0原文

作为 Grails 的新手,我想知道人们在 Grails 项目中使用什么来使用 Web 服务。那么系统的客户端呢?有什么建议吗?我看到人们使用 GroovyWS、Spring-WS 等。什么是好的且易于使用的?

Being fairly new to Grails i was wondering what people use to consume a webservice in Grails projects. So the client side of the system? Any recommendations? I see people using GroovyWS, Spring-WS etc.. What is a good and easy on to use?

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

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

发布评论

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

评论(3

旧竹 2024-11-03 03:27:42

GroovyWS 非常容易使用,并且有很棒的文档,我绝对会推荐它。

GroovyWS is very easy to use and has great documentation I would definitely recommend it.

花之痕靓丽 2024-11-03 03:27:42

此处使用 Grails CXF 插件。需要:

  1. 类加载器解决方法 - DynamicClientFactoryit 更改了当前的类加载器;
  2. 并手动编写 WS 调用代码。

除此之外,消费者代码相当精简。

编辑:抱歉,仅此而已,我不确定我是否违反了保密协议:

#1:

def arrayOfLong = objectFactory.createArrayOfLong(XXX, ids)
result = client.invoke(methodName, arrayOfLong as Object[])

#2:

def dcf = DynamicClientFactory.newInstance()
def classLoader = Thread.currentThread().getContextClassLoader()

// create a WS client
// and assign end point address to it
def client = dcf.createClient(WSDL_URL, classLoader)
client.conduit.target.address.setValue(endpointUrl)

// reacquire classloader because 'createClient' changes it
def changedClassLoader = Thread.currentThread().getContextClassLoader()
def objectFactory = changedClassLoader.
    loadClass(FACTORY_CLASS_NAME).newInstance()

Using Grails CXF plugin here. Needed:

  1. classloader workaround - DynamicClientFactoryit changed a current classloader;
  2. and to code WS invocations by hand.

Besides that, the consumer code is pretty slim.

Edit: sorry, no more then this, and I'm not sure I'm not breaking and NDA yet:

#1:

def arrayOfLong = objectFactory.createArrayOfLong(XXX, ids)
result = client.invoke(methodName, arrayOfLong as Object[])

#2:

def dcf = DynamicClientFactory.newInstance()
def classLoader = Thread.currentThread().getContextClassLoader()

// create a WS client
// and assign end point address to it
def client = dcf.createClient(WSDL_URL, classLoader)
client.conduit.target.address.setValue(endpointUrl)

// reacquire classloader because 'createClient' changes it
def changedClassLoader = Thread.currentThread().getContextClassLoader()
def objectFactory = changedClassLoader.
    loadClass(FACTORY_CLASS_NAME).newInstance()
淡写薰衣草的香 2024-11-03 03:27:42

使用 Grails 1.3.7,我通过 WS-Client Grails 插件 使用我自己的 Web 服务。它实际上基于 GroovyWS,而 GroovyWS 又使用 CXF。它非常容易使用,至少在我的简单场景中,我只从后端 Web 服务获取字符串。但我还不知道它如何处理复杂的数据类型。

我之前从未使用或创建过 Web 服务,但在前端使用该插件和 Grails CXF 插件在后端,我在两天内得到了我的 grails 应用程序之间的 SOAP 讨论。您实际上并不需要直接将 CXF 或 GroovyWS 与非常好的 ws-client 插件一起使用。 (开发)速度和简单性。

Using Grails 1.3.7 I am consuming my own web service with WS-Client Grails plugin. It is actually based on GroovyWS, which in turn uses CXF. It is very easy to use at least in my simple scenario, where I only get Strings from the backend web service. I have no idea how it works with complex data types yet though.

I had never consumed or created a webservice before but using that plugin in the frontend and the Grails CXF plugin in the backend I got a SOAP discussion between my grails apps in two days. You don't really need to use CXF or GroovyWS directly with the very nice ws-client plugin. Speed (of development) and simplicity.

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