Почему при получении экземпляра JAXBContext в журнале jaxb «не найдено примечание XmlSchema для <имя моего пакета>»?

1

У меня есть файл xsd, который при компиляции с использованием jaxb-2 maven plugin генерирует источник java. Заголовок для моего xsd:

<schema targetNamespace="example.company.com"
elementFormDefault="qualified" xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:prefix="example.company.com">

Всякий раз, когда я пытаюсь получить JAXBContext для использования в маршалинге /unmarshaling, используя этот код:

JAXBContext jc = JAXBContext.newInstance("com.company.example", com.company.example.ObjectFactory.class.getClassLoader());

Я получаю сотни сообщений об ошибках в консоли, которые выглядят следующим образом:

Аннотации XmlSchema не найдены для com.company.example

После всех этих сообщений об ошибках работает маршалинг. Однако я хотел бы избавиться от ошибок.

Плагин jaxb2 maven определен в моем помпе так:

<plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>jaxb2-maven-plugin</artifactId>
        <version>1.3.1</version>
        <dependencies>
            <dependency>
                <groupId>com.sun.xml.bind</groupId>
                <artifactId>jaxb-xjc</artifactId>
                <version>2.1.13</version>
            </dependency>
            <dependency>
                <groupId>net.sourceforge.ccxjc</groupId>
                <artifactId>cc-xjc-plugin</artifactId>
                <version>2.0</version>
            </dependency>
        </dependencies>
        <executions>
            <execution>
                <phase>generate-sources</phase>
                <goals>
                    <goal>xjc</goal>
                </goals>
            </execution>
        </executions>
        <configuration>

            <arguments>-enableIntrospection -verbose</arguments>
            <schemaDirectory>${basedir}/src/main/xsd</schemaDirectory>
            <outputDirectory>${basedir}/src/main/java</outputDirectory>
            <packageName>com.company.example</packageName>
            <verbose>true</verbose>
            <failOnNoSchemas>true</failOnNoSchemas>
            <clearOutputDir>false</clearOutputDir>
            <arguments>-copy-constructor</arguments>
            <extension>true</extension>
        </configuration>
    </plugin>
Теги:
maven
jaxb
xsd

2 ответа

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

Похоже, что файл package-info.java (который содержит аннотацию @XmlSchema), который был сгенерирован вместе с другими файлами модели из XML-схемы, не компилируется.

Обновить

Я запускаю OSGi и использую Java SE

Вы должны убедиться, что вы импортируете пакет javax.xml.bind в манифест. Их может быть ClassLoader проблемы с javax классов в OSGi средах.

  • 0
    Я не думаю, что это так. Файл класса для package-info.java генерируется в моей целевой директории.
  • 0
    @JustinWiseman - Вы работаете в среде Java SE, на сервере приложений или в среде OSGi?
Показать ещё 7 комментариев
0

Вы не сопоставляли свой пакет с пространством имен " http://www.w3.org/2001/XMLSchema ". Чтобы сделать это, сделайте свой заголовок следующим образом:

<schema
  xmlns=...
  xmlns:po=....
  targetNamespace="http://www.w3.org/2001/XMLSchema"
>

Кроме того, добавьте эту аннотацию в свой класс:

@javax.xml.bind.annotation.XmlSchema (namespace = "http://www.w3.org/2001/XMLSchema")

Дополнительные сведения о XmlSchema см. В следующих документах: http://docs.oracle.com/javase/7/docs/api/javax/xml/bind/annotation/XmlSchema.html.

  • 0
    Я не понимаю Эта ссылка liquid-technologies.com/Tutorials/XmlSchemas/…, кажется, указывает, что targetNamespace не используется, как вы думаете. «В принципе пространство имен не имеет смысла, но некоторые компании использовали URL-адрес, где хранится схема, в качестве targetNamespace, и поэтому некоторые анализаторы XML будут использовать его в качестве пути подсказки для схемы, например: targetNamespace =" microsoft.com/CommonTypes .xsd ", но следующее будет точно так же, как и targetNamespace =" my-common-types "."

Ещё вопросы

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