java - WSDL URL 的 Maven 过滤

标签 java maven maven-resources-plugin

我正在尝试使用资源过滤来生成 WSDL 的 SOAP 地址。但不知何故它不起作用。我将插件和资源元素编写为:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <inherited>false</inherited>
    <executions>
        <execution>
            <id>process-urls</id>
            <phase>clean</phase>
            <goals>
                <goal>resources</goal>
            </goals>
            <inherited>false</inherited>
            <configuration>
                <delimiters>
                    <delimiter>${*}</delimiter>
                </delimiters>
                <filters>
                    <filter>src/main/resources/PO/WSDLFiles/ProcessOrder.wsdl</filter>
                    <filter>src/main/resources/DAC/WSDLFiles/InternalRequest.wsdl</filter>
                </filters>
                <overwrite>true</overwrite>
            </configuration>
        </execution>
    </executions>
</plugin>

<resources>
    <resource>
        <directory>src/main/resources/</directory>
        <includes>
            <include>**/*</include>
        </includes>
        <filtering>true</filtering>
    </resource>
</resources>

我在 ${protocol}${fullhostname}${port} 下定义了一些配置文件值

我想要修改的 WSDL 标记如下:

<service name="ProcessOrderService">
    <port name="ProcessOrderSoapHttpPort" binding="tns:ProcessOrderSoapHttpBinding">
        <soap:address location="${protocol}://${fullhostname}:${port}/PO/services/ProcessOrderSoapHttpPort"/>
    </port>
</service>

当我运行我的 pom 文件(该文件也有一个 CXF 插件来生成类)时,我看到 JAVA 对象中的 URL 是通过以下方式生成的:

${协议(protocol)}://${fullhostname}:${端口}/PO/services/ProcessOrderSoapHttpPort

它只是按原样拾取字符串,不应用任何值。你能告诉我我做错了什么吗?我猜测 WSDL 属性中的“”导致了问题,但我可能是错的。

最佳答案

我假设 Maven 资源插件按预期工作。如果使用 Debug模式mvn clean install -X您会发现一些附加信息,例如:

[DEBUG] file ProcessOrder.wsdl has a filtered file extension
[DEBUG] filtering /work/source/stackoverflow/wsdl-filtering/src/main/resources/PO/WSDLFiles/ProcessOrder.wsdl to /work/source/stackoverflow/wsdl-filtering/target/classes/PO/WSDLFiles/ProcessOrder.wsdl
[DEBUG] no use filter components

如果没有<outputDirectory>指定默认输出文件夹将为 ${project.build.outputDirectory} (目标/类别)。

在这种情况下,只需在 CXF 插件中指定 wsdl 文件位置:

<plugin>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-codegen-plugin</artifactId>
    <version>${cxf.version}</version>
    <executions>
        <execution>
            <id>generate-sources</id>
            <phase>generate-sources</phase>
            <configuration>
                <sourceRoot>${project.build.directory}/generated-sources/cxf</sourceRoot>
                <wsdlOptions>
                    <wsdlOption>
                        <wsdl>${project.build.outputDirectory}/PO/WSDLFiles/ProcessOrder.wsdl</wsdl>
                    </wsdlOption>
                </wsdlOptions>
            </configuration>
            <goals>
                <goal>wsdl2java</goal>
            </goals>
        </execution>
    </executions>
</plugin>

不要使用同一目录,因为您将丢失原始文件的内容。结果将是一个空的 wsdl 文件。

此外,我建议修复资源插件配置。您使用<filters>用于定义包含键值对的属性文件。使用<resources><include>相反,就像您在构建部分中所做的那样。

关于java - WSDL URL 的 Maven 过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59564870/

相关文章:

java - 用于文本挖掘或聊天机器人的 NLP

java - 我应该使用哪个 Jersey 版本?

java - 如何模拟 Maven 插件环境和/或项目配置

java - 有没有办法禁用本地maven存储库?

java - SharedArray 死锁和引发条件

java - 如何在 Eclipse 中使用 UML 符号可视化 Java 代码?

java - 为什么 maven-resources-plugin 忽略我的字符集编码设置?

使用配置文件属性过滤 Maven 资源

android-maven-plugin 和资源过滤

java - ContentPane 在 Eclipse IDE 中的设计时不会调整大小