jaxb,解组后得到原始的xml

时间:2009-11-30 15:02:43

标签: java jaxb

我有一个简单的小servlet,基本上是:

void doPost(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException {
    JAXBContext jaxb = myContext.getXMLContext().getSearchparamContext();
    SearchParams params = null;
     try {
        Unmarshaller um = jaxb.createUnmarshaller();
        um.setSchema(myContext.getXMLContext().getSearchParamsSchema()); 
         JAXBElement<SearchParams> je = (JAXBElement<SearchParams>) um.unmarshal(request.getInputStream());
        params = je.getValue();
    } catch (JAXBException e) {
        logger.log(Level.WARNING,"Error parsing xml from user "+ request.getRemoteUser(),e);
        response.sendError(HttpServletResponse.SC_BAD_REQUEST);
        return;
    }
...

如果解析失败,我有没有办法在这里获取原始XML - 主要用于跟踪目的。或者我应该保存到文件并从中解组?

2 个答案:

答案 0 :(得分:3)

如果你想这样做,你需要将请求InputStream读入临时缓冲区(例如String或byte []),然后通过JAXB传递它。如果您的文档很大,那么这可能会损害您的性能,但如果您的文档很大,那么无论如何JAXB都会变慢。

如果您有使用Apache Commons IO的良好意识,那么这很容易:

String buffer = IOUtils.toString(request.getReader());
Object obj = jaxbContext.createUnmarshaller().unmarshal(new StringReader(buffer));
// do something else with the buffer here

答案 1 :(得分:1)

您可以通过调用request.getInputStream()String阅读为String,然后将um.unmarshall(new StringReader(str))解组; 然后在catch子句

中也可以访问String