Web services 使用CXF的WSDL中的soapaction

Web services 使用CXF的WSDL中的soapaction,web-services,soap,action,cxf,operation,Web Services,Soap,Action,Cxf,Operation,我正在使用CXF开发Web服务。我使用HTTP绑定,因此对于这种类型的传输,soapaction是必需的 问题是我想为测试服务器和生产服务器部署相同的应用程序。我希望在不重建应用程序或保留外部WSDL文件的情况下执行此操作,这将在维护列表中添加更多内容 我在位置上也有同样的问题,但这个问题很难解决。我在端点配置中使用publishedEndpointUrl来设置适当的值。该值在应用程序初始化期间从外部属性文件中检索,我将该文件放在类路径tomcat/common/classes上 类路径:ws

我正在使用CXF开发Web服务。我使用HTTP绑定,因此对于这种类型的传输,soapaction是必需的

问题是我想为测试服务器和生产服务器部署相同的应用程序。我希望在不重建应用程序或保留外部WSDL文件的情况下执行此操作,这将在维护列表中添加更多内容

我在位置上也有同样的问题,但这个问题很难解决。我在端点配置中使用publishedEndpointUrl来设置适当的值。该值在应用程序初始化期间从外部属性文件中检索,我将该文件放在类路径tomcat/common/classes上


类路径:ws.properties
我希望为soapaction实现相同的功能。此属性的值不应为相对URI。因此,对于测试,它应该是:

<soap:operation soapAction="https://test.example.org/dsSOAP/operation1" />

用于生产

<soap:operation soapAction="https://example.org/dsSOAP/operation1" />


你知道如何做到这一点吗?

你不需要指定绝对URL,也不需要指定URL。“操作1”就足够了。参见以下官方示例:


将soap操作与实例正在运行的环境链接不是“最佳实践”。

为什么您的测试和生产服务需要不同的soap操作?如果两个服务使用相同的WSDL,您可以定义一次soapAction,并对测试和生产使用相同的soap操作。@YogeshChawla如果我没有因为文档而出错,那么属性
soapAcion
需要使用绝对url。因此,我无法将其放在相关的
dsSOAP/operation 1
中。如果测试和生产的值相同,那么客户端可能会开始调用生产服务器而不是测试服务器。嗨,Aleksander,它应该是一个完整的非相对URI,但不需要描述被调用的实际物理地址。两种平台都可以使用“”。否则,每个平台都需要唯一的WSDL。我不希望每个环境都有不同的WSDL。这就是为什么我在寻找一种使
soapAction
变量的方法。我知道这个属性不是端点位置,但是我觉得在测试环境中使用ProdcutionURI不舒服。对我来说没什么区别。然而,据我所知,
soapAction
正被用于路由。因此,对于其他人来说,这可能很重要。对于路由消息,我将看一看WS-Addressing:然而,您可能正在处理使用SoapAction进行路由的现有实现。
<soap:operation soapAction="https://example.org/dsSOAP/operation1" />