> I'm working in background on making sure one can do pretty much any sort of
transformation (well, most simple enough transformations :-)) 

Finally I've committed some initial support for it.
It should be possible to easily :

- drop elements, namespaces, attributes
- change names, namespaces
- append elements
- require attributes be serialized as elements, etc...
on the in/out

I'll be working on updating the docs later on
Sergey  


Sergey Beryozkin wrote:
> 
> Hi Matt
> 
> Thanks for confirming it.
> I'm working in background on making sure one can do pretty much any sort
> of transformation (well, most simple enough transformations :-)) to
> JAXB-based outputs without having to deal with writing
> XMLStreamWriters/Readers but it will take me a bit of time.
> In 2.2.4 you can have namespaces dropped for JSON production only, to
> append them back you'd need to register a custom XMLStreamReader - it
> won't be needed once I'm done with my work.
> 
> It all goes pretty well for JAXB/XML but Jettison writer/reader need some
> fixes along the way; I'll work with the local Jettison build (with your
> patch being included)
> 
> Cheers, Sergey
> 
> 
> mraible wrote:
>> 
>> I was able to get everything working by changing @XmlAttribute to
>> @XmlElement and setting namespace="" to many elements. I'm not sure if
>> this is a workable solution on my project since we're using JAXB for XML
>> and I think the namespaces need to be there for that. 
>> 
>> For CXF 2.2.4, will it be possible to drop the namespaces for JSON
>> production/consumption only? Or will it affect XML as well?
>> 
>> As far as the patch I submitted to Jettison, that is necessary to get
>> JSON to show up in the proper hierarchy. Without it, some children show
>> up in a parent where they shouldn't.
>> 
>> Thanks,
>> 
>> Matt
>> 
>> 
>> Sergey Beryozkin-2 wrote:
>>> 
>>> Hi 
>>> 
>>> Having @XmlAttribute annotations causes Jettison to fail to deserialize
>>> the sequence you posted originally given that it causes it to serialize
>>> "@name":"bar" like properties in the first place. So I was able to write
>>> a test reading the sequence with CXF 2.2.3 as suggested in [1] (but I
>>> also had to ensure only the first root element was namespace-qualified).
>>> 
>>> I've been working in background on making sure a user can customize most
>>> of the serialization process for JAXB/JSON (drop namespaces - possible
>>> in 2.4-SNAPSHOT, have a given node serialized with a diff local name,
>>> with/without namespace), additionally for JSON : cause attributes be
>>> serialized as elements, etc but I'll most likely won't finish it in time
>>> for 2.2.4 
>>> 
>>> By the way, how does the patch for [2] helps in dealing with this issue
>>> ?
>>> 
>>>> Is this bug something that would affect other JSON providers like
>>> Jackson
>>> too?
>>> 
>>> Probably not - but I'm not exactly sure
>>> 
>>>> I've heard it's 10x faster
>>> 
>>> Possibly. Jettison does not do streaming which is something Dejan might
>>> get a chance to look into.
>>> 
>>> Cheers, Sergey
>>> 
>>> [1]
>>> http://www.nabble.com/Issues-marshalling-a-JSON-String-to-Java-Objects-(
>>> works-fine-from-Java-to-JSON)-tt25531242.html#a25775811
>>> [2] http://jira.codehaus.org/browse/JETTISON-57
>>> 
>>> -----Original Message-----
>>> From: mraible [mailto:[email protected]] 
>>> Sent: 06 October 2009 21:14
>>> To: [email protected]
>>> Subject: Re: Issues marshalling a JSON String to Java Objects (works
>>> fine from Java to JSON)
>>> 
>>> 
>>> Sorry for not replying sooner - I thought I was subscribed to this
>>> thread in
>>> Nabble, but apparently wasn't. 
>>> 
>>> From your explanation, it sounds like I should try using CXF
>>> 2.2.4-SNAPSHOT
>>> and changing some annotations to @XmlElement. Is that correct?
>>> 
>>> Is this bug something that would affect other JSON providers like
>>> Jackson
>>> too? I've heard it's 10x faster[1] and since I current have a patched
>>> version of Jettison[2], it might make sense to switch.
>>>  
>>> Lastly, is there a JIRA issue for this that I can track or reference?
>>> 
>>> Thanks,
>>> 
>>> Matt
>>> 
>>> [1] http://markmail.org/message/btngjg67rithzcv5
>>> [2] http://jira.codehaus.org/browse/JETTISON-57
>>> 
>>> 
>>> Sergey Beryozkin wrote:
>>>> 
>>>> Jettison is uncapable of deserializing sequences containing something
>>> like
>>>> "@name":"foo".
>>>> So if you can change @XmlAttribute to @XmlElement then it would help.
>>>> Now, the other Jettison issue in this example in that it is only
>>> capable
>>>> of dealing with this sequence only if 'd.' is appended to the root
>>>> 'definition' element but not to 'structure'. So if you can update the
>>>> annotations such that only the root 'DataDefinition' class has the
>>>> namespace or no namespace at all then it would help too.
>>>> 
>>>> 
>>>> So you should end up with a sequence like this one :
>>>> 
>>>> {"definition": {"repeating":"false","index":"0","name":"Credit Line
>>>> Increase Data",
>>>>    
>>>>
>>> "structure":[{"repeating":"false","index":"2","name":"CreditLineIncConve
>>> rsation",
>>>>          "symbolic":[
>>>>               {"index":"0","name":"ReasonForIncrease"},
>>>>               {"index":"4","name":"TermConds"}
>>>>          ]
>>>>     }]
>>>>   }
>>>> }
>>>> 
>>>> (note that the structure is an array [] now).
>>>> 
>>>> There're a lot of preconditions there. in 2.2.4-SNAPSHOT it is
>>> possible to
>>>> tell a JSONProvider to drop namespaces. More customization will be
>>> coming
>>>> in later on to deal with the attributes issue and to ensure sequences
>>> can
>>>> be deserialized into JAXB beans with XmlRootElement containing
>>> namespaces.
>>>> 
>>>> cheers, Sergey
>>>> 
>>>> 
>>>> Sergey Beryozkin wrote:
>>>>> 
>>>>> Actually, I have reproduced it. It reads ok for JAXB but not for
>>> JSON. My
>>>>> initial thinking is that it is a Jettison (reader) bug, but I'll need
>>> to
>>>>> play more with this example before I can tell for sure.
>>>>> In meantime, you might want to try a Jackson JAXRS provider instead,
>>>>> Benson has added the test :
>>>>> 
>>>>>
>>> http://svn.apache.org/repos/asf/cxf/trunk/systests/jaxrs/src/test/resour
>>> ces/jaxrs_jackson_provider/WEB-INF/beans.xml
>>>>> Or may be wrapping this one :
>>> http://code.google.com/p/json-framework/
>>>>> 
>>>>> Perhaps trying to simplify the class hierarchy or JAXB annotations
>>> might
>>>>> also make the difference.
>>>>> 
>>>>> cheers, Sergey 
>>>>>  
>>>>> 
>>>>> Sergey Beryozkin wrote:
>>>>>> 
>>>>>> Hi
>>>>>> 
>>>>>> I'm having problems with reproducing this issue. I thought I'd do a
>>>>>> quick test this evening but I proved to be wrong :-)
>>>>>> First I had to modify a bit the classes for a basic test to even
>>> start
>>>>>> working, to bypass JAXB complaints.
>>>>>> So here's what I have now.
>>>>>> testIt() results in
>>>>>> 
>>>>>> {"ns1.definition":
>>> {"@repeating":"false","@index":"0","@name":"Credit
>>>>>> Line Increase Data",
>>>>>>    
>>>>>>
>>> "ns1.structure":{"@repeating":"false","@index":"2","@name":"CreditLineIn
>>> cConversation",
>>>>>>          "ns1.symbolic":[
>>>>>>               {"@index":"0","@name":"ReasonForIncrease"},
>>>>>>               {"@index":"4","@name":"TermConds"}
>>>>>>          ]
>>>>>>     }
>>>>>>   }
>>>>>> }
>>>>>> 
>>>>>> which is a simpler but a similar structure instance. 
>>>>>> 
>>>>>> @Test
>>>>>>     public void testIt() throws Exception {
>>>>>>         JSONProvider p = new JSONProvider();
>>>>>>         //p.setSerializeAsArray(true);
>>>>>>         //p.setArrayKeys(Collections.singletonList("structure"));
>>>>>>         
>>>>>>         DataDefinition dd = new DataDefinition();
>>>>>>         dd.setName("Credit Line Increase Data");
>>>>>>         List<Field> fields = new ArrayList<Field>();
>>>>>>         Structure s = new Structure();
>>>>>>         s.setIndex(2);
>>>>>>         s.setName("CreditLineIncConversation");
>>>>>>         List<Field> fields2 = new ArrayList<Field>();
>>>>>>         SymbolicField sf1 = new SymbolicField();
>>>>>>         sf1.setIndex(0);
>>>>>>         fields2.add(sf1);
>>>>>>         sf1.setName("ReasonForIncrease");
>>>>>>         SymbolicField sf2 = new SymbolicField();
>>>>>>         sf2.setIndex(4);
>>>>>>         sf2.setName("TermConds");
>>>>>>         fields2.add(sf2);
>>>>>>         s.setFields(fields2);
>>>>>>         fields.add(s);
>>>>>>         
>>>>>>         dd.setFields(fields);
>>>>>>         
>>>>>>         ByteArrayOutputStream os = new ByteArrayOutputStream();
>>>>>>         
>>>>>>         p.writeTo(dd, (Class)DataDefinition.class,
>>> DataDefinition.class,
>>>>>> DataDefinition.class.getAnnotations(), 
>>>>>>                   MediaType.APPLICATION_JSON_TYPE, new
>>>>>> MetadataMap<String, Object>(), os);
>>>>>>         
>>>>>>         String str = os.toString();
>>>>>>         System.out.println(str);
>>>>>>     }
>>>>>> 
>>>>>> 
>>>>>> readIt() tries to read this data :
>>>>>> 
>>>>>>     @Test
>>>>>>     public void readIt() throws Exception {
>>>>>>         String s =
>>>>>>
>>> "{\"ns1.definition\":{\"@repeating\":\"false\",\"@index\":\"0\",\"@name\
>>> ":"
>>>>>>             + "\"Credit Line Increase
>>>>>>
>>> Data\",\"ns1.structure\":{\"@repeating\":\"false\",\"@index\":\"2\","
>>>>>>             +
>>>>>>
>>> "\"@name\":\"CreditLineIncConversation\",\"ns1.symbolic\":[{\"@index\":\
>>> "0\",\"@name\":"
>>>>>>             +
>>>>>>
>>> "\"ReasonForIncrease\"},{\"@index\":\"4\",\"@name\":\"TermConds\"}]}}}";
>>>>>>         
>>>>>>         JSONProvider p = new JSONProvider();
>>>>>>         Map<String, String> namespaceMap = new HashMap<String,
>>>>>> String>();
>>>>>>         namespaceMap.put("http://bla";, "ns1");
>>>>>>         p.setNamespaceMap(namespaceMap);
>>>>>>         byte[] bytes = s.getBytes();
>>>>>>         Object object = p.readFrom((Class)DataDefinition.class,
>>>>>> DataDefinition.class, 
>>>>>>                                   
>>>>>> DataDefinition.class.getAnnotations(), 
>>>>>>                                           null, null, new
>>>>>> ByteArrayInputStream(bytes));
>>>>>>         DataDefinition dd = (DataDefinition)object;
>>>>>>         Field struct =
>>>>>> dd.getFieldsAsMap().get("CreditLineIncConversation");
>>>>>>      }
>>>>>> 
>>>>>>      but gets a ClassCastException at 
>>>>>>      DataDefinition dd = (DataDefinition)object;
>>>>>> 
>>>>>>      because it is a Structure object.
>>>>>> 
>>>>>>      and here're the slightly updated classes :    
>>>>>> 
>>>>>> 
>>>>>>     @XmlRootElement(name = "definition", namespace = "http://bla";)
>>>>>>     public static class DataDefinition extends Structure {
>>>>>> 
>>>>>>     }
>>>>>> 
>>>>>>     @XmlRootElement(name = "definition", namespace = "http://bla";)
>>>>>>     @XmlSeeAlso({DataDefinition.class, SymbolicField.class})
>>>>>>     
>>>>>>     public static class Structure extends Field {
>>>>>>                    
>>>>>>             @XmlAttribute(required = false)
>>>>>>             boolean repeating = false;
>>>>>>            
>>>>>>             public boolean isRepeating() {
>>>>>>                     return repeating;
>>>>>>             }
>>>>>> 
>>>>>>             @XmlElements( { @XmlElement(name = "structure",
>>>>>> namespace="http://bla";, type = Structure.class),
>>>>>>                     @XmlElement(name = "numeric",
>>>>>> namespace="http://bla";, type = NumericField.class),
>>>>>>                     @XmlElement(name = "symbolic",
>>>>>> namespace="http://bla";, type = SymbolicField.class),
>>>>>>                     @XmlElement(name = "date",
>>> namespace="http://bla";,
>>>>>> type = DateField.class),
>>>>>>                     @XmlElement(name = "boolean",
>>>>>> namespace="http://bla";, type = BooleanField.class) })
>>>>>>             private List<Field> fields;
>>>>>> 
>>>>>> //            public List<Field> getFields() {
>>>>>> //                    return fields;
>>>>>> //            }
>>>>>>            
>>>>>>             public void setFields(List<Field> fields) {
>>>>>>                     this.fields = fields;
>>>>>>             }
>>>>>>            
>>>>>>             public Map<String, Field> getFieldsAsMap() {
>>>>>>                     Map<String, Field> fieldMap = new
>>> HashMap<String,
>>>>>> Field>();
>>>>>>                     for (Field field : fields) {
>>>>>>                             fieldMap.put(field.name, field);
>>>>>>                     }
>>>>>>                     return fieldMap;
>>>>>>             }
>>>>>>     } 
>>>>>>     @XmlSeeAlso({DataDefinition.class, Structure.class})
>>>>>>     public static abstract class Field implements Serializable {
>>>>>> 
>>>>>>         @XmlAttribute
>>>>>>         String name;
>>>>>> 
>>>>>> //        public String getName() {
>>>>>> //        return name;
>>>>>> //        }
>>>>>> 
>>>>>>         public void setName(String name) {
>>>>>>         this.name = name;
>>>>>>         }
>>>>>> 
>>>>>>             @XmlAttribute(required = false)
>>>>>>             long index;
>>>>>> 
>>>>>> //            public long getIndex() {
>>>>>> //                return index;
>>>>>> //            }
>>>>>> //
>>>>>>             public void setIndex(long index) {
>>>>>>                 this.index = index;
>>>>>>             }
>>>>>>         }
>>>>>> 
>>>>>>     @XmlRootElement(name = "symbolic", namespace = "http://bla";)
>>>>>>         public static class SymbolicField extends Field {
>>>>>> 
>>>>>>         }
>>>>>> 
>>>>>>         public static class NumericField extends Field {
>>>>>> 
>>>>>>         }
>>>>>>         
>>>>>>         public static class DateField extends Field {
>>>>>> 
>>>>>>         }
>>>>>>         
>>>>>>         public static class BooleanField extends Field {
>>>>>> 
>>>>>>         } 
>>>>>> 
>>>>>> 
>>>>>> Please send me more info which can help me in reproducing it...
>>>>>> 
>>>>>> Cheers, Sergey
>>>>>> 
>>>>>> 
>>>>>> mraible wrote:
>>>>>>> 
>>>>>>> I'm facing an issue with CXF and JSON marshalling. My GET request
>>> for
>>>>>>> an object returns the following JSON.
>>>>>>> 
>>>>>>> {
>>>>>>>    "d.definition":{
>>>>>>>       "@filename":"credit-line-increase-data",
>>>>>>>       "@repeating":"false",
>>>>>>>       "@index":"0",
>>>>>>>       "@name":"Credit Line Increase Data",
>>>>>>>       "d.structure":{
>>>>>>>          "@repeating":"false",
>>>>>>>          "@index":"0",
>>>>>>>          "@name":"CreditLineIncConversation",
>>>>>>>          "d.symbolic":[
>>>>>>>             {
>>>>>>>                "@index":"0",
>>>>>>>                "@name":"ReasonForIncrease"
>>>>>>>             },
>>>>>>>             {
>>>>>>>                "@index":"4",
>>>>>>>                "@name":"TermsConds"
>>>>>>>             }
>>>>>>>          ],
>>>>>>>          "d.numeric":[
>>>>>>>             {
>>>>>>>                "@index":"1",
>>>>>>>                "@name":"AmountAppliedFor"
>>>>>>>             },
>>>>>>>             {
>>>>>>>                "@index":"2",
>>>>>>>                "@name":"AmountOffered"
>>>>>>>             }
>>>>>>>          ],
>>>>>>>          "d.boolean":[
>>>>>>>             {
>>>>>>>                "@index":"3",
>>>>>>>                "@name":"CustApprovesCreditCheck"
>>>>>>>             },
>>>>>>>             {
>>>>>>>                "@index":"5",
>>>>>>>                "@name":"CustAgreesToTermsConds"
>>>>>>>             }
>>>>>>>          ],
>>>>>>>          "d.structure":{
>>>>>>>             "@repeating":"false",
>>>>>>>             "@index":"6",
>>>>>>>             "@name":"CreditCheck",
>>>>>>>             "d.symbolic":{
>>>>>>>                "@index":"0",
>>>>>>>                "@name":"DateOfCreditCheck"
>>>>>>>             },
>>>>>>>             "d.structure":{
>>>>>>>                "@repeating":"true",
>>>>>>>                "@index":"1",
>>>>>>>                "@name":"CreditLines",
>>>>>>>                "d.symbolic":{
>>>>>>>                   "@index":"0",
>>>>>>>                   "@name":"LineType"
>>>>>>>                },
>>>>>>>                "d.numeric":[
>>>>>>>                   {
>>>>>>>                      "@index":"1",
>>>>>>>                      "@name":"Amount"
>>>>>>>                   },
>>>>>>>                   {
>>>>>>>                      "@index":"2",
>>>>>>>                      "@name":"DaysPastDue"
>>>>>>>                   }
>>>>>>>                ]
>>>>>>>             }
>>>>>>>          }
>>>>>>>       }
>>>>>>>    }
>>>>>>> }
>>>>>>> 
>>>>>>> The POST request sends something very similar back (ordering of
>>>>>>> elements shouldn't matter hopefully). 
>>>>>>> 
>>>>>>> {
>>>>>>>    "d.definition":{
>>>>>>>       "@repeating":"false",
>>>>>>>       "@filename":"credit-line-increase-data",
>>>>>>>       "@index":"0",
>>>>>>>       "@name":"Credit Line Increase Data",
>>>>>>>       "d.structure":{
>>>>>>>          "@repeating":"false",
>>>>>>>          "@index":"0",
>>>>>>>          "@name":"CreditLineIncConversation",
>>>>>>>          "d.symbolic":[
>>>>>>>             {
>>>>>>>                "@index":"0",
>>>>>>>                "@name":"ReasonForIncrease"
>>>>>>>             },
>>>>>>>             {
>>>>>>>                "@index":"4",
>>>>>>>                "@name":"TermsConds"
>>>>>>>             }
>>>>>>>          ],
>>>>>>>          "d.numeric":[
>>>>>>>             {
>>>>>>>                "@index":"1",
>>>>>>>                "@name":"AmountAppliedFor"
>>>>>>>             },
>>>>>>>             {
>>>>>>>                "@index":"2",
>>>>>>>                "@name":"AmountOffered"
>>>>>>>             }
>>>>>>>          ],
>>>>>>>          "d.boolean":[
>>>>>>>             {
>>>>>>>                "@index":"3",
>>>>>>>                "@name":"CustApprovesCreditCheck",
>>>>>>>                "type":"BOOLEAN"
>>>>>>>             },
>>>>>>>             {
>>>>>>>                "@index":"5",
>>>>>>>                "@name":"CustAgreesToTermsConds",
>>>>>>>                "type":"BOOLEAN"
>>>>>>>             }
>>>>>>>          ],
>>>>>>>          "d.structure":{
>>>>>>>             "@repeating":"false",
>>>>>>>             "@index":"6",
>>>>>>>             "@name":"CreditCheck",
>>>>>>>             "d.symbolic":{
>>>>>>>                "@index":"0",
>>>>>>>                "@name":"DateOfCreditCheck"
>>>>>>>             },
>>>>>>>             "d.structure":{
>>>>>>>                "@repeating":"true",
>>>>>>>                "@index":"1",
>>>>>>>                "@name":"CreditLines",
>>>>>>>                "d.symbolic":{
>>>>>>>                   "@index":"0",
>>>>>>>                   "@name":"LineType"
>>>>>>>                },
>>>>>>>                "d.numeric":[
>>>>>>>                   {
>>>>>>>                      "@index":"1",
>>>>>>>                      "@name":"Amount"
>>>>>>>                   },
>>>>>>>                   {
>>>>>>>                      "@index":"2",
>>>>>>>                      "@name":"DaysPastDue"
>>>>>>>                   }
>>>>>>>                ]
>>>>>>>             }
>>>>>>>          }
>>>>>>>       },
>>>>>>>       "d.structure":{
>>>>>>>          "d.symbolic":[
>>>>>>>             {
>>>>>>>                "@index":"0",
>>>>>>>                "@name":"ReasonForIncrease"
>>>>>>>             },
>>>>>>>             {
>>>>>>>                "@index":"4",
>>>>>>>                "@name":"TermsConds"
>>>>>>>             }
>>>>>>>          ],
>>>>>>>          "@repeating":"false",
>>>>>>>          "@index":"0",
>>>>>>>          "@name":"CreditLineIncConversation",
>>>>>>>          "d.boolean":[
>>>>>>>             {
>>>>>>>                "@index":"3",
>>>>>>>                "@name":"CustApprovesCreditCheck",
>>>>>>>                "type":"BOOLEAN"
>>>>>>>             },
>>>>>>>             {
>>>>>>>                "@index":"5",
>>>>>>>                "@name":"CustAgreesToTermsConds",
>>>>>>>                "type":"BOOLEAN"
>>>>>>>             }
>>>>>>>          ],
>>>>>>>          "d.numeric":[
>>>>>>>             {
>>>>>>>                "@index":"1",
>>>>>>>                "@name":"AmountAppliedFor"
>>>>>>>             },
>>>>>>>             {
>>>>>>>                "@index":"2",
>>>>>>>                "@name":"AmountOffered"
>>>>>>>             }
>>>>>>>          ],
>>>>>>>          "d.structure":{
>>>>>>>             "@repeating":"false",
>>>>>>>             "@index":"6",
>>>>>>>             "@name":"CreditCheck",
>>>>>>>             "d.symbolic":{
>>>>>>>                "@index":"0",
>>>>>>>                "@name":"DateOfCreditCheck"
>>>>>>>             },
>>>>>>>             "d.structure":{
>>>>>>>                "@repeating":"true",
>>>>>>>                "@index":"1",
>>>>>>>                "@name":"CreditLines",
>>>>>>>                "d.symbolic":{
>>>>>>>                   "@index":"0",
>>>>>>>                   "@name":"LineType"
>>>>>>>                },
>>>>>>>                "d.numeric":[
>>>>>>>                   {
>>>>>>>                      "@index":"1",
>>>>>>>                      "@name":"Amount"
>>>>>>>                   },
>>>>>>>                   {
>>>>>>>                      "@index":"2",
>>>>>>>                      "@name":"DaysPastDue"
>>>>>>>                   }
>>>>>>>                ]
>>>>>>>             }
>>>>>>>          }
>>>>>>>       }
>>>>>>>    }
>>>>>>> }
>>>>>>> 
>>>>>>> The bug that I'm currently seeing is that the "symbolic", "boolean"
>>> and
>>>>>>> "numeric" arrays in the "CreditLineIncConversation" aren't getting
>>>>>>> converted from JSON to Java properly. In fact, they're completely
>>>>>>> dropped. Here's the resulting JSON after the save has been made:
>>>>>>> 
>>>>>>> {
>>>>>>>    "d.definition":{
>>>>>>>       "@filename":"credit-line-increase-data",
>>>>>>>       "@repeating":"false",
>>>>>>>       "@index":"0",
>>>>>>>       "@name":"Credit Line Increase Data",
>>>>>>>       "d.structure":{
>>>>>>>          "@repeating":"false",
>>>>>>>          "@index":"0",
>>>>>>>          "@name":"CreditLineIncConversation",
>>>>>>>          "d.structure":{
>>>>>>>             "@repeating":"false",
>>>>>>>             "@index":"6",
>>>>>>>             "@name":"CreditCheck",
>>>>>>>             "d.symbolic":{
>>>>>>>                "@index":"0",
>>>>>>>                "@name":"DateOfCreditCheck"
>>>>>>>             },
>>>>>>>             "d.structure":{
>>>>>>>                "@repeating":"true",
>>>>>>>                "@index":"1",
>>>>>>>                "@name":"CreditLines",
>>>>>>>                "d.symbolic":{
>>>>>>>                   "@index":"0",
>>>>>>>                   "@name":"LineType"
>>>>>>>                }
>>>>>>>             }
>>>>>>>          }
>>>>>>>       }
>>>>>>>    }
>>>>>>> }
>>>>>>> 
>>>>>>> I tried looking at CXF's JAX-RS Documentation (specifically the
>>> json
>>>>>>> array serialization issues section) and making the following change
>>> in
>>>>>>> my configuration.
>>>>>>> 
>>>>>>> @@ -45,8 +45,17 @@
>>>>>>>      <bean id="jsonProvider"
>>>>>>> class="org.apache.cxf.jaxrs.provider.JSONProvider">
>>>>>>>          <property name="namespaceMap" ref="jsonNamespaceMap"/>
>>>>>>>          <property name="serializeAsArray" value="true"/>
>>>>>>> +           <property name="arrayKeys" ref="jsonKeys"/>     
>>>>>>>      </bean>
>>>>>>>  
>>>>>>> +       <util:list id="jsonKeys">
>>>>>>> +         <value>structure</value>
>>>>>>> +         <value>numeric</value>
>>>>>>> +         <value>symbolic</value>
>>>>>>> +         <value>date</value>
>>>>>>> +         <value>boolean</value>
>>>>>>> +       </util:list>
>>>>>>> +
>>>>>>> 
>>>>>>> Unfortunately, this didn't work. 
>>>>>>> 
>>>>>>> The class that I'm trying to populate is defined as:
>>>>>>> 
>>>>>>> @XmlRootElement(name = "definition")
>>>>>>> public class DataDefinition extends Structure {
>>>>>>> 
>>>>>>> }
>>>>>>> 
>>>>>>> It's parent (Structure), looks as follows:
>>>>>>> 
>>>>>>> public class Structure extends Field {
>>>>>>>                 
>>>>>>>         @XmlAttribute(required = false)
>>>>>>>         boolean repeating = false;
>>>>>>>         
>>>>>>>         public boolean isRepeating() {
>>>>>>>                 return repeating;
>>>>>>>         }
>>>>>>> 
>>>>>>>         @XmlElements( { @XmlElement(name = "structure", type =
>>>>>>> Structure.class),
>>>>>>>                 @XmlElement(name = "numeric", type =
>>> NumericField.class),
>>>>>>>                 @XmlElement(name = "symbolic", type =
>>> SymbolicField.class),
>>>>>>>                 @XmlElement(name = "date", type = DateField.class),
>>>>>>>                 @XmlElement(name = "boolean", type = BooleanField.class)
>>> })
>>>>>>>         private List<Field> fields;
>>>>>>> 
>>>>>>>         public List<Field> getFields() {
>>>>>>>                 return fields;
>>>>>>>         }
>>>>>>>         
>>>>>>>         public void setFields(List<Field> fields) {
>>>>>>>                 this.fields = fields;
>>>>>>>         }
>>>>>>>         
>>>>>>>         public Map<String, Field> getFieldsAsMap() {
>>>>>>>                 Map<String, Field> fieldMap = new HashMap<String,
>>> Field>();
>>>>>>>                 for (Field field : getFields()) {
>>>>>>>                         fieldMap.put(field.getName(), field);
>>>>>>>                 }
>>>>>>>                 return fieldMap;
>>>>>>>         }
>>>>>>> }
>>>>>>> 
>>>>>>> I'd appreciate any pointers on what I need to do to make this work.
>>>>>>> 
>>>>>>> Thanks!
>>>>>>> 
>>>>>>> Matt
>>>>>>> 
>>>>>> 
>>>>>> 
>>>>> 
>>>>> 
>>>> 
>>>> 
>>> 
>>> -- 
>>> View this message in context:
>>> http://www.nabble.com/Issues-marshalling-a-JSON-String-to-Java-Objects-%
>>> 28works-fine-from-Java-to-JSON%29-tp25531242p25775811.html
>>> Sent from the cxf-user mailing list archive at Nabble.com.
>>> 
>>> 
>>> 
>> 
>> 
> 
> 

-- 
View this message in context: 
http://old.nabble.com/Issues-marshalling-a-JSON-String-to-Java-Objects-%28works-fine-from-Java-to-JSON%29-tp25531242p26256808.html
Sent from the cxf-user mailing list archive at Nabble.com.

Reply via email to