eclipseelink moxy将零长度字符串传递给xmladapter.unmarshal(string v)

vi4fp9gy  于 2021-07-06  发布在  Java
关注(0)|答案(0)|浏览(239)

我正在尝试使用xmladapter进行一些自定义json解析。但是,我总是得到一个长度为0的字符串传递给unmarshal方法。
以下是一些json示例:

  1. {
  2. "type": "typeA",
  3. "data": [
  4. {
  5. "dataField1": "A",
  6. "dataField2": "AA"
  7. },
  8. {
  9. "dataField1": "B",
  10. "dataField2": "BB"
  11. }
  12. ]
  13. }

我试着从两个方面来解决这个问题。因为“type”定义了数据数组中的数据类型,所以我可以使用根xml上的适配器动态创建正确的对象。

我把数组中的json放在一个字符串中,以便以后处理。
我一辈子都想不出怎么做选项一。我觉得在这种情况下需要手动解析整个对象。typeadataobject沿线的内容扩展了genericdataobject。
现在,这里是选项2的一个尝试,也是问题的核心,我在适配器中的unmarshal方法中得到了一个零长度的字符串。
这是我的根对象类。

  1. public class TestObject
  2. {
  3. public String type;
  4. @XmlElement (name = "data")
  5. public List<GenericDataObject> data = new ArrayList<GenericDataObject>();
  6. }

这是我的genericdataobject

  1. @XmlJavaTypeAdapter(GenericObjectAdapter.class)
  2. public class GenericDataObject
  3. {
  4. @XmlTransient
  5. public String json;
  6. public GenericDataObject (String v)
  7. {
  8. json = v;
  9. }
  10. }

最后是我的适配器

  1. public class GenericObjectAdapter extends XmlAdapter<String, GenericDataObject>
  2. {
  3. @Override
  4. public GenericDataObject unmarshal (String v) throws Exception
  5. {
  6. return new CAPIGenericDataObject (v);
  7. }
  8. @Override
  9. public String marshal (GenericDataObject v) throws Exception
  10. {
  11. return v.json;
  12. }
  13. }

问题:unmarshal中的字符串v(字符串v)总是一个长度为零的字符串。所以这里没什么可做的。在我看来,它应该传递“{”datafield1“:”a“,”datafield2“:”aa“}”和随后的b数据,当它在数组中迭代第二次调用时。
但是,如果我用“datafield1”和“datafield2”创建了一个合适的对象,并且不使用适配器,那么一切都可以解析。所以我把注解搞砸了,或者我是怎么用数组实现的?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题