Java 将 XML 解组为动态对象

2023-12-05

我正在寻找从 XML 定义创建和加载 JAVA 对象的最佳工具/方法。 我已经退房了JAXB,看起来不错,但没有找到一种方法来处理属性是动态的或不时更改的实体,因此希望有类似自动处理实体的方法,而不需要将对象转换为预定义实体对象。存在这样的东西吗?

工作流程就像这样,从 XML 读取,为每个具有动态属性集的实体创建类和/或为这些实体创建 ORM 映射部分,然后所有操作检索/存储到数据库中,或者可能会使用一些 NoSQL 解决方案,如 MongoDB。


Note:我是EclipseLink JAXB (MOXy)领导者,也是 JAXB 2 的成员(JSR-222)专家组。


查看以下 EclipseLink 示例。它演示了如何将动态属性与 JPA 和 JAXB 实现一起使用:

  • http://wiki.eclipse.org/EclipseLink/Examples/MySports

选项 #1 - 具有动态属性的静态对象

MOXy 有一个@XmlVirtualAccessMethods扩展允许您将映射中的条目映射到 XML。这允许您向静态类添加属性。在下面的示例中,Customer 类具有“真实”名称属性,并且可能具有许多“虚拟”属性。

package blog.metadatasource.refresh;

import java.util.*;
import javax.xml.bind.annotation.*;
import org.eclipse.persistence.oxm.annotations.XmlVirtualAccessMethods;

@XmlRootElement
@XmlType(propOrder={"firstName", "lastName", "address"})
@XmlVirtualAccessMethods
public class Customer {

    private String name;
    private Map<String, Object> extensions = new HashMap<String, Object>();

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Object get(String key) {
        return extensions.get(key);
    }

    public void set(String key, Object value) {
        extensions.put(key, value);
    }

}

虚拟属性是通过 MOXy 的 XML 元数据定义的。在下面的示例中,我们将添加两个属性:middleName 和shippingAddress。

<?xml version="1.0"?>
<xml-bindings
    xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm"
    package-name="blog.metadatasource.refresh">
    <java-types>
        <java-type name="Customer">
            <java-attributes>
                <xml-element
                    java-attribute="middleName"
                    name="middle-name"
                    type="java.lang.String"/>
                <xml-element
                    java-attribute="shippingAddress"
                    name="shipping-address"
                    type="blog.metadatasource.multiple.Address"/>
            </java-attributes>
        </java-type>
    </java-types>
</xml-bindings>

了解更多信息

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 将 XML 解组为动态对象 的相关文章

随机推荐