Spring PropertyPlaceHolder问题

时间:2015-06-26 01:07:43

标签: java spring

我正在使用Spring 4.1.5.RELEASE。在上下文文件中加载而不是从属性文件中的条目解析占位符,它只是直接将占位符条目插入到bean中。

上下文文件

<context:property-placeholder 
    location="classpath*:META-INF/spring/*.properties,classpath*:conf/*.properties" 
    ignore-resource-not-found="true"/>
 <jaxws:client id="imiClient"
              serviceClass="com.imi.ws.mail.MailPortType"
              address="${imi.ws.fulfillment.service}">
    <jaxws:inInterceptors>
        <bean class="org.apache.cxf.interceptor.LoggingInInterceptor" />
    </jaxws:inInterceptors>
    <jaxws:outInterceptors>
        <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
    </jaxws:outInterceptors>
</jaxws:client>
<http:conduit name="*.http-conduit">
    <http:tlsClientParameters disableCNCheck="true"/>
</http:conduit>

属性文件

imi.ws.fulfillment.service=http://localhost:8076/Mail/MailWebService

无论何时我在创建的bean上调用web方法,我都会得到以下例外

Caused by: java.net.URISyntaxException: Illegal character in path at index 1: ${imi.ws.fulfillment.service}
at java.net.URI$Parser.fail(URI.java:2848)
at java.net.URI$Parser.checkChars(URI.java:3021)
at java.net.URI$Parser.parseHierarchical(URI.java:3105)
at java.net.URI$Parser.parse(URI.java:3063)
at java.net.URI.<init>(URI.java:588)
at org.apache.cxf.transport.http.HTTPConduit.setupURI(HTTPConduit.java:664)
at org.apache.cxf.transport.http.HTTPConduit.prepare(HTTPConduit.java:458)
... 45 more

占位符$ {imi.ws.fulfillment.service}未解决。我尝试调试应用程序,并意识到属性文件确实是加载器,所有其他条目都可用。

我使用 @Value 注释,我得到了预期的结果。 任何帮助将受到高度赞赏。提前谢谢。

更新

带占位符的其他bean声明已注入其值。我能够通过调试应用程序来验证这一点。仅未注入 imiClient bean实例。

<bean id="encryptorDecryptor" class="com.mail.util.EncryptorDecryptor" factory-method="getInstance">
    <constructor-arg index="0" type="String" value="${encryption.cert.location}"/>
    <constructor-arg index="1" type="String" value="${encryption.cert.duration}"/>
    <constructor-arg index="2" type="String" value="${props}"/>
</bean>

属性文件

encryption.cert.location=${file.basedir}\\EncryptionCert\\enc.cert
encryption.cert.duration=10
props=META-INF/spring/mail.properties

1 个答案:

答案 0 :(得分:2)

我终于解决了这个问题。显然,我的类路径上有几个弹簧罐,应用程序没有使用,所以我做了清理和taardah,正确的值被注入而不是占位符。