【发布时间】:2014-02-22 16:38:46
【问题描述】:
我正在拼命尝试使单独的模式编译与 JAXB 2.2 和 JAXB2 Maven 插件 0.8.3 一起工作。我关注了official documentation,但它并没有显示合适的 XSD 应该是什么样子。
请注意,剧集文件默认通过父级生成。
我有以下项目布局:
parent
|-- model-a
`-- model-b (depends on model-a)
model-a.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:net.sf.michael-o:model-a" xmlns:tns="urn:net.sf.michael-o:model-a"
elementFormDefault="qualified">
<xs:complexType name="ItemRequest">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="id" type="xs:NCName" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:schema>
来自 POM 的片段:
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<executions>
<execution>
<id>generate-model</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<schemaDirectory>src/xsd</schemaDirectory>
<generatePackage>net.sf.michaelo.model_a</generatePackage>
</configuration>
</execution>
</executions>
</plugin>
现在是model-b.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:net.sf.michael-o:model-b" xmlns:tns="urn:net.sf.michael-o:model-b"
elementFormDefault="qualified" xmlns:model-a="urn:net.sf.michael-o:model-a">
<xs:import namespace="urn:net.sf.michael-o:model-a" />
<xs:element name="PartRequest" type="model-a:ItemRequest" />
</xs:schema>
Eclipse 的 XML 目录已经输入了导入命名空间的 URI。
来自 POM 的片段:
<build>
<plugins>
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<executions>
<execution>
<id>generate-model</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<schemaDirectory>src/xsd</schemaDirectory>
<useDependenciesAsEpisodes>true</useDependenciesAsEpisodes>
<episodes>
<episode>
<groupId>net.sf.michael-o.jaxb-jaxws-testing</groupId>
<artifactId>jaxb-model-a</artifactId>
</episode>
</episodes>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>net.sf.michael-o.jaxb-jaxws-testing</groupId>
<artifactId>jaxb-model-a</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
不幸的是,这失败了:
[ERROR] Error while parsing schema(s).Location [ file:/D:/workspace-4.2/jaxb-jaxws-testing-parent/jaxb-model-b/src/xsd/model-b.xsd{8,62}].
org.xml.sax.SAXParseException; systemId: file:/D:/workspace-4.2/jaxb-jaxws-testing-parent/jaxb-model-b/src/xsd/model-b.xsd; lineNumber: 8; columnNumber: 62; src-resolve: Name "model-a:ItemRequest" kann nicht als "type definition"-Komponente aufgelöst werden.
事实很明显,model-a.xsd 不可用,但这难道不是拥有剧集文件而不是真正的模式文件的全部意义吗?通过提供原始文件使这很荒谬。这个问题也适用于wsimport,我想导入一个构建在单独 JAR 中的架构文件(JAXB 模型)。
有什么提示吗?
【问题讨论】: