我想在 Apache CXF 生成的 cade 中动态交换 webserive targetnamescpace(主机)。
为什么?每个客户都有自己的 wsdl 文件。
目前的情况是有一个项目,它依赖于托管在 serverX 上的 wsdl X。这意味着对于每个客户,都有一个带有特定 wsdl URL 的额外构建。wsdl 文件总是相同的,只是服务器发生了变化。
将构建一个胖 jar(jar-with-dependencies)并将其上传到我们的 nexus 服务器。
我们使用 Java 7 和 Maven 3 来构建我们的项目。
问题是在部署到 nexus 时,您无法更改已部署工件的名称。application-1.0-CUSTOMER.jar 将是一个不错的模式,但我没有找到解决该问题的方法,而且整个过程看起来也不是很干净。
webservice-.java 文件由 cxf-codegen-plugin 插件生成。我正在使用这个配置:
<!-- CXF wsdl2Java Generation -->
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>2.7.0</version>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<configuration>
<sourceRoot>${project.build.directory}/generated-sources/cxf/</sourceRoot>
<wsdlOptions>
<wsdlOption>
<wsdl>
http://trunk. ....
</wsdl>
<serviceName>ServiceName</serviceName>
<extraargs>
<extraarg>-impl</extraarg>
<extraarg>-verbose</extraarg>
<!-- override the namespace to have always identical package names -->
<extraarg>-p</extraarg>
<extraarg>de.packagename.wsdl</extraarg>
</extraargs>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
</plugin>
这里生成的java文件之一:
/**
* This class was generated by Apache CXF 2.7.0
* 2013-11-13T14:35:21.046+01:00
* Generated source version: 2.7.0
*
*/
@WebService(targetNamespace = "http://trunk...", name = "SomeName")
@XmlSeeAlso({ObjectFactory.class})
public interface SomeName {
...
}
我的想法是从该应用程序中删除整个 webservice-client 实现并将其放入另一个项目(一个项目一个客户) - 但是如何从原始项目调用 webservice?目前,原始项目使用一个接口以及一个模型类。
我知道通过使用带有变量的工件版本可以解决部署问题,但强烈建议不要这样做,至少在 maven 3 中是这样。