Gangmax Blog

My Tip 55

使用Maven(2.0.9) + Spring(2.5.6) + JPA(hibernate-entitymanager3.3.2.GA)跑unit test的时候,发现问题。具体情况如下:

当运行“需要被注入EntityManager的类”对应的测试用例的时候,收到以下错误:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Caused by: java.lang.StackOverflowError
at java.lang.Character.toLowerCase(Character.java:4208)
at java.lang.Character.toLowerCase(Character.java:4175)
at java.lang.String.toLowerCase(String.java:2409)
at java.lang.String.toLowerCase(String.java:2497)
at org.apache.xerces.util.URI.setScheme(URI.java:908)
at org.apache.xerces.util.URI.initializeScheme(URI.java:576)
at org.apache.xerces.util.URI.initialize(URI.java:400)
at org.apache.xerces.util.URI.<init>(URI.java:211)
at org.apache.xerces.util.URI.<init>(URI.java:195)
at org.apache.xerces.impl.XMLEntityManager.expandSystemId(XMLEntityManager.java:1140)
at org.apache.xerces.impl.XMLEntityManager.resolveEntity(XMLEntityManager.java:581)
at org.apache.xerces.impl.xs.XMLSchemaLoader.xsdToXMLInputSource(XMLSchemaLoader.java:625)
at org.apache.xerces.impl.xs.XMLSchemaLoader.processJAXPSchemaSource(XMLSchemaLoader.java:580)
at org.apache.xerces.impl.xs.XMLSchemaLoader.loadSchema(XMLSchemaLoader.java:489)

先开始我以为是xml schema路径的问题,找了一会儿,没有结果。Google后有了进展

发现问题出在:该工程对应的pom.xml中没有指定xerces的版本,默认使用了2.0.2版本,而上述StackOverflowError错误正是该版本的一个bug。知道问题原因就好办了,在pom.xml加入以下内容,指定xerces的版本:

1
2
3
4
5
6
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>2.8.1</version>
<scope>test</scope>
</dependency>

重新运行,OK。

Comments