Как обрабатывать XML в теле почтового запроса со страницей Wicket - PullRequest
2 голосов
/ 29 марта 2011

Я пытался настроить страницу в Wicket (расширение org.apache.wicket.markup.html.WebPage) для получения HTTP-запроса на публикацию, содержащего XML-документ в теле сообщенияот стороннего поставщика услуг ( CRE Secure , шлюз кредитной карты) и когда я получаю доступ к потоку ввода запроса, например:

getWebRequest().getHttpServletRequest().getInputStream();

... поток всегда имеет нольбайт.

Что я делаю не так?

Ответы [ 2 ]

3 голосов
/ 29 марта 2011

После небольшой отладки я дошел до сути.InputStream используется при создании объекта PageParameters.Следующий метод извлекает xml как строку из PageParameters:

private String getXmlFromPageParameters(PageParameters params) {
// There should be a single PageParam whose key is the 
// XML document (up to the 1st =) and whose value is 
// either empty or the rest of the xml document after 
// the 1st =.
String xml = null;
for (String key : params.keySet()) {
    xml = key;
    if (params.getString(key) != null && !"".equals(params.getString(key))) {
        xml = xml + "=" + params.getString(key);
    }
}
return xml;

}

1 голос
/ 26 июля 2011

Результат зависит от Content-Type входящего потока.Браузеры (например, Chrome) по умолчанию устанавливают тип содержимого на application / x-www-form-urlencoded или аналогичный, что приводит к загрузке PageParameters.

Переопределение значения по умолчанию атрибутом enctype в элементе формы (например,скажем, text / xml) приводит к тому, что тело запроса становится доступным через InputStream (хотя, вероятно, он все еще будет иметь URLEncoded).

Использование программного источника (например, Apache DefaultHttpClient) и установка заголовка Content-Typeтакже позволяет вам выбрать, будет ли тело сообщения в PageParameters или InputStream.

Обновление Wicket 1.5

В Wicket 1.5 пустые параметры страницы.Вместо этого позвоните

RequestCycle.get().getRequest().getPostParameters().getParameterValue("xml")
...