使用Spring和jaxbUnmarshaller在运行时动态设置模型注释

时间:2014-10-20 15:06:47

标签: java spring jaxb

我正在尝试动态解组xml文件,因此在实例化我的模型时需要更改@XmlRootElement和@XmlElement注释。

我已经看到了一些如何做到这一点的例子,但我不清楚如何实现它们以及它们是否是最好的方法。例如。 Modify a class definition's annotation string parameter at runtime

//更新 我需要动态地解组产品的源,它们将根据用户指定的映射进行解组,这将由模型使用。我不知道如何动态更改的其中一个部分是xmlElements注释。如果我可以动态修改它,那么剩下的就可以了。

用户将为他们希望使用的每个产品Feed完成产品映射模型。使用映射模型对每个产品馈送进行解组,映射模型具有设定的标准,例如,用户可以映射到的名称,网址。然后,这将用于在解组时填充Products模型。

典型流程:

UnmarshallAll方法

获取所有产品Feed(包含详细信息或xml网址,以及映射ID)

对于每个产品进纸 - 从产品Feed的ID获取映射模型并设置xml文件的URL。使用url和productFeedMapping调用XmlUnmarshalling方法。

在解组方法中,我需要生成准备好进行解组的Products模型,但是解组的注释需要使用productFeedMapping中的数据进行更改。

我需要动态修改的模型如下:

//need to dynamically change these
@XmlRootElement(name = "products")
@XmlAccessorType (XmlAccessType.FIELD)
public class Products
{
    //need to dynamically change these
    @XmlElement(name = "product")
    private List<Product> products = null;

    public List<Product> getProducts() {
        return products;
    }

    public void setProducts(List<Product> products) {
        this.products = products;
    }
}

我将在此方法中实例化它:

//unmarshall xml method
private Map<String, List<String>> unmarshallXml(URL url, ProductFeedMapping productFeedMapping) {

    //delcare the map
    Map<String, List<String>> map = new HashMap<String, List<String>>();

//INSTANTIATE PRODUCT MODEL HERE

}

0 个答案:

没有答案