"内容不允许在prolog"使用JAXB解组JSON时

时间:2014-04-04 10:27:48

标签: java json jaxb

我试图使用JAXB& amp解组一些JSON。以下测试:

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)

这曾经有效,所以我改变了一些东西,但我不知道是什么。有没有人对可能导致问题的原因有任何线索?通过对stacktrace中的类进行一些调试,看起来JSON正在被解析为它的XML,但我不确定为什么。依赖等似乎没问题。

1 个答案:

答案 0 :(得分:0)

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