我正在使用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
答案 0 :(得分:2)
我终于解决了这个问题。显然,我的类路径上有几个弹簧罐,应用程序没有使用,所以我做了清理和taardah,正确的值被注入而不是占位符。