Spring属性占位符不在jaxws中解析:client(cxf)address property

时间:2015-12-01 04:52:15

标签: spring spring-mvc cxf jax-ws spring-cxf

Environment:

    Spring MVC : 4.1.7.RELEASE
    CXF: 3.0.0
    java: 1.8

web.xml --- loads appContext.xml (spring cofigs) & cxfContext.xml (configs for cxf)

spring-servlet.xml --- loading the spring mvc configs.

我正在使用以下方式加载属性文件。

@Configuration

    @PropertySource(value = { "classpath:config.properties" })
    public class Configuration {
        @Bean
        public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
            return new PropertySourcesPlaceholderConfigurer();
        }
    }

属性正在得到解决,除了一种情况外没有问题。

我正在使用CXF进行网络服务,并且在使用"${addressVal}"时,地址属性无法解析。除了"jaxws:client"之外,xml中的所有其他属性都是gettign加载的。

<jaxws:client id="port"
        serviceClass="com.service.Myclass"
        address="${addressVal}" />
  1. 问题出在哪里。我做错了什么。

  2. servlet上下文/应用程序上下文加载问题?

  3. 请建议。

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。可悲的是还没有找到解决方案。但是,对于发现此问题的任何人来说,解决方法是使用JaxWsProxyFactoryBean。

示例:

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schema/jaxws.xsd">
<bean id="client" class="demo.spring.service.HelloWorld" factory-bean="clientFactory" factory-method="create"/>
<bean id="clientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
    <property name="serviceClass" value="demo.spring.service.HelloWorld"/>
    <property name="address" value="${some.property.value}"/>
</bean>

这不是很好,因为你必须注入工厂,调用create()和强制转换,但至少它是有效的。

@Autowired
@Qualifier("clientFactory")
private JaxWsProxyFactoryBean factory;

public void callService() {
    HelloWorld helloWorld = (demo.spring.service.HelloWorld)factory.create();
}

您还可以将以下内容添加到spring配置中以创建特定的bean,但这对我不起作用。试图注入该bean失败,这就是我选择上述方法的原因。

<bean id="client" class="demo.spring.service.HelloWorld" factory-bean="clientFactory" factory-method="create"/>

另请参阅页面底部的http://cxf.apache.org/docs/writing-a-service-with-spring.html