希望这不是一个菜鸟问题。我正在尝试从XML的第二级反序列化XML到POJO,但是在搜索并尝试解决与此类似的其他问题的许多答案之后,我仍在努力寻找适合该级的东西。
提供的XML(我无法更改),类似于此
<?xml version="1.0" encoding="UTF-8"?>
<ns0:InputRequest xmlns:ns0="OW">
<ns0:FMan>
<ns0:CInc>
<ns0:Act>Sample</ns0:Act>
<ns0:Op>Sample</ns0:Op>
<ns0:Int>AppInt</ns0:Int>
</ns0:CInc>
</ns0:FMan>
</ns0:InputRequest>
我只需要将CInc反序列化(永远只有一个)到我的POJO中,这看起来类似于
public class CInc extends InputRequest {
@JacksonXmlProperty(namespace = "ns0", localName = "Act")
private String action;
@JacksonXmlProperty(namespace = "ns0", localName = "Op")
private String operation;
@JacksonXmlProperty(namespace = "ns0", localName = "Int")
private String intName;
// Usual Getters, Setters, etc
}
我正在扩展一个抽象的顶级类,如下所示
@JacksonXmlRootElement(namespace = "ns0", localName = "InputRequest")
public class InputRequest { }
MY Java代码类似于
XmlMapper xmlMapper = new XmlMapper();
CInc cInc = xmlMapper.readValue(content, CInc.class);
由于缺少FMan元素,此操作失败。
从另一个答案中,我尝试像这样禁用FAIL_ON_UNKNOWN_PROPERTIES
XmlMapper xmlMapper = new XmlMapper();
xmlMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
CInc cInc = xmlMapper.readValue(content, CInc.class);
这消除了失败,但是POJO中的所有值都为空。
我还尝试为'FMan'元素放置另一个抽象类,以扩展'InputRequest',然后更改CInc以扩展FMan,即。
public class FMan extends InputRequest {
...
和
public class CInc extends FMan {
...
但这根本没有帮助。我觉得答案是我很想念的东西,但是我真的很想获得答案,所以我们将不胜感激。
答案 0 :(得分:0)
我知道它使用杰克逊(Jackson),必须进行序列化,换句话说,扩展序列化并具有私有序列版本ID属性,超级类也是如此。
public class CInc extends InputRequest,serialize {
private final long serialVersionUID = 1L;
*****
}
答案 1 :(得分:0)
您可以使用SimpleXml。添加此POJO;
@XmlName("ns0:CInc")
public class Cinc {
@XmlName("ns0:Act")
public String act;
@XmlName("ns0:Op")
public String op;
@XmlName("ns0:Int")
public String Int;
}
接下来要反序列化并打印输出的代码:
public static void main(final String... args) throws InvalidXPath, IOException {
final SimpleXml simple = new SimpleXml();
final Cinc c = simple.fromXml(xml, "ns0:InputRequest/ns0:FMan/ns0:CInc", Cinc.class);
System.out.println(c.act + " - " + c.op + " - " + c.Int);
}
这将打印:
Sample - Sample - AppInt
SimpleXml位于Maven中央:
<dependency>
<groupId>com.github.codemonstur</groupId>
<artifactId>simplexml</artifactId>
<version>2.0.0</version>
</dependency>