Sergey, I've made it as far as the namespace issues with JSON, since the changes I've made to deal with generic types have made them worse.
There's something here that I just don't follow. When the output is XML, all the namespaces just take care of themselves. Aegis assigns prefixes and StaX writes them. Admittedly, if Aegis ever forgot to assign a prefix StaX would just go add an xmlns=, but I don't (yet) think that this is something that happens. Do you have any idea why the JSON environment ends up being so much more fussy? --benson On Mon, Aug 24, 2009 at 8:58 AM, Sergey Beryozkin <sergey.beryoz...@iona.com > wrote: > > Hi Benson > > Thanks for spending your time on these tests, and fixing CXF 2401. I was > also able to add few more tests, including the one which writes/reads a > complex Map to/from JSON. > > AegisJSONProvider tries its best for users to avoid setting up a namespace > map manually, but in cases when it does not guess properly the users would > be able to overwrite namespaces and their prefixes as needed. This isssue > would likely arise on the read side only, when CXF reads it. JSON is > namespace-unaware so when reading, one needs to setup a namespace map for > Jettison to report values like @ns1.bar to the JAXB reader... (but only if > AegisJSONProvider has not guessed how to map prefixes to namespaces) > > There's a couple of issues I'd like to discuss. First one is that > AegisJsonProviderTest.testReadWriteComplexMap does have to setup a > namespace > for a map root element, but it does not have to do it for > testWrite/ReadCollection tests. I'm wondering, can it be avoided in cases > when Maps are being written/read ? That is, can we modify > createReader/Writer methods such that QNames for containers like > Map/Collections and its member types are available ? > > Another one is that DataBindingJSONProvider test (aegis tests) still can > not > handle collections. I think the problem there is that when > DataBindingProvider (the one DataBindingJSONProvider extends) is being > initialized, it uses a workaround which we discussed in the other thread. > Namely, it attempts to convert a JAXRS model info into WSDL-like one and > set > calls DataBinding.initialize(Service). It's quite limiting for a number of > reasons, and one of them is that the generic types are not visible to data > bindings.... > So we introduced PropertiesAwareDataBinding interface and I've just updated > the JAXRS code to call it like this : > > Map<Class<?>, Type> allClasses = getAllJAXRSResponseInputTypes(); > Map<String, Object> props = new HashMap<String, Object>(); > props.put(PropertiesAwareDataBinding.TYPES_PROPERTY, allClasses); > ((PropertiesAwareDataBinding)db).initialize(props); > > At the moment no CXF DataBindings implement this newly introduced > interface. > I think the only way for DataBindingJSONProvider aegis tests which handle > collections to start passing is for Aegis DataBinding to implement > PropertiesAwareDataBinding and initialize itself using the provided > Map<Class<?>, Type>, as opposed to Service. Would you be open to updating > the Aegis databinding ? > > thanks, Sergey > > > > > > > > > > > > bimargulies wrote: > > > > I have a rather clear memory of working on these, there wasn't enough > > passing of Generic classes around. I'll go have a look. > > > > > > On Fri, Aug 21, 2009 at 6:38 AM, Sergey > > Beryozkin<sergey.beryoz...@iona.com> wrote: > >> > >> Hi Benson > >> > >> if you could look at any of these tests or at least point me in the > right > >> direction then it would be great. > >> I know you're busy - so just look at it whenever you get a chance, not > >> urgent... > >> > >> cheers, Sergey > >> > >> > >> Sergey Beryozkin-2 wrote: > >>> > >>> > >>> > >>> Hi Benson > >>> > >>> I can't make the Aegis tests writing/reading collections working in CXF > >>> JAX-RS. > >>> I've found that AegisProviderTest#testReadWriteComplexMap is still > >>> @Ignored, it might've passed for you because it was @Ignored :-) > >>> > >>> I've also added testWriteCollections() (which writes > >>> List<AegisTestBean>) > >>> to AegisJSONProviderTest. I also updated DataBindingJSONProviderTest, > >>> one > >>> of its internal classes to return List<Book>. AegisJSONProvider extends > >>> AegisElementProvider, DataBindingJSONProvider extends > >>> DataBindingProvider > >>> which actually (in this case) delegates to Aegis DataBinding. > >>> > >>> AegisJSONProviderTest fails at the write time, it can't find the > mapping > >>> for List. DataBindingJSONProviderTest fails early at the Aegis > >>> DataBinding > >>> initialization time for the same reason. I thought Lists were supported > >>> by > >>> default ? I haven't found any exam[le showing how a type mapping for > >>> Lists > >>> can be created. > >>> Can you please, whenever you have a chance, have a look at these tests > ? > >>> > >>> thanks, Sergey > >>> > >>> > >> > >> -- > >> View this message in context: > >> > http://www.nabble.com/Handling-collections-with-Aegis-in-JAX-RS-tp24933144p25076146.html > >> Sent from the cxf-dev mailing list archive at Nabble.com. > >> > >> > > > > > > -- > View this message in context: > http://www.nabble.com/Handling-collections-with-Aegis-in-JAX-RS-tp24933144p25115676.html > Sent from the cxf-dev mailing list archive at Nabble.com. > >