Cómo tener un HashMap como @WebParam con JBossWS 3.1.2
Estoy tratando de desarrollar un servicio web con JBossWS 3.1.2 que tenga un HashMap como uno de sus argumentos. Estoy usando esta versión de JBossWS porque eso es lo que se distribuye con la versión de JBoss que estoy usando. Estoy usando wsprovide para generar el WSDL y wsconsume para crear stubs de cliente WS.
Una versión simplificada de mi servicio web es:
@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";
}
}
El WSDL creado por wsprovide contiene:
<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>
El código del cliente generado contiene una clase abstracta vacía AbstractMap.java y una clase vacía HashMap.
Hubiera esperado que se generara WSDL similar al siguiente:
<complexType>
<sequence>
<element name="key" type="anyType" />
<element name="value" type="anyType" />
</sequence>
</complexType>
También intenté envolver HashMap con una clase personalizada (ParameterMap) pero obtuve más de lo mismo.
¿Hay un siguiente paso que no estoy viendo? ¿Me estoy perdiendo algo o es esto una limitación al enfoque ascendente para desarrollar servicios web con JBossWS?