java - 在 Jersey 中使用 XML 文件进行发布时出现 SAXParseException

标签 java forms post jersey saxparseexception

我在 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/

相关文章:

vue.js - 如何在Go Web服务器和Vue.js前端之间交换数据? http发布:404

android - Retrofit2 POST 正文作为原始 JSON

java - 当我在 `layout.xml` 文件中添加工具栏时,Android Studio RecyclerView 不会显示我的数据

java - 状态 404 - MockMvc 授权 - Spring boot REST 文档

Java 9 上的 JavaAgent

php - 如果必须刷新表单并重新填充该数据,如何临时存储表单数据?

java - 如何将 jar 名称获取到 bat(批处理)文件中的启动脚本中

javascript - 视频,表单,然后是 html 视频

javascript - 如何使用 javascript 以 html 形式显示计算结果

php - 当 $_GET 是我唯一的选择时发送用户名 + 密码的最安全方式