У меня есть класс pointbrush
, этот класс содержит атрибут объекта colorPoint
этот тип атрибута - это Color
Я использую JAXB
для генерации всего моего класса, но мой вопрос, как сохранить атрибут Color в XML
без генерации класса Color, поскольку JAVA
имеет этот класс, и я использовал этот класс, поэтому я не хочу генерировать другое время.
В моей схеме:
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.example.org/ProjectDataBase"
<complexType name="PointBrush">
<element name="ColorPoint" type="string" maxOccurs="1"
minOccurs="1">
</element>
<element name="ColorPoint" type="tns:ColorPoint" maxOccurs="1"
minOccurs="1">
</element>
</complexType>
<complexType name="ColorPoint">
<sequence>
<element name="r" type="float" maxOccurs="1" minOccurs="1"></element>
<element name="g" type="float" maxOccurs="1" minOccurs="1"></element>
<element name="b" type="float" maxOccurs="1" minOccurs="1"></element>
<element name="t" type="float" maxOccurs="1" minOccurs="1"></element>
</sequence>
</complexType>
</schema>
Код Java:
public class PointBrush {
@XmlElement(name = "ColorPoint")
protected Color colorPoint;
public Color getColorPoint() {
return colorPoint;
}
public void setColorPoint(Color value) {
this.colorPoint = value;
}
}
public class BrushPointMr{
public boolean Insert(PointBrush entity) {
jaxbContext = JAXBContext.newInstance(Project.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Project project = (Project) jaxbUnmarshaller.unmarshal(file);
PointBrush newBrush = objectFactory.createPointBrush();
newBrush.setColorPoint(entity.getColorPoint());
////what can I do in java code for store object Color///////
}
}
Вы можете использовать внешний файл привязки для настройки XJC для выполнения того, что вы хотите. В приведенном ниже примере существующий класс com.example.Foo
будет использоваться для сложного типа с именем Foo
.
binding.xml
<jxb:bindings
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
version="2.1">
<jxb:bindings schemaLocation="yourSchema.xsd">
<jxb:bindings node="//xs:complexType[@name='ColorPoint']>
<jxb:class ref="java.awt.Color"/>
</jxb:bindings>
</jxb:bindings>
</jxb:bindings>
XJC Call
xjc -d outputDir -b binding.xml yourSchema.xsd
Заметка
Вам необходимо вручную добавить XmlAdapter
уровня XmlAdapter
для класса Color
чтобы правильно преобразовать XML.
Когда у вас есть класс, который JAXB не может преобразовать по умолчанию, вы можете использовать XmlAdapter
чтобы преобразовать его в тот, который может использоваться для маршаллинга и развязывания.