调用使用xsd:anyType的SOAP Web服务

时间:2011-02-11 16:25:12

标签: java xsd wsdl wsdl2java

我需要调用一个WebService,它有一个被定义为xsd:anyType数组的参数,定义如下:

<complexType name='ArrayOfAnyType'>
   <complexContent>
      <restriction base='soapenc:Array'>
         <attribute ref='soapenc:arrayType' wsdl:arrayType ='xsd:anyType[]'/>
      </restriction>
   </complexContent>
</complexType>

并且返回类型也是xsd:anyType类型,如下所示:

<message name='RunTask.runTaskInput'>
   <part name='taskName' type='xsd:string'/>
   <part name='args' type='ns2:ArrayOfAnyType'/>
</message>
<message name='RunTask.runTaskOutput'>
   <part name='return' type='xsd:anyType'/>
</message>

WebService实际上是一个可以执行许多不同任务的服务器,其中任务可以由服务器的用户配置(并且每个任务都有自己的特定参数)。

到目前为止,我可以使用Microsoft的WSDL实用程序为此Web服务生成C#客户端代理。只要我正确地将所有参数都转换为.Net'对象'类型,就可以轻松使用生成的C#代码。

我现在需要为这个Web服务生成一个Java客户端(说实话,我只是Java的初学者)。似乎有一个名为WSDL2JAVA的实用程序,我在http://ws.apache.org/muse/docs/2.0.0/tutorial/01-install-muse.html找到了它。但如果我运行它,它会给我以下错误:

  

警告:[ID ='NoWSRPSchema']否   找到了WS-RP模式。   java.lang.RuntimeException:[ID =   'NotDocLiteral'] WSDL操作   'runTask'不是doc-literal,因为   它定义了一个超过的消息   SOAP Body的一个消息部分。   doc-literal消息的SOAP Body   应该包含一个根请求   元素(带有操作名称)   零个或多个子元素(   参数)。           在org.apache.muse.tools.inspector.ResourceInspector.getInputName(ResourceInspector.java:486)           在org.apache.muse.tools.inspector.ResourceInspector.createJavaMethod(ResourceInspector.java:329)           在org.apache.muse.tools.inspector.ResourceInspector.getOperations(ResourceInspector.java:570)           在org.apache.muse.tools.inspector.ResourceInspector.run(ResourceInspector.java:888)           在org.apache.muse.tools.generator.analyzer.SimpleAnalyzer.inspect(SimpleAnalyzer.java:409)           在org.apache.muse.tools.generator.analyzer.SimpleAnalyzer.analyze(SimpleAnalyzer.java:348)           在org.apache.muse.tools.generator.Wsdl2Java.run(Wsdl2Java.java:178)           在org.apache.muse.tools.generator.Wsdl2Java.main(Wsdl2Java.java:270)

     

严重:[ID ='CodeGenFailed']代码   生成失败,见例外   以下信息。

     

发现了一个例外:[ID =   'NotDocLiteral'] WSDL操作   'runTask'不是doc-literal,因为   它定义了一个超过的消息   SOAP Body的一个消息部分。   doc-literal消息的SOAP Body   应该包含一个根请求   元素(操作名称)   零个或多个子元素(   参数)。

我认为xsd:anyType在这里不受支持。

为此Web服务生成代理类的更简单方法是什么? 最好尽可能简单,就像WSDL为我创建C#代理一样。

0 个答案:

没有答案