powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / JAXB is missing an @XmlRootElement
14 сообщений из 14, страница 1 из 1
JAXB is missing an @XmlRootElement
    #38817680
danatriel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброго дня.
Случилась вот такая беда, достался проект с использованием JAXB. Unmarshalling работает нормально, классы генерятся нормально, вроде все хорошо. Но вот беда: Marshalling не работает.

[com.sun.istack.internal.SAXException2: unable to marshal type ... as an element because it is missing an @XmlRootElement annotation]

Куда копать? Что делать?
...
Рейтинг: 0 / 0
JAXB is missing an @XmlRootElement
    #38817717
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
danatriel,

Видать что-то не то пытаетесь маршалить. И зачем вы ваш секретный тип вырезали из сообщения об ошибке. В него ведь и надо смотреть.
...
Рейтинг: 0 / 0
JAXB is missing an @XmlRootElement
    #38818222
danatriel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz, да вроде ничего секретного. Посчитал не важной информацией(
Caused by: com.sun.istack.internal.SAXException2: unable to marshal type "com.vtco.busmt.config.FederationConfigType" as an element because it is missing an @XmlRootElement annotation

вот шапка xsd
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
&#65279;<?xml version="1.0" encoding="UTF-8" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:busmt="http://config.busmt.vtco.com"
  targetNamespace="http://config.busmt.vtco.com">
  <xsd:element name="federation-config" type="busmt:FederationConfigType" />
  <xsd:complexType name="FederationConfigType">
    <xsd:sequence>
      <xsd:element name="activemq" type="busmt:ActiveMQType" />
      <xsd:element name="redis" type="busmt:RedisType" />
      <xsd:element name="federations" type="busmt:FederationsType" />
    </xsd:sequence>
  </xsd:complexType>



шапка сгенерированного ObjectFactory:
Код: java
1.
2.
3.
4.
@XmlRegistry
public class ObjectFactory {

    private final static QName _FederationConfig_QNAME = new QName("http://config.busmt.vtco.com", "federation-config");




шапка сгенерированного FederationConfigType:
Код: java
1.
2.
3.
4.
5.
6.
7.
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "FederationConfigType", propOrder = {
    "activemq",
    "redis",
    "federations"
})
public class FederationConfigType {



Marshaller:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
    public static Marshaller getServerConfigMarshaller() {
        final Schema schema;
        try {
            final SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
            final URL schemaURL = Marshallers.class.getResource(SCHEMA_RESOURCE);
            if (schemaURL == null) {
                throw new Error("Fatal error: cannot locate configuration schema "
                        + "definition. Please, check your application package integrity.");
            }
            schema = sf.newSchema(schemaURL);

        } catch (final Throwable e) {
            throw new Error("Fatal error: failed to load configuration schema file.", e);
        }

        try {
            final JAXBContext context = JAXBContext.newInstance(FederationConfigType.class);
            Marshaller m=context.createMarshaller();
            m.setSchema(schema);
            return m;
        } catch (final Throwable e) {
            throw new Error("Fatal error: failed to initialize JAXB engine.", e);
        }
    }



пытаюсь маршаллить так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
    public static void save() {
        Marshaller serverConfigMarshaller = Marshallers.getServerConfigMarshaller();
        try {
            serverConfigMarshaller.marshal(getFederationConfigType(), new File("d:\\1.xml"));
        } catch (JAXBException ex) {
            Logger.getLogger(InfoAgregator.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
...
Рейтинг: 0 / 0
JAXB is missing an @XmlRootElement
    #38818229
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
danatriel,

Так это же "Юпи" - просто добавь воды.
Официальная дока говорит что делать
https://docs.oracle.com/cd/E16671_01/bh.200/e16658/troubleshooting.html
Здесь объясняют почему аннотация может не генерироваться в xjc
http://stackoverflow.com/questions/819720/no-xmlrootelement-generated-by-jaxb
...
Рейтинг: 0 / 0
JAXB is missing an @XmlRootElement
    #38818238
danatriel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

добавить вручную аннотацию нельзя, все равно при выполнении удалится аннотация. Классы при сборке заново генерятся же :(
...
Рейтинг: 0 / 0
JAXB is missing an @XmlRootElement
    #38818240
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
danatrielдобавить вручную аннотацию нельзя, все равно при выполнении удалится аннотация. Классы при сборке заново генерятся же :(
Поменяйте процесс. Либо уберите перегенерацию при сборке. Либо напишите патч, который после перегенерации накатыввает пропатченые классы сверху.
...
Рейтинг: 0 / 0
JAXB is missing an @XmlRootElement
    #38818244
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
danatriel,

Обратите внимание на этот комент. Может действительно в JAXBElement завернуть?
http://stackoverflow.com/questions/819720/no-xmlrootelement-generated-by-jaxb#comment6877098_2172942
...
Рейтинг: 0 / 0
JAXB is missing an @XmlRootElement
    #38818247
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
danatrielдобавить вручную аннотацию нельзя, все равно при выполнении удалится аннотация. Классы при сборке заново генерятся же :(
А по ссылкам пробовали ходить? Там и рецепт показан.
https://weblogs.java.net/blog/2006/03/03/why-does-jaxb-put-xmlrootelement-sometimes-not-always
...
Рейтинг: 0 / 0
JAXB is missing an @XmlRootElement
    #38818248
danatriel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

я пробовал и в JAXBElement обертывать - результата никакого.
А никак нельзя заставить при генерации класса писать аннотацию?
...
Рейтинг: 0 / 0
JAXB is missing an @XmlRootElement
    #38818253
danatriel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Код: java
1.
2.
            JAXBElement<FederationConfigType> jaxbElement = new JAXBElement<>(new QName("http://config.busmt.vtco.com", "federation-config"),FederationConfigType.class,getFederationConfigType());
            serverConfigMarshaller.marshal(jaxbElement,new File("d:\\1.xml"));



так же ругается на rootElement
...
Рейтинг: 0 / 0
JAXB is missing an @XmlRootElement
    #38818263
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
danatrielя пробовал и в JAXBElement обертывать - результата никакого.
А никак нельзя заставить при генерации класса писать аннотацию?

Вы меня где-то обманывается.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.*;
import javax.xml.namespace.*;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Test")
public class Test {

public static void main(String[] args) throws Exception {
 JAXBContext context = JAXBContext.newInstance(Test.class);
 Marshaller m = context.createMarshaller();
 m.marshal( new JAXBElement(
  new QName("test","t"), Test.class, new Test() ), System.out);
}
}



Таки печатает XML
...
Рейтинг: 0 / 0
JAXB is missing an @XmlRootElement
    #38818271
danatriel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
Простите за совсем глупый вопрос, но что значит ("t") new QName("test", "t" )
как я понимаю, это что-то в схеме
...
Рейтинг: 0 / 0
JAXB is missing an @XmlRootElement
    #38818276
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
danatrielBlazkowicz,
Простите за совсем глупый вопрос, но что значит ("t") new QName("test", "t" )
как я понимаю, это что-то в схеме
t - это имя тэга test это namespace.
Посмотрите ObjectFactory там будут приватные контсанты для ваших тэгов.
...
Рейтинг: 0 / 0
JAXB is missing an @XmlRootElement
    #38818281
danatriel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

спасибо Вам огромное!!! Все заработало!!
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / JAXB is missing an @XmlRootElement
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]