我在 REST 应用程序中使用 jaxb。我想通过 Web 表单发送 XML 文件。然后java类将解码InputStream
。
private void unmarshal(Class<T> docClass, InputStream inputStream)
throws JAXBException {
String packageName = docClass.getPackage().getName();
JAXBContext context = JAXBContext.newInstance(packageName);
Unmarshaller unmarshaller = context.createUnmarshaller();
Object marshaledObject = unmarshaller.unmarshal(inputStream);
}
触发 unmarshal
方法的 jsp 文件有一个 form
,如下所示:
<form action="#" method="POST">
<label for="id">File</label>
<input name="file" type="file" />
<input type="submit" value="Submit" />
</form>
我得到以下 ParserException :
javax.xml.bind.UnmarshalException - 带有链接异常:[org.xml.sax.SAXParseException:序言中不允许内容。]
。
一般性地回答了该问题here ,但我确信我的文件没有损坏。当我从具有相同文件的 java 类中调用代码时,不会引发异常。
// causes no exception
File file = new File("MyFile.xml");
FileInputStream fis = new FileInputStream(file);
ImportFactory importFactory = ImportFactory.getInstance();
importFactory.setMyFile(fis);
// but when i pass the file with a web form
@POST
@Produces(MediaType.TEXT_HTML)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public Response create(@FormParam("file") InputStream filestream) {
Response response;
// is a BufferedInputStream, btw
LOG.debug("file is type: " + filestream.getClass().getName());
try {
ImportFactory importFactory = ImportFactory.getInstance();
importFactory.setMyFile(filestream);
Viewable viewable = new Viewable("/sucess", null);
ResponseBuilder responseBuilder = Response.ok(viewable);
response = responseBuilder.build();
} catch (Exception e) {
LOG.error(e.getMessage(), e);
ErrorBean errorBean = new ErrorBean(e);
Viewable viewable = new Viewable("/error", errorBean);
ResponseBuilder responseBuilder = Response.ok(viewable);
response = responseBuilder.build();
}
return response;
}
最佳答案
@FormParam("file") InputStream 文件流的内容是 file=MyFile.xml,而不是它的内容。
关于java - 在 Jersey 中使用 XML 文件进行发布时出现 SAXParseException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2460872/