2013-07-25 3 views
1

Соответствующие: this и thatДжерси/Grizzly POST не выполняется для большого URI

Я разрабатываю POST WebService (джерси/гризли, для исследовательских целей только), которые должны быть в состоянии обрабатывать большие URI. Но если URI превышает 8000 символов, я получаю исключение 400 Bad Request без дальнейших объяснений. Я отлаживал/отслеживал его до атрибута grizzly maxHttpHeaderSize. Я попытался установить этот атрибут, но не смог. Вот как я запускаю сервер и запрос:

GrizzlyServerFactory.createHttpServer(BASE_URI, new PackagesResourceConfig("org.test")); 

JSONObject s = new JSONObject(webResource.queryParams(queryParams).post(String.class)); 

Благодарим за помощь! Cheers, Daniel

ответ

2

Проблема в том, что GrizzlyServerFactory возвращает уже начатый HttpServer, поэтому вы не можете перенастроить его на лету. Здесь [1] Я создал копию GrizzlyServerFactory, которая не запускается HttpServer, поэтому код, как:

HttpServer httpServer = GrizzlyServerFactory.createHttpServer(BASE_URI, rc); 
    httpServer.getListener("grizzly").setMaxHttpHeaderSize(Integer.MAX_VALUE); 

    // don't forget to start the server explicitly 
    httpServer.start(); 

Надеется, что поможет.

[1] https://github.com/oleksiys/samples/blob/master/jersey-grizzly2-ext/src/main/java/com/sun/jersey/api/container/grizzly2/ext/GrizzlyServerFactory.java

+0

Удивительный! Спасибо, Алексей! Но есть ли теперь способ сделать это, не создавая свой собственный класс? (Так как это не обновление-доказательство :() –

+0

привет Даниэль, я понимаю, что вы беспокоитесь, но, к сожалению, я пока не вижу другого способа. Вы можете подать вопрос Джерси и попросить Джерси расширить стандартную функциональность GrizzlyServerFactory. – alexey

0

Вы пробовали с более коротким URI? Вероятно, ваш сервер не может обработать такой длинный URI.

Вы можете прочитать об этом здесь: What is the maximum length of a URL in different browsers?

Почему Вы не помещает данные запроса из URL, чтобы запросить тело?

+0

Извините, но это не поможет. Я не пользуюсь браузером. И я могу назвать только веб-сервис, как и я. –

+0

Но по-прежнему существует вероятность того, что ваш сервер не сможет обработать так долго URI. Пожалуйста, попробуйте с более коротким URI и дайте нам обратную связь. Также есть ссылки на серверы (и максимальный размер URI) в ссылке, которую я предоставил. – pWoz

0

Вы можете создать гризли сервер HTTP, не запуская его сейчас

public static HttpServer createHttpServer(
    final URI uri, 
    final ResourceConfig configuration, 
    final boolean start) 

Так в основном вы создаете это обычно проходит фальшиво, как 3-й аргумент.

Когда вы возвращаете объект HttpServer обратно, вы можете httpServer.getListener("grizzly").setMaxHttpHeaderSize(Integer.MAX_VALUE); Как было сказано ранее и не забудьте запустить сервер вручную.

Смежные вопросы