powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Запрос на другой сервер из EJB SessionBean
16 сообщений из 16, страница 1 из 1
Запрос на другой сервер из EJB SessionBean
    #38492256
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день !
Как создать такой запрос :

Есть код который отлисно работает в Junit тесте - где создается запрос и получается ответ.

либа клиента commons-httpclient-3.1.jar

Как только я переношу этот код в SessionBean , который инджектится в сервлет.

И вызываю его - клиент httpclient "умирает" по TIMEOUT! ответа от сервера я получить не могу

Помогите понять в чем затык?

вызовы из SessionBean не проходят или что то еще ?


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
...
import org.apache.commons.httpclient.Credentials;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.StatusLine;
import org.apache.commons.httpclient.UsernamePasswordCredentials;
import org.apache.commons.httpclient.auth.AuthScope;
import org.apache.commons.httpclient.methods.PostMethod;

@Stateless
public class MySessionBean {

   //  Регистрация инвойса 
    public Result registerRequest(RegisterRequest registeRequest) {

        Result result = null;
        try {

            OutputStream outputStream = new OutputStream() {
                private StringBuilder string = new StringBuilder();

                @Override
                public void write(int b) throws IOException {
                    this.string.append((char) b);
                }

                @Override
                public String toString() {
                    return this.string.toString();
                }
            };

            Utils.marshaller(registerRequest, outputStream);
            outputStream.close();


            HttpClient client = new HttpClient();
            client.getState().setCredentials(AuthScope.ANY, payment_credentials);

            PostMethod method = new PostMethod(fcgi_request);
            method.setRequestHeader("Content-Type", "text/html");
            method.setRequestBody(outputStream.toString());

            String out = null;

            int TIMEOUT_IN_MILLISECONDS = 3000;
            client.getParams().setSoTimeout(TIMEOUT_IN_MILLISECONDS);

            // TУТ ЗАТЫК!        
            client.executeMethod(method);

            int status = method.getStatusCode();
            StatusLine statusLine = method.getStatusLine();
            out = method.getResponseBodyAsString();

            result = new Result(status, statusLine, out);

            method.releaseConnection();
            method = null;
            client = null;

//        try {
//            InputStream is = new ByteArrayInputStream(result.getOut().getBytes(Charset.forName("UTF-8")));
//            RegisterIResult iResult = Utils.unmarshaller(RegisterResult.class, is);
//        } catch (Exception e) {
//        }




        } catch (Exception ex) {
               Logger.getLogger(InvoiceSessionBean.class.getName()).log(Level.SEVERE, null, ex);
        } finally {

            return result;
        }
    }

}



Utils.marshaller(registerRequest, outputStream); - перевод класса в XML
...
Рейтинг: 0 / 0
Запрос на другой сервер из EJB SessionBean
    #38492272
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OutputStream кривой с точки зрения Unicode.
Покажите stacktrace повисшего потока.

Это вообще гениальная комбинация.
Код: java
1.
2.
3.
finally {
            return result;
}



fcgi_request это вообще что и откуда?
...
Рейтинг: 0 / 0
Запрос на другой сервер из EJB SessionBean
    #38492286
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczOutputStream кривой с точки зрения Unicode.
Покажите stacktrace повисшего потока.

Это вообще гениальная комбинация.
Код: java
1.
2.
3.
finally {
            return result;
}


Да эпично вышло :)

fcgi_request это вообще что и откуда?

Старая версия клиента - такой метод уже не рекомендуется использовать - method.setRequestBody(outputStream.toString());

смысл OutputStream лишь в том чтобы превратить класс в xml представление и запихнуть его в строку.

Писалось на месте - если есть что предложить - буду рад.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    private static <T> Marshaller marshaller(T obj) throws JAXBException {
        JAXBContext context = JAXBContext.newInstance(obj.getClass());
        Marshaller m = context.createMarshaller();
        m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
        return m;
    }

   public static <T> void marshaller(T obj, OutputStream os) throws JAXBException {
        marshaller(obj).marshal(obj, os);
    }




fcgi_request - внешний URI

public static final String fcgi_request = " http://test.it.office/fcgi/fcgi_request";
...
Рейтинг: 0 / 0
Запрос на другой сервер из EJB SessionBean
    #38492290
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1,

Вот тут пример Request Streaming
http://hc.apache.org/httpclient-3.x/performance.html#Request_Response_entity_streaming
Чтобы не загонять XML целиком в память, а писать непосредственно маршаллером в запрос.
XML большой? Может серверу не хватает 3х секунд чтобы его распрарсить?
...
Рейтинг: 0 / 0
Запрос на другой сервер из EJB SessionBean
    #38492292
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что говорят логи сервера, на который отправляется запрос?
...
Рейтинг: 0 / 0
Запрос на другой сервер из EJB SessionBean
    #38492305
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczЧто говорят логи сервера, на который отправляется запрос?

500 ошибка .

Обернул код httpclient клиента в простой класс - на писал тест - ему хватает и 1 секунды за глаза.

