Я пытаюсь разработать веб-сервис с JBossWS 3.1.2, в качестве аргумента которого используется HashMap. Я использую эту версию JBossWS, потому что это то, что распространяется с версией JBoss, которую я использую. Я использую wsprovide для генерации WSDL и wsconsume для создания заглушек клиента WS.
Упрощенная версия моего WebService:
@WebService(targetNamespace = "http://localhost/ping", serviceName = "Ping")
@SOAPBinding(style = SOAPBinding.Style.RPC)
public class Ping {
@WebMethod
@WebResult(name="result")
public String ping(@WebParam(name="arguments") HashMap arguments) {
return "pong";
}
}
WSDL, созданный wsprovide, содержит:
<types>
<xs:schema targetNamespace='http://localhost/ping' version='1.0' xmlns:tns='http://localhost/ping' xmlns:xs='http://www.w3.org/2001/XMLSchema'>
<xs:complexType name='hashMap'>
<xs:complexContent>
<xs:extension base='tns:abstractMap'>
<xs:sequence/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType abstract='true' name='abstractMap'>
<xs:sequence/>
</xs:complexType>
</xs:schema>
</types>
Сгенерированный код клиента содержит пустой абстрактный класс AbstractMap.java и пустой класс HashMap.
Я бы ожидал, что будет сгенерирован WSDL, подобный следующему:
<complexType>
<sequence>
<element name="key" type="anyType" />
<element name="value" type="anyType" />
</sequence>
</complexType>
Я также попытался обернуть HashMap пользовательским классом (ParameterMap), но получил больше того же самого.
Есть ли следующий шаг, которого я не вижу? Я что-то упустил или это ограничение восходящего подхода к разработке веб-сервисов с JBossWS?