2012-08-07 9 views
6

GroovyWS es un framework que internamente usa CXF. Quiero hacer una petición de la siguiente manera:¿Cómo hacer un mapa con cxf en groovy?

<param2 xsi:type="ns2:Map"> 
    <item xsi:type="ns2:Map"> 
     <key xsi:type="xsd:string">param1</key> 
     <value xsi:type="xsd:string">param2</value> 
    </item> 
</param2> 

Actualmente estoy tratando de hacer esto desde un servicio griales de la siguiente manera:

def proxy = new WSClient("http://xyz", this.class.classLoader) 
proxy.initialize() 

proxy.client.invoke("call", new HashMap<String, String>()) 

que da

javax.xml.bind.JAXBException 
class java.util.HashMap nor any of its super class is known to this context. 

Incluso he intentado [ :] y otras cosas, pero no funcionan.

+0

No recuerdo los detalles en absoluto, pero ¿qué ocurre si intentas crear el parámetro de mapa con 'proxy.client.objectFactory.createMap()'? (el nombre del último método puede variar, depende del tipo de nombre WSDL) –

Respuesta

3

Bueno, ha sido un tiempo desde que hice algo como esto, pero me parece recordar que los clientes generados-CXF tenían un método llamado "crear", similar a:

def mapObject = proxy.create("ns2.Map"); 

Inténtelo y mira si mapObject tiene los métodos o miembros que estás esperando.

+0

Nota, obtuve esto de otra respuesta mía: http://stackoverflow.com/questions/3317453/groovyws-and-complex-requests/3328305 # 3328305 – billjamesdev

+0

El WSDL que uso no tiene 'ns2.Map'. ¿Cómo puedo agregarlo a la respuesta? – Chris

+0

Utilicé ns2.Map porque eso es lo que veo en el fragmento de XML anterior. Básicamente, piense en espacios de nombres como paquetes para este tipo de cosas, e inclúyalos en el nombre de la clase que desea que cree el proxy. – billjamesdev

1

Esta es una known issue con el uso de JAXB

El problema de fondo es que su esquema es ambigua.

hay dos soluciones:

  • espacios usar el nombre para eliminar cualquier ambigüedad
  • resolver cada servicio individual en un paquete Java diferente.
Cuestiones relacionadas