Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
 Как получить содержимое POST запроса "application/xml" сервлет jetty  [new]
ToTAmon
Member

Откуда:
Сообщений: 6
Пытаюсь осуществить POST запрос к серверу jetty. Сервлет отрабатывает, ловлю request. Но никак не могу понять как из него получить отправленные данные.
Подскажите куда копать, пожалуйста!

Из отладчика:
автор
request = {Request@1883} "Request(POST //med-fr:8180/FR)@1972b201"
_channel = {HttpChannelOverHttp@1894} "HttpChannelOverHttp@64ee8b0{r=1,c=false,a=DISPATCHED,uri=//med-fr:8180/FR,age=8027}"
_requestAttributeListeners = {ArrayList@1895} size = 0
_input = {HttpInputOverHTTP@1896} "HttpInputOverHTTP@1b6d5d8f[c=0,q=0,[0]=null,s=STREAM]"
_metaData = {MetaData$Request@1897} "POST{u=//med-fr:8180/FR,HTTP/1.1,h=5,cl=110}"
_method = "POST"
_uri = {HttpURI@1922} "//med-fr:8180/FR"
_httpVersion = {HttpVersion@1923} "HTTP/1.1"
_fields = {HttpFields@1924} "Host: med-fr:8180\r\nUser-Agent: 1C+Enterprise/8.3\r\nAccept: */*\r\nContent-Type: application/xml\r\nContent-Length: 110\r\n\r\n"
_contentLength = 110
_trailers = {HttpChannel$lambda@1925}
_originalURI = "/FR"
_contextPath = ""
_servletPath = "/FR"
_pathInfo = null
_secure = false
_asyncNotSupportedSource = null
_newContext = false
_cookiesExtracted = true
_handled = false
_contentParamsExtracted = false
_requestedSessionIdFromCookie = false
_attributes = {AttributesMap@1900} "{org.eclipse.jetty.multipartConfig=javax.servlet.MultipartConfigElement@21b60fb2}"
_authentication = null
_characterEncoding = "UTF-8"
_context = {ServletContextHandler$Context@1902} "ServletContext@o.e.j.s.ServletContextHandler@16ec5519{/,null,AVAILABLE}"
_cookies = null
_dispatcherType = {DispatcherType@1903} "REQUEST"
_inputState = 0
_queryParameters = null
_contentParameters = null
_parameters = null
_queryEncoding = null
_reader = null
_readerEncoding = null
_remote = null
_requestedSessionId = null
_scope = {ServletHolder@1904} "Model.ServletFineReader-517cd4b@271adc1a==Model.ServletFineReader,jsp=null,order=-1,inst=true,async=true"
_session = null
_sessionHandler = {SessionHandler@1905} "org.eclipse.jetty.server.session.SessionHandler769151807==dftMaxIdleSec=-1"
_timeStamp = 1585135963159
_multiParts = null
_async = null
25 мар 20, 14:42    [22105747]     Ответить | Цитировать Сообщить модератору
 Re: Как получить содержимое POST запроса "application/xml" сервлет jetty  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 9995
Commons FileUpload?
Content-Type: application/пофигу-что возвращает поток байт, который читается вполне обычным образом.

Сообщение было отредактировано: 25 мар 20, 14:52
25 мар 20, 14:50    [22105749]     Ответить | Цитировать Сообщить модератору
 Re: Как получить содержимое POST запроса "application/xml" сервлет jetty  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4488
Basil A. Sidorov
Commons FileUpload?
Content-Type: application/пофигу-что возвращает поток байт, который читается вполне обычным образом.
код отправки нужен
25 мар 20, 14:59    [22105752]     Ответить | Цитировать Сообщить модератору
 Re: Как получить содержимое POST запроса "application/xml" сервлет jetty  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4488
PetroNotC Sharp
Basil A. Sidorov
Commons FileUpload?
Content-Type: application/пофигу-что возвращает поток байт, который читается вполне обычным образом.
код отправки нужен
это ТС у пост
25 мар 20, 14:59    [22105753]     Ответить | Цитировать Сообщить модератору
 Re: Как получить содержимое POST запроса "application/xml" сервлет jetty  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 9995
PetroNotC Sharp
PetroNotC Sharp
код отправки нужен
это ТС у пост
И?
Commons FileUpload не подходит в принципе, POST не позволяет получить ServletInput/OutputStream или что?
25 мар 20, 15:05    [22105759]     Ответить | Цитировать Сообщить модератору
 Re: Как получить содержимое POST запроса "application/xml" сервлет jetty  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4488
Basil A. Sidorov,
Для ответа на вопрос нужен код а не логи.
Я их даже не читал.
25 мар 20, 15:17    [22105768]     Ответить | Цитировать Сообщить модератору
 Re: Как получить содержимое POST запроса "application/xml" сервлет jetty  [new]
ToTAmon
Member

Откуда:
Сообщений: 6
PetroNotC Sharp,
Мне код отправки не жалко просто он на 1С lang.


