Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Web services Groovy中具有复杂类型的Axis2_Web Services_Ant_Groovy_Axis2_Groovyws - Fatal编程技术网

Web services Groovy中具有复杂类型的Axis2

Web services Groovy中具有复杂类型的Axis2,web-services,ant,groovy,axis2,groovyws,Web Services,Ant,Groovy,Axis2,Groovyws,所以我有几个ANT脚本使用Groovy来处理普通ANT无法完成的复杂计算(至少是afaik)。我试图通过Groovy使用SOAP信封访问Axis2 web服务。请求和响应非常简单,除了两个complexType属性(一个在请求中,一个在响应中) 我遇到的第一件事是Groovy Soap。它非常容易使用,您只需实例化一个SoapClient并调用web服务方法。不幸的是,它无法处理请求中的complexType属性,我需要: 目前的限制: 4:在当前Groovy-1.0版本中使用Groovy S

所以我有几个ANT脚本使用Groovy来处理普通ANT无法完成的复杂计算(至少是afaik)。我试图通过Groovy使用SOAP信封访问Axis2 web服务。请求和响应非常简单,除了两个
complexType
属性(一个在请求中,一个在响应中)

我遇到的第一件事是Groovy Soap。它非常容易使用,您只需实例化一个SoapClient并调用web服务方法。不幸的是,它无法处理请求中的
complexType
属性,我需要:

目前的限制:

4:在当前Groovy-1.0版本中使用Groovy SOAP模块时,无法在客户端处理自定义数据类型

然后我读了很多关于GroovyWS的书。我在我的
user.home中创建了Grape配置文件,javac和$GROOVY\u home都可用(基本上按照上所述完成了所有工作)。当我第一次开始编写脚本时,Grape不知怎么找回了Ivy(我没有使用Grape的经验,但我怀疑它与Maven非常相似)

然后开始我的简单脚本:

@Grab(group='org.codehaus.groovy.modules', module='groovyws',version='0.5.2')
import groovyx.net.ws.WSClient
proxy = new WSClient("http://127.0.0.1/axis2/services/ReleaseService?wsdl", this.class.classLoader)
proxy.initialize()
不幸的是,我甚至无法初始化web客户端(类路径中没有Groovy Soap库):

通过类路径中的Groovy Soap库(它似乎使GroovyWS的一些功能过载),我得到了:

Caught: java.lang.NoSuchMethodError: javax.wsdl.xml.WSDLReader.readWSDL(Ljavax/wsdl/xml/WSDLLocator;Lorg/w3c/dom/Element;)Ljavax/wsdl/Definition; java.lang.NoSuchMethodError:
这看起来与我最初使用Groovy Soap时遇到的错误非常相似

所以我的问题是:如何通过ANT使用
complexType
参数与Axis2 web服务通信。我不仅限于Groovy,而且出于部署原因(~50个VM快照),我想要一些简单的东西。Java客户机可以工作,但是由于部署是相当费劲的(特别是如果我想在将来更改东西的话),我需要更接近ANT并且更易于部署的东西


提前感谢您为我的GroovyWS实现提供了其他技术或修复方案的建议。

我终于想出了一个解决方案:实际上解决了我的问题,并最终能够轻松部署和访问web服务,没有任何问题/异常

剧本:

@Grab(group='com.github.groovy-wslite', module='groovy-wslite', version='0.7.1')
import wslite.soap.*
def client = new SOAPClient("http://127.0.0.1/axis2/services/ReleaseService")
def response = client.send  {
  body {
    myFunction(xmlns:"http://my.namespace.com") {
       stringParameter("6.3.0.0")
       status() { value("default") }
       mode() { value("full") }
    }
  }
}
其中,
状态
模式
是由一个“值”属性组成的
复杂类型
(作为示例)

提供web服务返回的对象。当然,令牌的名称取决于WSDL。在我的例子中,请求的响应称为
myFunctionResponse
,它有一个字段
name=“return”
,并给我一个
complexType
对象。可以根据WSDL中给出的名称检索对象的字段:

println(response.myFunctionResponse.return.location) // gives me the field value of the field "location" for my complexType

我在使用JDK1.7时遇到了类似的问题。切换到JDK 1.6为我解决了这个问题。

请在您最终成功时报告。我帮不了你,只能指着另一个问题:。如果你能想出更好的办法,你也可以回答这个问题。那么问题出在哪里呢?为什么GroovyWS从一开始就不工作?我真的不知道。它甚至无法正确初始化。也许葡萄有问题。如前所述,我相信在我还包括库的时候,它使用了Groovy Soap。
println(response.myFunctionResponse.return)
println(response.myFunctionResponse.return.location) // gives me the field value of the field "location" for my complexType