我试图将javax.persistence.Id作为注释添加到文件中,并通过Maven JAXB插件生成JAXB对象。但是,我遇到了类,而不是javax.persistence.id的异常,我确实确保javax.persistence包含在maven依赖项中,并且我看到maven将其作为依赖项,但是当我运行jaxb插件时,它将无法工作。
<xsd:complexType name="MyTable"> <xsd:sequence> <xsd:element name="id" type="xsd:int"/> </xsd:sequence> </xsd:complexType><jaxb:bindings version="2.1"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:annox="http://annox.dev.java.net" jaxb:extensionBindingPrefixes="annox">
<jaxb:bindings schemaLocation="mytable.xsd">
<jaxb:bindings node="xs:complexType[@name='MyTable']/xs:sequence/xs:element[@name='id']">
<annox:annotate target="field">
<annox:annotate annox:class="javax.persistence.Id"/>
</annox:annotate>
</jaxb:bindings>
</jaxb:bindings>
然而,当我运行Maven-->Generate-Sources时,我会得到这个错误
Caused by: org.jvnet.annox.parser.AnnotationElementParseException: Could not parse the annotation element.
at org.jvnet.annox.parser.XAnnotationParser.parse(XAnnotationParser.java:90)
at org.jvnet.jaxb2_commons.plugin.annotate.AnnotatePlugin.annotate(AnnotatePlugin.java:387)
... 31 more
Caused by: org.jvnet.annox.annotation.AnnotationClassNotFoundException: Annotation class [javax.persistence.Id] could not be found.
... 33 more
Caused by: java.lang.ClassNotFoundException: javax.persistence.Id如果我简单地将@Id注释添加到项目中的任何java类中,那么我可以添加,并且我可以看到javax.persistence.Id没有问题地被导入。当我使用maven & binding.xjb时,出了什么问题?我是否没有正确地定义注释?非常感谢!
发布于 2013-06-17 11:16:55
我想这也是我遇到的问题:您将javax.persistence添加为Maven依赖项,而不是将其作为依赖项添加到JAXB插件中:
添加如下内容(如果使用Hibernate):
</project>
...
<build>
<plugins>
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>${maven-jaxb2-plugin.version}</version>
<executions>
...
</executions>
<configuration>
...
</configuration>
<dependencies>
<!-- Hibernate Persistence Annotations -->
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.0-api</artifactId>
<version>${hibernate-jpa-2.0-api.version}</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
...
</project>我有一个类似的问题,并能够解决这个问题。在下面的示例中,请注意,我将注释放入XSD,而不是XJB文件,但是Maven配置应该类似。
这是我的XSD:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="2.1"
elementFormDefault="qualified" targetNamespace="http://www.gl-group.com/ewelding/schemas"
xmlns:ew="http://www.companyname.com/project/schemas"
xmlns:xmime="http://www.w3.org/2005/05/xmlmime" jaxb:extensionBindingPrefixes="annox"
xmlns:annox="http://annox.dev.java.net"
xmlns:ja="http://annox.dev.java.net/javax.xml.bind.annotation"
xmlns:jpa="http://annox.dev.java.net/javax.persistence"
xmlns:solrj="http://annox.dev.java.net/org.apache.solr.client.solrj.beans"
xmlns:jackson="http://annox.dev.java.net/com.fasterxml.jackson.annotation">
...
<xs:element name="Certificate">
<xs:annotation>
<xs:appinfo>
<annox:annotate>
<ja:XmlAccessorType value="NONE"/>
<jpa:Entity name="Certificate"/>
<solrj:Field value="testByOrderOf"/>
<jackson:JsonFormat shape="STRING" pattern="yyyy-MM-dd'T'HH:mm:ss'Z'" timezone="GMT"/>
</annox:annotate>
</xs:appinfo>
</xs:annotation>
...
<xs:element ref="ew:dateOfBirth">
<xs:annotation>
<xs:appinfo>
<annox:annotate target="field">
<solrj:Field value="dateOfBirth"/>
<jackson:JsonFormat shape="STRING" pattern="yyyy-MM-dd'T'HH:mm:ss'Z'" timezone="GMT"/>
</annox:annotate>
</xs:appinfo>
</xs:annotation>
</xs:element>
...
</xs:element>以下是我的pom.xml中的相关章节
...
<properties>
...
<maven-jaxb2-plugin.version>0.8.3</maven-jaxb2-plugin.version>
<jaxb2-basics.version>0.6.4</jaxb2-basics.version>
<jaxb2-value-constructor.version>3.0</jaxb2-value-constructor.version>
<solr-solrj.version>4.3.0</solr-solrj.version>
<jackson.version>2.2.2</jackson.version>
<hibernate-jpa-2.0-api.version>1.0.1.Final</hibernate-jpa-2.0-api.version>
...
</properties>
...
<build>
<plugins>
...
<!-- Generate Java sources from XSD schema files -->
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>${maven-jaxb2-plugin.version}</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<extension>true</extension>
<args>
<arg>-Xannotate</arg>
<arg>-Xvalue-constructor</arg>
<arg>-Xinheritance</arg>
<arg>-enableIntrospection</arg>
</args>
<!-- Include our schema -->
<schemaDirectory>src/main/resources</schemaDirectory>
<schemaIncludes>
<include>certificate.xsd</include>
</schemaIncludes>
<bindingIncludes>
<bindings>certificate.xjb</bindings>
</bindingIncludes>
<generateDirectory>src/main/java</generateDirectory>
<generatePackage>com.company.project.generated</generatePackage>
<plugins>
<plugin>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics</artifactId>
<version>${jaxb2-basics.version}</version>
</plugin>
<plugin>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics-annotate</artifactId>
<version>${jaxb2-basics.version}</version>
</plugin>
<plugin>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-value-constructor</artifactId>
<version>${jaxb2-value-constructor.version}</version>
</plugin>
</plugins>
</configuration>
<dependencies>
<!-- SolrJ - only needed for the @Field annotation -->
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>${solr-solrj.version}</version>
</dependency>
<!-- Jackson2 Annotations -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
<!-- Hibernate Persistence Annotations -->
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.0-api</artifactId>
<version>${hibernate-jpa-2.0-api.version}</version>
</dependency>
</dependencies>
</plugin>
...
</plugins>
</build>我也有同样的例外,这个解决了它。请注意,我的示例将所有内容都放入XSD,而不是XJB.但是上面提到的依赖性也会对你有帮助。
https://stackoverflow.com/questions/15775094
复制相似问题