1С lang
HTTP = Новый HTTPСоединение(Сервер,Порт,,,,,Неопределено);

СтрокаЗапроса = Новый ЗаписьXML;
СтрокаЗапроса.УстановитьСтроку("UTF-8");

СтрокаЗапроса.ЗаписатьБезОбработки("<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?>
|");

СтрокаЗапроса.ЗаписатьНачалоЭлемента("NameFileIn");
СтрокаЗапроса.ЗаписатьТекст(XMLСтрока(Документ.ИмяФайла));
СтрокаЗапроса.ЗаписатьКонецЭлемента();


ПараметрыЗапроса = СтрокаЗапроса.Закрыть();
Сообщить(""+ПараметрыЗапроса);
// Отсылаем POST запрос на обработку.
// СсылкаНаРесурс — ссылка на веб-сервер (страницу), к которой посылается POST запрос
HTTPЗапрос = Новый HTTPЗапрос("FR");
HTTPЗапрос.Заголовки.Вставить("Content-type", "application/xml");
HTTPЗапрос.УстановитьТелоИзСтроки(ПараметрыЗапроса, КодировкаТекста.UTF8);

Ответ = HTTP.ОтправитьДляОбработки(HTTPЗапрос);


XML содержит
XML
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<NameFileIn>valid-analyt-procedure.pdf</NameFileIn>
25 мар 20, 15:56    [22105788]     Ответить | Цитировать Сообщить модератору
 Re: Как получить содержимое POST запроса "application/xml" сервлет jetty  [new]
ToTAmon
Member

Откуда:
Сообщений: 6
Basil A. Sidorov
Commons FileUpload?
Content-Type: application/пофигу-что возвращает поток байт, который читается вполне обычным образом.


:( Ткните пожалуйста, если не трудно, примером. Я наверняка туплю, но реально уже третий день вожусь безрезультатно.
25 мар 20, 16:02    [22105790]     Ответить | Цитировать Сообщить модератору
 Re: Как получить содержимое POST запроса "application/xml" сервлет jetty  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4488
ToTAmon,
Круто. А причем java?
Тогда так:
- сделай запрос в js, IE, утилите к эксплореру и приходи в топик
- перехвати запрос сниффером.
25 мар 20, 16:11    [22105794]     Ответить | Цитировать Сообщить модератору
 Re: Как получить содержимое POST запроса "application/xml" сервлет jetty  [new]
ToTAmon
Member

Откуда:
Сообщений: 6
PetroNotC Sharp,
На Java сервер написан. :) К которому обращение.

    
public void doPost(HttpServletRequest request,
                       HttpServletResponse response) throws ServletException, IOException {

        System.out.println("POST1");
        response.setContentType("text/html;charset=UTF-8");
        request.setCharacterEncoding("UTF-8");

        String file = request.getParameter("file");
        boolean isMultipart = ServletFileUpload.isMultipartContent(request);

        if (isMultipart) {
            FileItemFactory factory = new DiskFileItemFactory();
            ServletFileUpload upload = new ServletFileUpload(factory);

            try {
                List items = upload.parseRequest(request);
                Iterator iterator = items.iterator();
                while (iterator.hasNext()) {
                    FileItem item = (FileItem) iterator.next();

                    if (!item.isFormField()) {
                        String fileName = item.getName();

                        String root = getServletContext().getRealPath("/");
                        File path = new File(root + "/uploads");
                        if (!path.exists()) {
                            boolean status = path.mkdirs();
                        }

                        File uploadedFile = new File(path + "/" + fileName);
                        System.out.println(uploadedFile.getAbsolutePath());
                        item.write(uploadedFile);
                    }
                }
            } catch (FileUploadException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }        //request.
    }
25 мар 20, 16:18    [22105797]     Ответить | Цитировать Сообщить модератору
 Re: Как получить содержимое POST запроса "application/xml" сервлет jetty  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4488
ToTAmon,
Ответ тот же.
Снаружи проверка будет правильнее и точнее.
25 мар 20, 17:00    [22105811]     Ответить | Цитировать Сообщить модератору
 Re: Как получить содержимое POST запроса "application/xml" сервлет jetty  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 8475
Я не понял, что общего между application/xml и ServletFileUpload.

https://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html#getInputStream()
25 мар 20, 17:04    [22105812]     Ответить | Цитировать Сообщить модератору
 Re: Как получить содержимое POST запроса "application/xml" сервлет jetty  [new]
ToTAmon
Member

Откуда:
Сообщений: 6
Leonid Kudryavtsev
Я не понял, что общего между application/xml и ServletFileUpload.

https://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html#getInputStream()


Огромное спасибо! Проблема решена благодаря вашему совету.

Нужный код
        Scanner s = new Scanner(request.getInputStream(), "UTF-8").useDelimiter("\\A");
        String xmlF = s.hasNext() ? s.next() : "";
25 мар 20, 21:42    [22105980]     Ответить | Цитировать Сообщить модератору
Все форумы / Java Ответить