У меня есть файл 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>
Похоже, что файл package-info.java (который содержит аннотацию @XmlSchema
), который был сгенерирован вместе с другими файлами модели из XML-схемы, не компилируется.
Я запускаю OSGi и использую Java SE
Вы должны убедиться, что вы импортируете пакет javax.xml.bind
в манифест. Их может быть ClassLoader
проблемы с javax
классов в OSGi средах.
Вы не сопоставляли свой пакет с пространством имен " 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.