XML - маленький - 10 строк.

Не работает вызов именно из серлвета или SessionBean - и это очень странно , как будто контейнер не выпускает запросы (бред конечно)
...
Рейтинг: 0 / 0
Запрос на другой сервер из EJB SessionBean
    #38492308
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
Atum1,

еще можно включить протоколирование для commons-httpclient.
...
Рейтинг: 0 / 0
Запрос на другой сервер из EJB SessionBean
    #38492312
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczAtum1,

Вот тут пример Request Streaming
http://hc.apache.org/httpclient-3.x/performance.html#Request_Response_entity_streaming
Чтобы не загонять XML целиком в память, а писать непосредственно маршаллером в запрос.
XML большой? Может серверу не хватает 3х секунд чтобы его распрарсить?

тут для файла - у меня же схема другая (простая )- приходит "трансфер" от веб клиента - это набор полей
- он преобразуется в класс запроса - класс запроса маршалится в правильный xml -
тело xml вставляется а тело запроса клиента и перенаправляется на другой ресурс от которого я должен получить ответ .
...
Рейтинг: 0 / 0
Запрос на другой сервер из EJB SessionBean
    #38492324
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WGAAtum1,

еще можно включить протоколирование для commons-httpclient.

Да ,что то в Пятницу вечером - совсем плохо соображаю - логи показывают что ответ приходит в виде

401 Authorization Required

т.е. каким то образом не проходит авторизация ?! хотя в тесте все ок.
...
Рейтинг: 0 / 0
Запрос на другой сервер из EJB SessionBean
    #38492333
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
Atum1WGAAtum1,

еще можно включить протоколирование для commons-httpclient.

Да ,что то в Пятницу вечером - совсем плохо соображаю - логи показывают что ответ приходит в виде

401 Authorization Required

т.е. каким то образом не проходит авторизация ?! хотя в тесте все ок.Тут уж Вам виднее ) Вы же выдрали кусок кода и откуда берется payment_credentials отсюда не видно.
...
Рейтинг: 0 / 0
Запрос на другой сервер из EJB SessionBean
    #38492342
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WGAAtum1пропущено...


Да ,что то в Пятницу вечером - совсем плохо соображаю - логи показывают что ответ приходит в виде

401 Authorization Required

т.е. каким то образом не проходит авторизация ?! хотя в тесте все ок.Тут уж Вам виднее ) Вы же выдрали кусок кода и откуда берется payment_credentials отсюда не видно.

тут секретов нет:)
Код: java
1.
2.
3.
    private static final String invoice_login = "login";
    private static final String invoice_password = "password";
    private static final Credentials payment_credentials = new UsernamePasswordCredentials(invoice_login, invoice_password);



Кажется понял в чем ошибка - не все поля заполнены в xml :) а в тесте все :).
...
Рейтинг: 0 / 0
Запрос на другой сервер из EJB SessionBean
    #38492345
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
Atum1Кажется понял в чем ошибка - не все поля заполнены в xml :) а в тесте все :).Хороший у Вас сервер на той стороне - в логах пишет 500-ю, а отдает 401-ю. Чтобы враг не догадался...
...
Рейтинг: 0 / 0
Запрос на другой сервер из EJB SessionBean
    #38492349
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1тут для файла - у меня же схема другая (простая )
Радикольно, другая схема. Прям разница - земля и небо.

Код: java
1.
2.
3.
4.
5.
public class MyJaxbRequestEntity implements RequestEntity {
   public void writeRequest(OutputStream out) throws IOException {
       Utils.marshaller(registerRequest, out);
   }
}
...
Рейтинг: 0 / 0
Запрос на другой сервер из EJB SessionBean
    #38492355
Sergunka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На будущее чтоб сильно не заморачиваться и иметь под рукой проверку - установите в chrome - https://chrome.google.com/webstore/detail/advanced-rest-client/hgmloofddffdnphfgcellkdfbfbjeloo?utm_source=ha-en-na-us-webapp-Advanced Rest Client Application

Advanced REST client

после чего можете послать ваше сообщение вручную и посмотреть что прийдет. Вообще 500 ошибка довольна распростаненное явление когда клиент не авторизован.
...
Рейтинг: 0 / 0
Запрос на другой сервер из EJB SessionBean
    #38492360
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
SergunkaВообще 500 ошибка довольна распростаненное явление когда клиент не авторизован.Подумайте еще раз хорошенько. В ответ на HTTP-запрос возвращается один код возврата. Или 401, или 500, или... но никак не два.
...
Рейтинг: 0 / 0
Запрос на другой сервер из EJB SessionBean
    #38492412
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WGAAtum1Кажется понял в чем ошибка - не все поля заполнены в xml :) а в тесте все :).Хороший у Вас сервер на той стороне - в логах пишет 500-ю, а отдает 401-ю. Чтобы враг не догадался...

Не. Он 500 вернул когда клиент вылетает по таймауту.
401 когда ошибка в запросе.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Запрос на другой сервер из EJB SessionBean
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]