How to make a Map with cxf in groovy?
Asked Answered
P

2

6

GroovyWS is a framework which is internally using CXF. I want to make a request as follows:

<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>

Currently I am trying to do this from a grails service as following:

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

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

Which gives

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

I even tried [:] and stuff but do not get it working.

Powerboat answered 7/8, 2012 at 20:18 Comment(1)
I don't remember the details at all, but what if you try to create the map parameter with proxy.client.objectFactory.createMap()? (the name for the last method may vary, it depends on WSDL type name)Wacky
L
3

Well, it's been a while since I did something like this, but I seem to remember that CXF-generated clients had a method called "create", similar to:

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

Give that a try and see if the mapObject has the methods or members you're expecting.

Lummox answered 12/8, 2012 at 7:54 Comment(3)
Note, I got this from another answer of mine: #3317953Lummox
The WSDL I use does not have ns2.Map. How can I add it to the response?Powerboat
I used ns2.Map because that's what I see in the XML snippet above. Essentially, think of namespaces as packages for this kind of thing, and include them in the name of the class you want the proxy to create.Lummox
C
1

This is a known issue with using JAXB

The underlying problem is that your schema is ambiguous.

There are two solutions:

  • Use name spaces to remove any ambiguity
  • Resolve each Service individually into a different Java package.
Chubb answered 14/8, 2012 at 10:24 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.