2014-04-04 37 views
1

我试图解组使用JAXB &以下测试一些JSON:“的内容是不是在序言中不允许”解组时使用JSON JAXB

private static final String json = "{\"displayName\":\"2 KB\",\"externalId\":\"e1bc7db1-e7d5-41c9-8d2a-681f64ffea77\",\"contentType\":\"image/jpeg\",\"created\":\"2014-04-04T10:42:57\",\"lastModified\":\"2014-04-04T10:42:57\",\"originalFilename\":\"pgtips.jpg\",\"size\":\"2902\",\"tags\":\"\"}"; 

@Test 
public void testDocStoreResponse() throws Exception { 
    JAXBContext context = JAXBContext.newInstance(JAXBFile.class); 
    Unmarshaller unmarshaller = context.createUnmarshaller(); 
    StringReader reader = new StringReader(json); 
    unmarshaller.unmarshal(reader); 
} 

JAXBFile是代表JSON一个简单的POJO:

@XmlRootElement 
public class JAXBFile extends AbstractBean implements IFile { 
    private String originalFilename; 
    private Date created; 
    private Date lastModified; 
    private String tags = ""; 
    private String contentType; 
    private long size; 

    // Un-annotated getters & setters follow 
} 

但每当我运行它,我得到一个堆栈跟踪开始:

javax.xml.bind.UnmarshalException 
- with linked exception: 
[org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.] 
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.createUnmarshalException(Unknown Source) 
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.createUnmarshalException(UnmarshallerImpl.java:578) 

这曾经是工作,所以我改变了一些东西,但我不知道是什么。有没有人有任何线索可能会导致问题?从调试堆栈跟踪中的类来看,似乎JSON正在被解析,就好像它是XML一样,但我不确定原因。依赖性等似乎没有问题。

回答

0

JAXB(JSR-222)用于解组XML而不是JSON。您当前正在使用JAXB参考实现(基于堆栈跟踪)。 EclipseLink JAXB(MOXy)支持JSON绑定。你以前使用过吗?

+0

这里的地方我知道我不太知道的地步!从来不是一件好事。我猜测一定有一个我没有意识到的传递Maven依赖。我知道我在那里有Jackson支持JAXB注释,但那不是JAXB实现(我从来没有把它称为ObjectMapper类)。我会特别试着把Moxy放在那里,并给它一个提供。 –

相关问题