com.octo.captcha + PropertyPlaceholderConfigurer valueSeparator冲突

时间:2014-08-13 08:03:57

标签: java spring maven

我有一个非常奇怪的问题。我会尝试简化它以更好的方式解释。 我有一个项目,一切正常,我使用以下bean的应用程序上下文:

<bean id="props" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
   <property name="locations">
      <list>
         <value>/WEB-INF/oxygen.properties</value>
      </list>
   </property>
   <property name="ignoreUnresolvablePlaceholders" value="true" />
</bean>

然后我声明像

这样的bean
<bean id="authSiteParamsBean" class="comtech.swm.domain.index.AuthSiteParamsBean">
   <constructor-arg index="0" value="${swc.login:oxygen}" />
   <constructor-arg index="1" value="${swc.password:oxygen}" />
   <constructor-arg index="2" value="${swc.proxyHost:8080}" />
   <constructor-arg index="3" value="${swc.endpoints:smth}" />
</bean>

一切都很好。但是,如果我将这些行添加到pom.xml

<dependency>
   <groupId>com.octo.captcha</groupId>
   <artifactId>jcaptcha-all</artifactId>
   <version>1.0-RC6</version>
</dependency>

值分隔符停止工作!因此,当一切正常时,我要么从.properties文件或默认值获取值。但是有了这种依赖关系,我得到了像&#34; $ {swc.login:oxygen}&#34;这样的字符串。所以,我尝试修改我的属性bean并明确声明属性valueSeparator:

<bean id="props" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
   <property name="locations">
      <list>
         <value>/WEB-INF/oxygen.properties</value>
      </list>
   </property>
   <property name="ignoreUnresolvablePlaceholders" value="true" />
   <property name="valueSeparator" value=":" />
</bean>

我能得到什么?

  

严重:上下文初始化失败   org.springframework.beans.factory.BeanCreationException:错误   创建名称为&#39;道具&#39;在ServletContext资源中定义   [/WEB-INF/appContext.xml]:设置属性值时出错;嵌套   异常是org.springframework.beans.NotWritablePropertyException:   无效的属性&#39; valueSeparator&#39;豆类   [org.springframework.beans.factory.config.PropertyPlaceholderConfigurer]:   Bean属性&#39; valueSeparator&#39;不可写或无效   二传法。 setter的参数类型是否与返回匹配   吸气剂的类型?引起:   org.springframework.beans.NotWritablePropertyException:无效   property&#39; valueSeparator&#39;豆类   [org.springframework.beans.factory.config.PropertyPlaceholderConfigurer]:   Bean属性&#39; valueSeparator&#39;不可写或无效   二传法。 setter的参数类型是否与返回匹配   吸气剂的类型?

请帮忙!我想继续使用这个验证码和默认值。

1 个答案:

答案 0 :(得分:0)

我找到了确切的原因和解决方案。我通过IDEA构建了依赖树,并发现captcha库依赖于旧的spring框架(2.0),它不支持属性的默认值。所以我现在只需在pom.xml中使用它,它就完美了:

<dependency>
   <groupId>com.octo.captcha</groupId>
   <artifactId>jcaptcha-all</artifactId>
   <version>1.0-RC6</version>
   <exclusions>
      <exclusion>
         <groupId>org.springframework</groupId>
         <artifactId>spring</artifactId>
      </exclusion>
   </exclusions>
</dependency>

enter image description here

相关问题