Как я могу хранить объект в JAXB?

1

У меня есть класс 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///////
         }
}
  • 0
    вам не нужно создавать класс для цвета. Вам просто нужно добавить newBrush в файл. В чем проблема?
  • 0
    Вы знаете содержание класса Color много атрибутов, как я могу сказать, получить только RGBT, но внутри базы данных ColorPoint XML
Показать ещё 4 комментария
Теги:
jaxb

1 ответ

0
Лучший ответ

Начиная с XML-схемы

Вы можете использовать внешний файл привязки для настройки 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 чтобы преобразовать его в тот, который может использоваться для маршаллинга и развязывания.

  • 0
    Пожалуйста, до меня, что вы имеете в виду в XJC и как я могу использовать для класса Color в моем коде.
  • 0
    @ user3858035 - XJC - компилятор схемы XML для Java. Он используется для создания аннотированной модели JAXB из XML-схемы. Вам не нужно использовать его, если вы начинаете с классов Java. Вы начинаете со схемы или классов?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню