相关疑难解决方法(0)

如何自定义JAXB如何生成多个方法名称?

我们使用JAXB生成Java类,并且遇到了生成多个方法名称不正确的一些情况.例如,我们期望getPhysicians得到的地方getPhysicien.我们如何定制JAXB如何将特定方法复数化?

架构:

<xs:complexType name="physician">
    <xs:sequence>
       ...
    </xs:sequence>
</xs:complexType>

<xs:complexType name="physicianList">
    <xs:sequence>
        <xs:element name="Physician"
                    type="physician"
                    minOccurs="0"
                    maxOccurs="unbounded"/>
    </xs:sequence>
</xs:complexType>
Run Code Online (Sandbox Code Playgroud)

生成的Java代码:

...
public class PhysicianList {
...

    @XmlElement(name = "Physician")
    protected List<Physician> physicien;
    ...

    public List<Physician> getPhysicien() {
        if (physicien == null) {
            physicien = new ArrayList<Physician>();
        }
        return this.physicien;
    }
Run Code Online (Sandbox Code Playgroud)

更新

Blaise已经回答了这个问题.但是,我不希望在XML模式中混合诸如JAXB自定义之类的问题.所以对于那些具有相同偏好的人来说,这里有一个JAXB绑定文件,它实现了与Blaise建议的相同的东西,使JAXB自定义不受模式的影响:

<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
               xmlns:xs="http://www.w3.org/2001/XMLSchema"
               version="2.0">

    <jaxb:bindings schemaLocation="myschema.xsd">
        <jaxb:bindings node="//xs:complexType[@name='physicianList']//xs:element[@name='Physician']">
            <jaxb:property name="physicians"/>
        </jaxb:bindings>
    </jaxb:bindings>

</jaxb:bindings>
Run Code Online (Sandbox Code Playgroud)

java xml jaxb jaxb2

39
推荐指数
2
解决办法
3万
查看次数

具有动态字段的Java类

我正在寻找构建动态Java类的聪明方法,即可以在运行时添加/删除字段的类.使用场景:我有一个编辑器,用户应该能够在运行时向模型添加字段,甚至可以在运行时创建整个模型.

一些设计目标:

  • 如果可能的话,在没有强制转换的情况下键入safe,以用于动态字段的自定义代码(该代码将来自以不可预见的方式扩展模型的插件).
  • 性能良好(你能打败HashMap吗?也许在设置过程中使用数组并为字段分配索引?)
  • 字段"重用"(即如果您在多个位置使用相同类型的字段,则应该可以将其定义一次然后重复使用).
  • 计算字段取决于其他字段的值
  • 当字段更改值时(不一定通过Beans API),应发送信号
  • "自动"父子关系(当您将子项添加到父项时,子项中的父指针应设置为"free").
  • 容易明白
  • 使用方便

请注意,这是一个"圈外思考"的问题.我将在下面发布一个例子让你心情愉快:-)

java field dynamic

6
推荐指数
1
解决办法
2万
查看次数

标签 统计

java ×2

dynamic ×1

field ×1

jaxb ×1

jaxb2 ×1

xml ×1