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

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

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

{
  "type": "typeA",
  "data": [
    {
      "dataField1": "A",
      "dataField2": "AA"
    },
    {
      "dataField1": "B",
      "dataField2": "BB"
    }
  ]
}

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

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

public class TestObject
{
    public String type;
    @XmlElement (name = "data")
    public List<GenericDataObject> data = new ArrayList<GenericDataObject>();
}

这是我的genericdataobject

@XmlJavaTypeAdapter(GenericObjectAdapter.class)
public class GenericDataObject
{
    @XmlTransient
    public String json;

    public GenericDataObject (String v)
    {
        json = v;
    }
}

最后是我的适配器

public class GenericObjectAdapter extends XmlAdapter<String, GenericDataObject>
{    
    @Override
    public GenericDataObject unmarshal (String v) throws Exception
    {       
        return new CAPIGenericDataObject (v);
    }

    @Override
    public String marshal (GenericDataObject v) throws Exception
    {
        return v.json;
    }
}

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

暂无答案!

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

相关问题