Pessoal estou com um problema.
Estou mapeando o xml em objetos java usando jaxb
Estou tentado mapear lista de objetos de um tipo base. Tenho as seguintes classes:
@XmlRootElement (name = “SldData”)
@XmlAccessorType (XmlAccessType.FIELD)
public class SldData {
@XmlElement
private String name;
@XmlElementRef
private List<RuleData> rules;
@XmlAccessorType (XmlAccessType.FIELD)
public class RuleData {
@XmlElement
private String name;
@XmlJavaTypeAdapter(SymbolizerAdapter.class)
private List<SymbolizerData> symbolizer;
@XmlJavaTypeAdapter(SymbolizerAdapter.class)
public class SymbolizerData {
@XmlElement
private String stroke;
@XmlElement
private String strokeWidth;
@XmlAccessorType (XmlAccessType.FIELD)
public class PolygonSymbolizerData extends SymbolizerData {
@XmlElement
private String fill;
@XmlElement
private String fillWidth;
Ou seja na classe RuleData tem uma lista de SymbolizerData que pode ser estendida por outras classes como PolygonSymbolizerData. Já tentei vária soluções mas ainda não consegui resolver.Uma delas foi utilizando o apdater
public class SymbolizerAdapter extends XmlAdapter<SymbolizerData, List>{
@Override
public List<SymbolizerData> unmarshal(SymbolizerData v)
throws Exception {
// TODO Auto-generated method stub
return null;
}
@Override
public PolygonSymbolizerData marshal(List<SymbolizerData> v)
throws Exception {
// TODO Auto-generated method stub
return null;
}
}
Mas não consegui nem chegar a executar ele, estou com o seguinte erro
HTTP Status 400 - org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field “fill” (Class publisher.model.sld.SymbolizerData), not marked as ignorable at [Source: org.apache.catalina.connector.CoyoteInputStream@4b36e6a5; line: 1, column: 67] (through reference chain: publisher.model.sld.SldData[“rules”]->publisher.model.sld.RuleData[“symbolizer”]->publisher.model.sld.SymbolizerData[“fill”])
Ele não está reconhecendo o tipo PolygonSymbolizerData, o xml enviado esta da seguinte forma:
> <?xml version="1.0" encoding="UTF-8" ?>
> <name>nameSld</name>
> <rules>
> <name>teste</name>
> <symbolizer>
> <fill>F</fill>
> <fillWidth>F</fillWidth>
> <stroke>ST</stroke>
> <strokeWidth>SD</strokeWidth>
> </symbolizer>
> </rules>
Alguém sabe o que está acontecendo?
Obrigado