2012-08-07 8 views
6

GroovyWS to framework wykorzystujący wewnętrznie CXF. Chcę, aby złożyć zamówienie w następujący sposób:Jak zrobić mapę z cxf w 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> 

Obecnie staram się robić to z usługą grails następująco:

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

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

Który daje

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

Próbowałem nawet [ :] i takie tam, ale nie działaj.

+0

Nie pamiętam szczegółów, ale co, jeśli spróbujesz utworzyć parametr mapy za pomocą 'proxy.client.objectFactory.createMap()'? (Nazwa ostatniej metody może się różnić, zależy to od nazwy typu WSDL). –

Odpowiedz

3

Cóż, minęło trochę czasu odkąd zrobił coś takiego, ale wydaje mi się, że CXF generowane klienci mieli metodę o nazwie „stworzyć”, podobny do:

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

podać, że spróbować i zobacz, czy obiekt MapObject ma oczekiwane metody lub członków.

+0

Uwaga, otrzymałem to z innej odpowiedzi: http://stackoverflow.com/questions/3317453/groovyws-and-complex-requests/3328305 # 3328305 – billjamesdev

+0

Używany plik WSDL nie ma pliku 'ns2.Map'. Jak mogę dodać to do odpowiedzi? – Chris

+0

Użyłem ns2.Map, ponieważ to widzę we fragmencie XML powyżej. Zasadniczo, myśl o przestrzeni nazw jako pakietach dla tego rodzaju rzeczy i włącz je do nazwy klasy, którą chcesz utworzyć proxy. – billjamesdev

1

To known issue z użyciem JAXB

Podstawowym problemem jest to, że schemat jest niejednoznaczna.

Istnieją dwa rozwiązania:

  • obowiązuje używać nazwy, aby usunąć wszelkie niejasności
  • Resolve każdej usługi indywidualnie do innego pakietu Java.