Возникла проблема с возвратом строки из веб-службы отдыха:
[WebInvoke(Method = "PUT", UriTemplate = "/Filters",
BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)]
[OperationContract]
string CreateFilter(Filter InputFilter);
Как видите, URL не имеет никаких параметров, все данные передаются потоком на URL. Возвращаемая строка основана на данных, отправленных по URL-адресу.
Когда я использую приложение для тестирования .net, ответ правильный (на основе ввода).
Когда я использую сервлет Java, служба возвращает ошибку 400 при вызове GetInputStream() для HttpURLRequest.
Похоже, сервлет Java делает второй вызов URL-адреса и ожидает ответа (которого не существует, поскольку он основан на входных данных). Я проверил это, изменив возврат на константу (таким образом, не на основе ввода). Когда я делаю это, мой метод GetInputStream() работает.
Код сервлета:
OutputStream out = connection.getOutputStream();
out.write(jsonValue.getBytes());
out.close();
String response = "";
BufferedReader readResponse =
new BufferedReader(new InputStreamReader(connection.getInputStream()));
response = readResponse.readLine();
return response;
Примечание. Другие методы используют тот же код для URL-адреса с параметрами в нем и возвращают правильные данные (добавляя свидетельство того, что сервлет выполняет второй вызов URL-адреса в моем проблемном методе). Также out.close() НЕ является проблема.