jaxb, получи оригинальный xml после демаршаллинга - PullRequest
0 голосов
/ 30 ноября 2009

У меня есть простой маленький сервлет, в основном:

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 ]

3 голосов
/ 30 ноября 2009

Если вы хотите это сделать, вам нужно прочитать запрос 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 голос
/ 30 ноября 2009

Вы можете прочитать request.getInputStream() в String и распаковать его String, позвонив um.unmarshall(new StringReader(str)); Тогда это String также будет доступно в предложении catch

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...