不同目录下的XSD和WSDL

8

我在工作中使用了jaxws-maven-plugin来进行代码生成。我有两个项目,一个是“common”,另一个是“client”。它们的结构大致如下:

app/
  common/
    resource/
      some.xsd
  client/
    resource/
      some.wsdl

如何使用"common"项目中的xsd,在"client"项目中从wsdl生成类?

pom.xml:

            <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>jaxws-maven-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>wsimport</goal>
                    </goals>
                    <configuration>
                        <verbose>true</verbose>
                        <bindingFiles>
                            <bindingFile>${project.parent.basedir}/common/resource/some.xsd</bindingFile>
                        </bindingFiles>
                        <wsdlFiles>
                            <wsdlFile>/resource/some.wsdl</wsdlFile>
                        </wsdlFiles>
                    </configuration>
                </execution>
            </executions>
        </plugin>
1个回答

6
首先,你应该遵循Maven的约定,使用 src/main/resources/ 目录来存放资源。
在这样做之后,你可以使用 maven-dependency-plugin:unpack-dependencies 来解压缩 common JAR 文件来访问 some.xsd
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.stackoverflow.Q13155047</groupId>
        <artifactId>app</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>client</artifactId>

    <name>${project.artifactId}-${project.version}</name>

    <properties>
        <schema.location>${project.build.directory}/schemas</schema.location>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.stackoverflow.Q13155047</groupId>
            <artifactId>common</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.5.1</version>
                <executions>
                    <execution>
                        <id>unpack-dependencies</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>unpack-dependencies</goal>
                        </goals>
                        <configuration>
                            <includes>**/*.xsd</includes>
                            <outputDirectory>${schema.location}</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>jaxws-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>wsimport</goal>
                        </goals>
                        <configuration>
                            <verbose>true</verbose>
                            <bindingDirectory>${schema.location}</bindingDirectory>
                            <bindingFiles>
                                <bindingFile>some.xsd</bindingFile>
                            </bindingFiles>
                            <wsdlDirectory>src/main/resources</wsdlDirectory>
                            <wsdlFiles>
                                <wsdlFile>some.wsdl</wsdlFile>
                            </wsdlFiles>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

jaxws-maven-plugin绑定到generate-sources阶段,因此在jaxws-maven-plugin之前添加maven-dependency-plugin并将其与相同的阶段结合使用,可以确保在应用wsimport目标之前解压缩所有内容。

确保<bindingDirectory/><wsdlDirectory/>是正确的。


如果*.xsd文件在另一个项目中,则应按照以下方式执行。永远不要使用相对路径访问其他项目。每个项目只能使用依赖机制访问其他资源。


谢谢!我只是试图通过所有相关路径。 - Anthony Tsivarev
2
根据此链接 - maven wsimport插件使用的默认位置是src/wsdl。我推断.wsdl文件不应该放在src/main/resources中。 https://jax-ws-commons.java.net/jaxws-maven-plugin/wsimport-mojo.html - RuntimeException
2
当您将文件解压缩到${schema.location}目录时,如何在WSDL中引用XSD?WSDL如何知道在哪里找到XSD? - Eric B.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接