草庐IT

java - 具有现有类和模式的 jaxb

coder 2024-06-30 原文

是否可以将现有的 xml 模式映射到现有的 java 类?

我有几个 xml 模式,我需要将它们全部映射到一个 java 类。 Xml 文件在存储数据的方式上略有不同。 例如

public class DataStorage {
   public String data1;
   public String data2;
   public String data3;
}

和一组不同的xml文件

<?xml ...?>
<dataCase1>
<data1>...</data1>
<data2>...</data2>
<data3>...</data3>
</dataCase1>

<?xml ...?>
<dataCase2>
<data data1="..." data2="..." data3="..." />
</dataCase2>

<?xml ...?>
<dataCase3>
<data>
<innerData>
<data1>...</data1>
</innerData>
<otherData data2="...">
<data3>...</data3>
</otherData>
</data>
</dataCase3>

xml 文件可能有许多其他变体。

是否可以使用 jaxb 将所有文件绑定(bind)到 java 类?

最佳答案

您可以使用 EclipseLink MOXy JAXB 的实现来实现这一点。据我了解,您仍然需要为不同类型的模式创建不同的类,但您可以重用您的域对象。

继续你的例子:

DataStorage 类,包含 3 个域对象(data1data2data3),简单表示为 字符串,实际上可以是任何 JAXB 映射域对象。

  • 模式类型 1

    @XmlRootElement(name = "dataCase")
    @XmlAccessorType(XmlAccessType.FIELD)
    public class DataStorage {
        private String data1;
        private String data2;
        private String data3;
    
        /**
         * No-arg ctor needed by jaxb.
         */
        private DataStorage() {}
    
        public DataStorage(String data1, String data2, String data3) {
            this.data1 = data1;
            this.data2 = data2;
            this.data3 = data3;
        }
    
    }
    
  • 模式类型 2。注意 @XmlPath 的使用注释。

     @XmlRootElement(name = "dataCase")
     @XmlAccessorType(XmlAccessType.FIELD)
     public class DataStorage {
         @XmlPath("data/@data1")
         private String data1;
         @XmlPath("data/@data2")
         private String data2;
         @XmlPath("data/@data3")
         private String data3;
     ....
    
  • 模式类型 3。再次利用@XmlPath .

    @XmlRootElement(name = "dataCase")
    @XmlAccessorType(XmlAccessType.FIELD)
    public class DataStorage {
        @XmlPath("data/innerData/data1/text()")
        private String data1;
        @XmlPath("data/otherData/@data2")
        private String data2;
        @XmlPath("data/otherData/data3/text()")
        private String data3;
    ....
    
  • 编码

    JAXBContext jc = JAXBContext.newInstance(DataStorage.class);
    Marshaller marshaller = jc.createMarshaller();
    DataStorage dataStorage = new DataStorage("data 1", "data 2", "data 3");
    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
    marshaller.marshal(dataStorage, System.out);
    

参见 this post从 MOXy 团队负责人的博客中获取信息。

关于java - 具有现有类和模式的 jaxb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7311911/

有关java - 具有现有类和模式的 jaxb的更多相关文章

  1. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  2. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  3. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  4. ruby - 如何在续集中重新加载表模式? - 2

    鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende

  5. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  6. Ruby——嵌套类和子类是一回事吗? - 2

    下面例子中的Nested和Child有什么区别?是否只是同一事物的不同语法?classParentclassNested...endendclassChild 最佳答案 不,它们是不同的。嵌套:Computer之外的“Processor”类只能作为Computer::Processor访问。嵌套为内部类(namespace)提供上下文。对于ruby​​解释器Computer和Computer::Processor只是两个独立的类。classComputerclassProcessor#Tocreateanobjectforthisc

  7. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

  8. ruby - 是否有用于序列化和反序列化各种格式的对象层次结构的模式? - 2

    给定一个复杂的对象层次结构,幸运的是它不包含循环引用,我如何实现支持各种格式的序列化?我不是来讨论实际实现的。相反,我正在寻找可能会派上用场的设计模式提示。更准确地说:我正在使用Ruby,我想解析XML和JSON数据以构建复杂的对象层次结构。此外,应该可以将该层次结构序列化为JSON、XML和可能的HTML。我可以为此使用Builder模式吗?在任何提到的情况下,我都有某种结构化数据-无论是在内存中还是文本中-我想用它来构建其他东西。我认为将序列化逻辑与实际业务逻辑分开会很好,这样我以后就可以轻松支持多种XML格式。 最佳答案 我最

  9. ruby-on-rails - Rails 3.1 中具有相同形式的多个模型? - 2

    我正在使用Rails3.1并在一个论坛上工作。我有一个名为Topic的模型,每个模型都有许多Post。当用户创建新主题时,他们也应该创建第一个Post。但是,我不确定如何以相同的形式执行此操作。这是我的代码:classTopic:destroyaccepts_nested_attributes_for:postsvalidates_presence_of:titleendclassPost...但这似乎不起作用。有什么想法吗?谢谢! 最佳答案 @Pablo的回答似乎有你需要的一切。但更具体地说...首先改变你View中的这一行对此#

  10. java - 我的模型类或其他类中应该有逻辑吗 - 2

    我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我

随机推荐