【问题标题】:Making separate schema compilation work with JAXB 2.2使用 JAXB 2.2 进行单独的模式编译
【发布时间】: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 模型)。

有什么提示吗?

【问题讨论】:

    标签: java maven jaxb xsd


    【解决方案1】:

    因为两个 xsd 文件都在同一个目录中,所以您必须在 model-b.xsd 中添加 schemaLocation,如下所示:

    <?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" schemaLocation="model-a.xsd"/>
    
      <xs:element name="PartRequest" type="model-a:ItemRequest" />
    </xs:schema>
    

    如果无法修改文件,jaxb 插件可以读取 xsd 文件的位置from a catalog。但是我还没有设法使它与目录一起使用。

    【讨论】:

    • Alex,我知道这个解决方案,但它实际上与我想要的相反。我不想提供架构位置,但只使用命名空间。更大的问题是我使用这个星座是wsimport,情况更糟。实际问题在JAXB-514JAX_WS-368 中进行了描述。是的,我正在使用目录作为wsimport 的工作区,但并不满意。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-14
    相关资源
    最近更新 更多