Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAXB:设置complexTypes以使用现有java类_Java_Xml_Xsd_Schema_Jaxb - Fatal编程技术网

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

JAXB:设置complexTypes以使用现有java类,java,xml,xsd,schema,jaxb,Java,Xml,Xsd,Schema,Jaxb,目前,JAXB正在根据我指定的xml模式创建一个point类。但是,我更希望它使用现有的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:i

目前,JAXB正在根据我指定的xml模式创建一个point类。但是,我更希望它使用现有的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>


这可能吗?

我不知道我的解决方案是否非常优雅,但我相信它能满足您的要求

考虑使用类型为
java.awt.Point的属性
p
的类
Test

@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]));
    }

}
class PointAdapter扩展了XmlAdapter{
@凌驾
公共字符串封送处理(第v点)引发异常{
返回字符串.format(“%d;%d”,v.x,v.y);
}
@凌驾
公共点解组(字符串v)引发异常{
字符串[]坐标=v.split(“;”);
返回新的点(Integer.parseInt(coords[0]),Integer.parseInt(coords[1]);
}
}
如果您不是手工创建Java类,而是让它们通过
xjc
生成,那么也可以在模式中指定
XmlAdapter
;通过一个单独的绑定文件,可以使用
xjc
-b
选项指定该文件,也可以嵌入到XSD中。就个人而言,我更喜欢第一种解决方案,因为这样可以保持模式的干净。因为我已经玩了一段时间了,所以我建议您使用(寻找MyDatatypeConverter;这应该是最相关的部分)