Вызов SOAP WebService, который использует xsd: anyType - PullRequest
1 голос
/ 11 февраля 2011

Мне нужно вызвать 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 на самом деле является сервером, который может выполнять множество различных задач, где задачи могут быть настроены пользователем сервера (и каждая задача имеет свои конкретные аргументы).

До сих пор я мог генерировать клиентские прокси C # для этого веб-сервиса, используя утилиту Microsoft WSDL. Сгенерированный код C # может быть легко использован при условии, что я правильно приведу все аргументы к типу .Net 'object'.

Теперь мне нужно сгенерировать 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' не является документальным, потому что он определяет сообщение с более чем одна часть сообщения для его SOAP Body. SOAP Тело документа-буквального сообщения должен содержать один корневой запрос элемент (с именем операции) с нулем или более дочерних элементов ( параметры). в 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)

SEVERE: [ID = 'CodeGenFailed'] код поколение не удалось, смотрите исключение информация ниже.

Произошло исключение: [ID = 'NotDocLiteral'] Операция WSDL 'runTask' не является документальным, потому что он определяет сообщение с более чем одна часть сообщения для его SOAP Body. SOAP Тело документа-буквального сообщения должен содержать один корневой запрос элемент (с именем операции) с нулем или более дочерних элементов ( параметры).

Мне кажется, что xSD: anyType здесь не поддерживается.

Как проще создать прокси-класс для этого веб-сервиса? Желательно, чтобы как можно проще, точно так же, как WSDL создал для меня прокси C #.

...