我將Spring 2.5升級到4.2。 問題出在一個屬性類型爲org.springframework.core.io.ClassPathResource
的bean上。資源值在xml中定義爲p:location="classpath:/<the resource path>"
春季2.5到4.2升級問題 - BeanWrapperImpl
這工作完美,bean屬性已填充資源。但在4.2中,這個價值沒有被設定。
所以我調試了代碼,發現類org.springframework.beans.BeanWrapperImpl
正在操縱該值並從Spring 2.5中刪除實際值的classpath:
字符串。
但是4.2中的情況並非如此,並且org.springframework.beans.BeanWrapperImpl
類沒有修改導致spring未找到資源的值。
任何人都面臨類似的情況?你應用了什麼解決方案?
謝謝, Hanumant
EDIT 1:代碼示例
彈簧配置文件
<bean class="com.test.sample.TestBean" id="testBean"
p:schemaLocation="classpath:/com/test/sample/Excalibur_combined.xsd" />
TestBean.java
public class TestBean {
private ClassPathResource schemaLocation;
public ClassPathResource getSchemaLocation() {
return schemaLocation;
}
public void setSchemaLocation(ClassPathResource schemaLocation) {
this.schemaLocation = schemaLocation;
}
}
App.java
public class App {
public static void main(String[] args) {
ApplicationContext ap = new ClassPathXmlApplicationContext("classpath:/com/test/sample/spring-config.xml");
TestBean tb = (TestBean) ap.getBean("testBean");
try {
URL url = tb.getSchemaLocation().getURL();
System.out.println(url);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
錯誤消息
INFO: Loading XML bean definitions from class path resource
[com/test/sample/spring-config.xml] java.io.FileNotFoundException:
class path resource
[classpath:/com/test/sample/Excalibur_combined.xsd] cannot be resolved
to URL because it does not exist at
org.springframework.core.io.ClassPathResource.getURL(ClassPathResource.java:187)> at com.test.sample.App.main(App.java:20)
但是如果我刪除bean定義它的工作classpath:
。
那麼classpth:
是否需要在bean定義的xml文件中?爲什麼它在Spring 2.5中工作正常?
請將實際配置添加到您的班級,而不是片段。 –
@ M.Deinum,我修改了原始問題,代碼爲 – hanumant
對於初學者來說,它應該是一個'Resource'而不是特定的類型。如果它不能被加載,那是因爲它不存在於那個位置(這是異常告訴你的)。所以我猜想其他結構也會發生變化(也許你不僅僅是升級spring,還有其他框架/工具)。 –