Я выполняю вызов веб-службы REST через брандмауэр со следующим кодом:
try {
String url="http://testcall.us:1300/abc/testapi/json/method1"; //dummy url
Client client = Client.create();
WebResource webResource = client.resource(url);
ClientResponse response = webResource.accept("application/json")
.type(MediaType.APPLICATION_JSON)
.header("content-type", "application/json")
.get(ClientResponse.class);
System.out.println("response.getStatus" + response.getStatus());
} catch (Exception e) {
logger.error("Error making webservice call", e);
}
Код отлично работает в моей локальной среде Windows.Но когда я делаю тот же запрос с другого сервера Linux, я получаю следующее исключение:
com.sun.jersey.api.client.ClientHandlerException: java.io.EOFException: Response had end of stream after 0 bytes
at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:155)
at com.sun.jersey.api.client.Client.handle(Client.java:652)
at com.sun.jersey.api.client.WebResource.handle(WebResource.java:682)
at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74)
.......
.......
Caused By: java.io.EOFException: Response had end of stream after 0 bytes
at weblogic.net.http.MessageHeader.isHTTP(MessageHeader.java:312)
at weblogic.net.http.MessageHeader.parseHeader(MessageHeader.java:232)
at weblogic.net.http.HttpClient.parseHTTP(HttpClient.java:554)
at weblogic.net.http.HttpURLConnection.getInputStream(HttpURLConnection.java:688)
......
......
Когда я делаю другой запрос POST с того же URL-адреса (другим методом),
try {
String url="http://testcall.us:1300/abc/testapi/json/method2"; //dummy url
Client client = Client.create();
WebResource webResource = client
.resource(url);
String input = "{\"Id\":" + String.valueOf(id) + ",\"Status\":" + null + "}";
ClientResponse response = webResource.type("application/json")
.header("Environment", "dev")
.accept("application/json")
.post(ClientResponse.class, input);
if (response.getStatus() != 200 && response.getStatus() != 201) {
logger.error("REST ws call failed. HTTP error code : " + response.getStatus());
}
System.out.println("Output from Server .... \n");
String output = response.getEntity(String.class);
System.out.println(output);
} catch (Exception e) {
logger.error("Error submitting request", e );
}
Я получаю следующее исключение:
<Error submitting request
com.sun.jersey.api.client.ClientHandlerException: java.io.IOException: Connection reset by peer
at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:155)
at com.sun.jersey.api.client.Client.handle(Client.java:652)
at com.sun.jersey.api.client.WebResource.handle(WebResource.java:682)
at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74)
at com.sun.jersey.api.client.WebResource$Builder.post(WebResource.java:570)
.....
.....
Caused By: java.io.IOException: Connection reset by peer
at sun.nio.ch.FileDispatcherImpl.readv0(Native Method)
at sun.nio.ch.SocketDispatcher.readv(SocketDispatcher.java:43)
at sun.nio.ch.IOUtil.read(IOUtil.java:278)
Этот метод снова прекрасно работает в моей локальной среде.Что может быть причиной того, что тот же URL-адрес вызывает исключение, пока он отлично работает в другой среде?Насколько мне известно, правила брандмауэра были одобрены для среды Linux.Заранее благодарим за понимание.
ОБНОВЛЕНИЕ Я только что обнаружил, что правило брандмауэра, представленное для этого URL, содержало «https» вместо «http».Но, насколько я знаю, брандмауэр не заботится, является ли он «http» или «https».У меня нет доступа к машине с Linux, поэтому я не могу проверить, можем ли мы получить ответ, используя там URL :(.
ОБНОВЛЕНИЕ Используя команду 'curl' на putty, я могуполучить ответ на сервере Linux. Означает ли это, что чего-то не хватает в конфигурациях java / weblogic ??