Groovy:如何使用 ws-client 更改端点?

发布于 2024-11-26 12:48:44 字数 349 浏览 1 评论 0原文

我在 Grails 项目中使用 ws-client 来调用 Web 服务。

没关系,但它正在从 WSDL 读取端点。

如何在运行时更改端点?

def proxy = new WSClient(wsdlURL, Thread.currentThread().getContextClassLoader());
proxy.setEndpoint(''); // this doesn't exists, ERROR!

谢谢!

注意:我需要使用 BindingProvider.ENDPOINT_ADDRESS_PROPERTY 来解决此问题吗?

I'm using ws-client in a Grails Project to call an web service.

It's ok, but it's reading endpoint from WSDL.

How to change endpoint in runtime?

def proxy = new WSClient(wsdlURL, Thread.currentThread().getContextClassLoader());
proxy.setEndpoint(''); // this doesn't exists, ERROR!

Thanks!

Note: Need I use BindingProvider.ENDPOINT_ADDRESS_PROPERTY to solve this?

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

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

发布评论

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

评论(2

美人如玉 2024-12-03 12:48:44

您可以通过执行以下代码来更改端点地址:

// getter method for the wrapped client class
WSClient.metaClass.getCxfClient = { ->
    delegate.client
}
// init ws client
proxy = new WSClient(wsdlURL, this.class.classLoader)
proxy.initialize()
// get client instance
def cxfClient = proxy.cxfClient
// create new endpoint url
URL newUrl = new URL("http://edu-02:8080/educenter/services/sync")
// assign new created url to the client
cxfClient.getConduit().getTarget().getAddress().setValue(newUrl.toExternalForm());

you can change the endpoint address by performing following code:

// getter method for the wrapped client class
WSClient.metaClass.getCxfClient = { ->
    delegate.client
}
// init ws client
proxy = new WSClient(wsdlURL, this.class.classLoader)
proxy.initialize()
// get client instance
def cxfClient = proxy.cxfClient
// create new endpoint url
URL newUrl = new URL("http://edu-02:8080/educenter/services/sync")
// assign new created url to the client
cxfClient.getConduit().getTarget().getAddress().setValue(newUrl.toExternalForm());
笑梦风尘 2024-12-03 12:48:44

使用 hitty5 答案,一个方法封装的答案。

// class with proxy attribute instanciated
def setEndpoint(String endpoint){
    String url = new URL(endpoint).toExternalForm()
    this.proxy.client.conduit.target.address.setValue(url)
}

额外:要设置超时,请使用:

proxy.client.conduit.clientSidePolicy.setReceiveTimeout(999)
proxy.client.conduit.clientSidePolicy.setConnectionTimeout(999)

Using hitty5 answer, an method-encapsulated answer.

// class with proxy attribute instanciated
def setEndpoint(String endpoint){
    String url = new URL(endpoint).toExternalForm()
    this.proxy.client.conduit.target.address.setValue(url)
}

Extra: to set timeout, use:

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