marshall with xjc创建了嵌套类

   name   Value1 Value2  value3a value3b     ....  

我使用xml-> xsd和xjc从中创建类。

现在我想创建我的ProductInformation对象,并对其进行编组。

我的问题是xjc创建3个类和一个objectfactory,以及ProductInformation中的一些嵌套类。 当我看到可用的方法时,我主要看到的是getter而不是setter。

“资产”类没有像这样的方法;

 asset.setValues(List values) 

我最后写了这样有趣的代码;

 ProductInformation.Assets.Asset.Values.MultiValue multivalue=new ProductInformation.Assets.Asset.Values.MultiValue(); 

Jaxb这是正常的吗?

JAXB通常处理多值属性的方式是为List提供一个getter而不是setter,它返回一个可变列表 – 你应该调用getter来检索一个最初为空的列表,然后创建成员此列表的对象以正常方式使用new add它们直接add到列表中。 您可以使用与顶级类完全相同的方式创建静态嵌套类。

应该使用getter和setter生成单值属性(非列表)。

伊恩罗伯茨给出答案是正确的。 我正在给这个人提供一些额外的信息给那些对没有内部课程感兴趣的人。

XML Schema(schema.xsd)

如果JAXB类是从以下XML模式生成的,那么生成的CustomerEmployee类都将包含一个名为Address的静态嵌套类(因为每个类都包含它们自己的地址定义)。 这实际上是为什么使用静态嵌套类来避免名称冲突问题。

                              

JAXB绑定文件(binding.xml)

绑定文件用于自定义Java生成的模式。 您可以使用localScoping="top-level"指定所有内容都应该是顶级类。 执行此操作时,您必须确保解决任何潜在的名称冲突。

         

XJC电话

下面是使用XJC命令从XML模式生成Java类时指定绑定文件的示例。

 xjc -b binding.xml schema.xsd 

了解更多信息

这实际上只是对Blaise Doughan的回答的评论,但我想发布xml。

如果使用更复杂的xsd并且node属性中的路径变得太长,则可以:

     ....    ....