2012-11-26 116 views
2

我正在使用Spring Data JPA,并试图使用存储库填充器来填充数据 - 但我得到了格式错误的json的异常。如何使用弹簧数据-jpa使用存储库populator?

我认为它可能是data.json文件的位置。我把,在META-INF文件夹和我配置测试用例如下

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations={"classpath:META-INF/integration-test-context.xml","classpath:META-INF/sample-data.xml"}) 
public class JpaCompanyRepositoryIntegrationTest{ 

//Test cases here 

} 

我的样品data.xml中是:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:repository="http://www.springframework.org/schema/data/repository" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/data/repository 
    http://www.springframework.org/schema/data/repository/spring-repository.xsd"> 

    <repository:jackson-populator location="classpath:data.json" /> 

</beans> 

和data.json包含

[{"_class" : "com.some.Class", 
    "id" : "id1", 
    "firstname" : "Admin", 
    "lastname" : "admin" 
}, 
{ 
    "_class" : "com.some.Class", 
    "id" : "id2", 
    "firstname" : "user", 
    "lastname" : "user" 
}] 

我得到以下异常:

Caused by: java.lang.RuntimeException: org.codehaus.jackson.JsonParseException: Unexpected character ('c' (code 99)): expected a valid value (number, String, array, object, 'true', 'false' or 'null') 
at [Source: [email protected]; line: 1, column: 2] 
    at org.springframework.data.repository.init.ResourceReaderRepositoryPopulator.readObjectFrom(ResourceReaderRepositoryPopulator.java:145) 
    at org.springframework.data.repository.init.ResourceReaderRepositoryPopulator.populate(ResourceReaderRepositoryPopulator.java:115) 
    at org.springframework.data.repository.init.AbstractRepositoryPopulatorFactoryBean.onApplicationEvent(AbstractRepositoryPopulatorFactoryBean.java:93) 
    at org.springframework.data.repository.init.AbstractRepositoryPopulatorFactoryBean.onApplicationEvent(AbstractRepositoryPopulatorFactoryBean.java:34) 
    at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:97) 
    at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:324) 
    at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:934) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:472) 
    at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:103) 
    at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:1) 
    at org.springframework.test.context.support.DelegatingSmartContextLoader.loadContext(DelegatingSmartContextLoader.java:228) 
    at org.springframework.test.context.TestContext.loadApplicationContext(TestContext.java:124) 
    at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:148) 
    ... 24 more 
Caused by: org.codehaus.jackson.JsonParseException: Unexpected character ('c' (code 99)): expected a valid value (number, String, array, object, 'true', 'false' or 'null') 
at [Source: [email protected]; line: 1, column: 2] 
    at org.codehaus.jackson.JsonParser._constructError(JsonParser.java:1432) 
    at org.codehaus.jackson.impl.JsonParserMinimalBase._reportError(JsonParserMinimalBase.java:385) 
    at org.codehaus.jackson.impl.JsonParserMinimalBase._reportUnexpectedChar(JsonParserMinimalBase.java:306) 
    at org.codehaus.jackson.impl.Utf8StreamParser._handleUnexpectedValue(Utf8StreamParser.java:2084) 
    at org.codehaus.jackson.impl.Utf8StreamParser._nextTokenNotInObject(Utf8StreamParser.java:600) 
    at org.codehaus.jackson.impl.Utf8StreamParser.nextToken(Utf8StreamParser.java:486) 
    at org.codehaus.jackson.map.ObjectReader._initForReading(ObjectReader.java:638) 
    at org.codehaus.jackson.map.ObjectReader._bindAsTree(ObjectReader.java:597) 
    at org.codehaus.jackson.map.ObjectReader._bindAndCloseAsTree(ObjectReader.java:621) 
    at org.codehaus.jackson.map.ObjectReader.readTree(ObjectReader.java:381) 
    at org.springframework.data.repository.init.JacksonResourceReader.readFrom(JacksonResourceReader.java:80) 
    at org.springframework.data.repository.init.ResourceReaderRepositoryPopulator.readObjectFrom(ResourceReaderRepositoryPopulator.java:143) 
    ... 36 more 

所以我做了更多的调试,结果发现配置正在寻找repository populator定义中的“locations”属性 - 而xml需要“location”属性。我使用弹簧数据1.4.0.RELEASE和杰克逊1.9.2。我混合了依赖关系吗?

+0

我在StackOverflow监控Spring Data的相关问题,所以不需要通过电子邮件ping我:)。 –

回答

2

这一直是春季的数据共享的当前版本中的错误(见DATACMNS-227了解详细信息)。这是蜜蜂fixed recently,但由于修复需要命名空间更改,它只会进入Spring Data Commons 1.5的即将到来的里程碑。

+0

谢谢,是否有发布日期? – mira

+1

不,但您可以直接使用'FactoryBean's,并在此期间使用'beans'命名空间来设置它们。 –

相关问题