【问题标题】:How to inject a value from application.properties into @PayloadRoot namespace-value如何将 application.properties 中的值注入 @PayloadRoot 命名空间值
【发布时间】:2017-04-12 08:19:05
【问题描述】:

在我的项目中,有必要将 application.properties 文件中的值(依赖于配置文件)注入到 @PayloadRoot的命名空间变量的端点类中> 注释。

问题:命名空间值必须是一个常量,并且在春天我不能将值注入到最终变量中。 我找到一个建议以这种方式注入:

@PayloadRoot(namespace = "${my.namespace}", localPart = "getMyRequest")
@ResponsePayload
public JAXBElement<MyResult> myMethod(@RequestPayload JAXBElement<MyInput> request) {

但是......它不起作用。 有人有可行的解决方案吗?

谢谢...

【问题讨论】:

    标签: java spring web-services spring-boot spring-ws


    【解决方案1】:

    您可以执行以下操作之一:

    1) 获得适当的值后使用反射(但需要确保在端点映射发生之前设置该值):example here

    2) 扩展类 PayloadRootAnnotationMethodEndpointMapping 并在方法 getLookupKeysForMethod 中使用自定义方法 getQNameFromAnnotation,您将在其中注入命名空间的正确值。

    private QName getQNameFromAnnotation(PayloadRoot payloadRoot) {
        return new QName(/*INJECT YOURNAMESPACE HERE*/, payloadRoot.localPart());
    }
    

    【讨论】:

    • 您好 VirtualTroll,感谢您的合格回答。我的问题是,我的 Web 服务运行了三台服务器(开发、测试、生产)。每个不同的 web 服务都需要一个自己的 wsdl 和一个单独的地址位置(指向正确的服务器)。这是基本事实。 wsdl 文件中的命名空间在三个 wsdl 文件中可以相同。因此在 PayloadRoot 注释中不需要与配置文件相关的命名空间值。这解决了我的问题。但很高兴知道,如果它必须依赖于配置文件,还有另一种解决方案。
    猜你喜欢
    • 1970-01-01
    • 2021-07-25
    • 2019-03-18
    • 2020-11-16
    • 2016-12-03
    • 2016-04-10
    • 2020-09-10
    • 2016-04-28
    • 2017-07-12
    相关资源
    最近更新 更多