我想做的是将端点地址和服务版本的配置分离到.properties文件或任何文件中。由于,端点在各种环境中会有所不同,例如UAT和PRODUCTION环境。此外,服务提供商通过使用命名约定(如ABCDEF_10_4)来控制服务/消息版本,ABCDEF是服务的名称,10.4是发布版本。我们只是一个服务消费者,所以我们不能在服务器端更改任何内容。
我正在寻找的是利用类似的东西的方法
<wsdl:operation name="service1">
<soap:operation soapAction="**${endpointurl}/${msgname}**" />
<wsdl:input>
<soap:body use="literal" />
<soap:header use="literal" message="tns:MessageHeader" part="session" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
<soap:header use="literal" message="tns:MessageHeader" part="session" />
</wsdl:output>
</wsdl:operation>
<wsdl:service name="**${servicename}**">
<wsdl:port binding="tns:ServiceBinding" name="ServicePort">
<soap:address location="**${endpointurl}**" />
</wsdl:port>
</wsdl:service>
我可以在名称中指定这些值:值对,类似于这样的.properties文件
endpointurl=http://xxx.xxx.xxx.xxx:10000
msgname=ABCDEF_10_4
servicename=myService
问题是,我不想每次服务提供商发布新版本的服务时都更改wsdl,而且我和我的团队只需在一个地方管理服务版本会更容易。
此外,当我们在UAT/DEV/PROD/TEST环境上部署应用程序时,我们不需要每次都对wsdl进行任何更改,也不需要为每个环境都有许多wsdl文件。
我们正在使用maven cxf代码生成插件来生成客户端存根。
有什么想法或可能的方法可以做类似的事情吗?
好吧,在谷歌周围搜索了3-4个小时后,我找到了答案,并认为我应该为社区做出贡献。
首先,我创建了一个新的概要文件,并使用maven资源插件过滤来从.properties文件替换wsdl中的${param},并将替换的资源复制到目标文件夹。
然后,在该概要文件中,我使用cxf-codegen插件从生成的wsdl生成Web服务客户端。
就是这样:)