gpt4 book ai didi

java - JAXB:设置 complexTypes 以使用现有的 java 类

转载 作者:数据小太阳 更新时间:2023-10-29 02:32:34 26 4
gpt4 key购买 nike

目前,JAXB 正在根据我指定的 xml 模式创建一个点类。但是,我更希望它使用现有的 java.awt.Point 类。对于我定义为使用和导入 java.awt.Point 的任何其他类型。

这是我的积分代码:

<xs:complexType name="point">
<xs:sequence>
<xs:element name="x" type="xs:int" />
<xs:element name="y" type="xs:int" />
</xs:sequence>
</xs:complexType>

这可能吗?

最佳答案

我不知道我的解决方案是否非常优雅,但我相信它会按您的要求工作。

考虑 Test 类,其属性 p 类型为 java.awt.Point:

@XmlRootElement
public class Test {
@XmlElement
@XmlJavaTypeAdapter(PointAdapter.class)
public Point p;
}

PointAdapter如下:

class PointAdapter extends XmlAdapter<String, Point> {

@Override
public String marshal(Point v) throws Exception {
return String.format("%d;%d", v.x, v.y);
}

@Override
public Point unmarshal(String v) throws Exception {
String[] coords = v.split(";");
return new Point(Integer.parseInt(coords[0]), Integer.parseInt(coords[1]));
}

}

如果您不手动创建 Java 类,而是让它们由 xjc 生成,则也可以在模式中指定 XmlAdapter;通过一个单独的绑定(bind)文件,您可以使用 xjc-b 选项指定或嵌入到您的 XSD 中。我个人更喜欢第一种解决方案,因为它可以保持模式干净。因为我玩这个已经有一段时间了,所以我建议你引用 JAXB documentation (寻找 MyDatatypeConverter;这应该是最相关的部分)。

关于java - JAXB:设置 complexTypes 以使用现有的 java 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3646007/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com