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

时间:2011-07-25 18:59:23

标签: grails groovy endpoint ws-client

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

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

如何在运行时更改端点?

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

谢谢!

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

2 个答案:

答案 0 :(得分:1)

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

// 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());

答案 1 :(得分:0)

使用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)