Java getInputStream 400 ошибок - PullRequest
2 голосов
/ 14 июня 2010

Когда я связываюсь с веб-сервисом, используя Java HttpUrlConnection, он просто возвращает 400 неверных запросов (IOException).Как получить информацию XML, возвращаемую сервером;он не отображается ни в getErrorStream соединения, ни в информации об исключениях.

Когда я запускаю следующий код PHP для веб-службы:

<?php

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "https://www.myclientaddress.com/here/" );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt($ch, CURLOPT_POST,1 );
curl_setopt($ch, CURLOPT_POSTFIELDS,"username=ted&password=scheckler&type=consumer&id=123456789&zip=12345");

$result=curl_exec ($ch);
echo $result;
?>

itвозвращает следующее:

<?xml version="1.0" encoding="utf-8"?>
<response>
    <status>failure</status>
    <errors>
        <error name="RES_ZIP">Zip code is not valid.</error>
        <error name="ZIP">Invalid zip code for residence address.</error>
    </errors>
</response>

, поэтому я знаю, что информация существует

Ответы [ 4 ]

3 голосов
/ 23 июня 2016

HttpUrlConnection возвращает FileNotFoundException, если вы пытаетесь прочитать getInputStream () из соединения, поэтому вместо этого следует использовать getErrorStream () всякий раз, когда код состояния равен или превышает 400.

Более того, пожалуйста, будьте осторожны, поскольку не только 200 должны быть кодами статуса успеха, даже 201, 204 и т. Д. Часто используются в качестве статусов успеха.

Вот пример того, как я справился с этим

// ... connection code code code ...

// Get the response code 
int statusCode = connection.getResponseCode();

InputStream is = null;

if (statusCode >= 200 && statusCode < 400) {
   // Create an InputStream in order to extract the response object
   is = connection.getInputStream();
}
else {
   is = connection.getErrorStream();
}

// ... callback/response to your handler....

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

Надеюсь, это поможет!

2 голосов
/ 14 июня 2010

Нашел ответ здесь: Чтение сообщения об ошибке в Java

Да, я!

0 голосов
/ 09 мая 2013

У меня была та же проблема, и добавление ниже двух строк разрешило ее.

httpConn.setRequestProperty ("Connection", "Close");System.setProperty ("http.keepAlive", "false");

0 голосов
/ 14 июня 2010

Если сервер возвращает XML и вы передаете параметры в виде URL-адреса, почему бы просто не использовать библиотеку, поддерживающую JAX-RS (API веб-сервисов REST Java), такую ​​как Apache CXF ?

Я знаю, что он поддерживает JAX-RS, потому что в руководстве есть глава .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...