qq_16601953 2019-01-28 11:07 采纳率: 0%
浏览 742

jaxb泛型可以动态制定依赖的类吗?

最近有个需求需要用到jaxb泛型,但是@XmlElements下面显示配置的类声明太多了
如下图
例子

现在代码光这个类的配置就多达200多个,有什么好的办法可以不用配置这么多类
的声明,直接去包下面或者解析时动态的添加类依赖呢?
想要的结果是
如果A.class对象匹配上,那么生成的xml文件Body标签里面是A.class对应的属性值,同理B.class、C.class等对象匹配时,生成的xml文件Body里面就是匹配上的class对象属性值

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-07 19:38
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在使用JAXB和XML的时候,我们可以通过XML Schema来定义这些依赖关系。这使得我们的XML更加结构化,并且更容易管理。

    以下是一个简单的例子:

    import javax.xml.bind.annotation.XmlSchema;
    import java.util.HashMap;
    
    @XmlSchema(
            xmlns = "http://example.com/namespace",
            namespacePrefixes = {
                {"myNamespace", "http://example.com/myNamespace"}
            }
    )
    public class Body {
    
        private String bodyValue;
    
        public String getBody() {
            return bodyValue;
        }
    
        public void setBody(String bodyValue) {
            this.bodyValue = bodyValue;
        }
    }
    

    在这个例子中,我们创建了一个名为Body的类,它有一个属性bodyValue。然后我们在Body类的外部定义了两个命名空间:一个是http://example.com/namespace,另一个是http://example.com/myNamespace。这两个命名空间都包含着一个名为myNamespace的映射表,其中包含了xmlns属性和namespacePrefixes属性。

    当我们尝试将Body类的对象转换为XML时,JAXB会自动根据这些映射表来确定哪些属性应该被包括在XML文档中。这样我们就不会看到大量的@XmlElement注解,而是可以看到<myNamespace:Body>这样的元素,这表明Body类已经被正确地映射到了XML文档中。

    如果你想要从XML文档中获取特定的属性,你只需要查找与之相关的myNamespace:Body元素,并从中提取出相应的属性值。例如,如果你想从XML文档中获取Body类的bodyValue属性,你可以这样做:

    public class MyClass {
    
        @XmlAnyElement(localPart="body")
        public Body body;
    
        // ...
    }
    

    在这个例子中,MyClass类的成员变量body就是一个myNamespace:Body元素,这意味着我们可以从XML文档中获取到它的bodyValue属性。

    希望这个答案对你有帮助!

    评论

报告相同问题?

悬赏问题

  • ¥30 STM32 INMP441无法读取数据
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境