我有一个简单的小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 - 主要用于跟踪目的。或者我应该保存到文件并从中解组?
答案 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