我的JAXB有问题。我有一个带@XmlAnyAttribute的方法(在我的getter上),但它似乎不适用于setter(如果重要的话,使用JAXB RI)。
简化代码:
@XmlRootElement( name = "element" )
@XmlAccessorType( value = XmlAccessType.PUBLIC_MEMBER )
public class Element
{
private Map<QName, String> convertedAttributes = new HashMap<QName, String>();
private List<Attribute> attributes = new ArrayList<Attribute>();
@XmlAnyAttribute
public Map<QName, String> getConvertedAttributes() throws Exception
{
if ( attributes != null )
{
return new AttributeMapAdapter().marshal( attributes );
}
return new HashMap<QName, String>();
}
public void setConvertedAttributes( Map<QName, String> convertedAttributes )
{
this.convertedAttributes = convertedAttributes;
}
@XmlTransient
public List<Attribute> getAttributes()
{
return attributes;
}
public void setAttributes( List<Attribute> attributes )
{
this.attributes = attributes;
}
}
这项工作非常适合编组,我得到了我想要的输出。但是当我尝试解组它时,它没有发送给setter的值。
我尝试将@XmlAnyAttribute注释移动到该字段,它工作正常(但我不能在getter中进行调整)。
它有点像一个bug,但我不确定。有任何想法吗?我在Mac OS X上使用Java 1.6(10.7.2)
答案 0 :(得分:1)
这不是JAXB RI中的错误。问题出在您的getConvertedAttributes()
方法中。以下工作更好一点:
public Map<QName, String> getConvertedAttributes() throws Exception
{
if(!convertedAttributes.isEmpty()) {
return convertedAttributes;
}
if ( attributes != null ) {
convertedAttributes = new AttributeMapAdapter().marshal( attributes );
} else {
convertedAttributes = new HashMap<QName, String>();
}
return convertedAttributes;
}
答案 1 :(得分:0)
你的二传手必须再次解组地图。所以你需要一个适配器用于另一个方向。