Мне нужно вызвать 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 #.