2012-08-07 10 views
6

GroovyWS è un framework che utilizza internamente CXF. Voglio fare una richiesta come segue:Come creare una mappa con cxf in 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> 

Attualmente sto cercando di fare questo da un servizio graal come segue:

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

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

che dà

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

Ho anche provato [ :] e cose ma non farlo funzionare.

+0

Non ricordo affatto i dettagli, ma cosa succede se si tenta di creare il parametro della mappa con 'proxy.client.objectFactory.createMap()'? (il nome dell'ultimo metodo può variare, dipende dal nome del tipo WSDL) –

risposta

3

Beh, è ​​stato un po 'che ho fatto qualcosa di simile, ma mi sembra di ricordare che i clienti CXF-generati avevano un metodo chiamato "creare", simile a:

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

Dare che una prova e vedi se mapObject ha i metodi o i membri che ti aspetti.

+0

Nota: ho ricevuto questo da un'altra mia risposta: http://stackoverflow.com/questions/3317453/groovyws-and-complex-requests/3328305 # 3328305 – billjamesdev

+0

Il WSDL che uso non ha 'ns2.Map'. Come posso aggiungerlo alla risposta? – Chris

+0

Ho usato ns2.Map perché è quello che vedo nello snippet XML sopra. In sostanza, pensate ai namespace come pacchetti per questo tipo di cose e includeteli nel nome della classe che volete che il proxy crei. – billjamesdev

1

Questa è una known issue con l'utilizzo di JAXB

Il problema di fondo è che lo schema è ambiguo.

ci sono due soluzioni:

  • spazi utilizzare il nome per eliminare ogni ambiguità
  • Resolve ogni servizio singolarmente in un pacchetto Java diverso.