3

我有一个 xml 架构 (xsd) 文件,它位于一个 jar 文件中,该文件将包含在运行时类路径中。在我的 Wsdl 中,我需要通过在 jar 文件中提供位置来导入模式。

我尝试使用 XML 目录,但我使用的服务器(websphere)没有解析 xml 目录引用。

4

3 回答 3

5

我们遇到了类似的问题,其中包含 XSD 的 JAR 被添加到类路径中,我们必须使用 schemaLocation 从 WSDL 引用它。我们的项目是基于 maven 的,所以我们使用 maven-dependency-plugin 的 unpack 目标在编译前将文件下载到资源文件夹。

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
    <execution>
        <id>unpack</id>
        <phase>generate-sources</phase>
        <goals>
            <goal>unpack</goal>
        </goals>
        <configuration>
            <artifactItems>
                <artifactItem>
                    <groupId>group</groupId>
                    <artifactId>artifact</artifactId>
                    <version>${version}</version>
                    <outputDirectory>${basedir}/src/main/resources/xsd</outputDirectory>
                    <includes>ToDownload.xsd</includes>
                </artifactItem>
            </artifactItems>
        </configuration>
    </execution>
</executions>

这会导致 xsd 下载到名为 xsd 的文件夹中的资源目录中。
在 WSDLschemaLocation="xsd/ToDownload.xsd". 这确保在编译期间 WSDL 将引用已下载并在本地可用的 XSD。

于 2017-03-29T08:14:01.377 回答
3

jar 文件中包含的任何文件都有自己的 URL。例如,如果您的 jar 文件绝对路径名(在 Windows 上):

C:\project\jars\somestuff.jar

以及该 jar 中包含的架构的路径名(相对于 jar 的根目录):

/xml/schemas/myschema.xsd

那么架构文件的完整 URL 将是:

jar:file:/C:/project/jars/somestuff.jar!/xml/schemas/myschema.xsd

此外,如果您的 XML 模式包含对该 jar 中的其他模式的引用,您可以使用相对路径名(相对于给定模式)。

例如,假设myschema.xsd导入在该 jar 中找到的另一个模式:

/xml/schemas/general/types.xsd

然后,<xs:import>可以像这样指定元素:

<xs:import namespace="http://www.company.org/general/types"
           schemaLocation="general/types.xsd"/>

这将导致types.xsd从同一个 jar 文件加载。

于 2013-07-17T16:29:00.047 回答
0

您不能将架构作为文件访问。您需要以流的形式访问它。

Schema schema = schemaFactory.newSchema(new StreamSource(new InputStreamReader(getClass().getResourceAsStream("/xml/schemas/general/types.xsd"))));
于 2020-01-13T06:59:09.063 回答