Java SOAP Web应用程序。我有几种查询的服务,我必须根据环境(测试,产品)来区分其中之一。我认为将常见的WSDL放在一起并为需要差异化的服务创建两个配置文件是逻辑的。不幸的是,我无法在运行时编程更改WSDL_Location。所以我写了(简化XML为yaml,并删除诸如<phase>generate-sources</phase>
之类的明显元素):
project:
build:
plugins:
plugin:
executions:
execution:
id: "generate-common-sources"
configuration:
wsdlOptions:
wsdlOption:
-
wsdl: "${project.basedir}/src/main/resources/wsdl/Service1.wsdl"
wsdlLocation: "/wsdl/Service1.wsdl"
-
wsdl: "${project.basedir}/src/main/resources/wsdl/Service2.wsdl"
wsdlLocation: "/wsdl/Service2.wsdl"
profiles:
profile:
id: "env-test"
build:
plugins:
plugin:
executions:
execution:
id: "generate-test-sources"
configuration:
wsdlOptions:
wsdlOption:
wsdl: "${project.basedir}/src/main/resources/wsdl/Service3-test.wsdl"
wsdlLocation: "/wsdl/Service3-test.wsdl"
profile:
id: "env-prod"
build:
# Duplicate env-test here
但这不起作用:Service1和Service2使用完整的路径WSDL_Location生成,该路径显然在服务器上失败。为什么?
我在许多诅咒之后发现的工作配置是:
project:
build:
plugins:
plugin:
executions:
execution:
id: "generate-common-sources"
configuration:
wsdlOptions: # Keep this empty!
profiles:
profile:
id: "env-test"
build:
plugins:
plugin:
executions:
execution:
id: "generate-test-sources"
configuration:
wsdlOptions:
wsdlOption:
-
wsdl: "${project.basedir}/src/main/resources/wsdl/Service1.wsdl"
wsdlLocation: "/wsdl/Service1.wsdl"
-
wsdl: "${project.basedir}/src/main/resources/wsdl/Service2.wsdl"
wsdlLocation: "/wsdl/Service2.wsdl"
-
wsdl: "${project.basedir}/src/main/resources/wsdl/Service3-test.wsdl"
wsdlLocation: "/wsdl/Service3-test.wsdl"
profile:
id: "env-prod"
build:
# Duplicate env-test here
仍然不清楚为什么我的第一种方法不起作用。