[Jersey-issues] [JIRA] Updated: (JERSEY-1604) IOException "connection closed" happens on calling delete without parameters

  • From: "Michal Gajdos (JIRA)" <jira-no-reply@...>
  • To: issues@...
  • Subject: [Jersey-issues] [JIRA] Updated: (JERSEY-1604) IOException "connection closed" happens on calling delete without parameters
  • Date: Thu, 10 Jan 2013 09:18:52 +0000 (GMT+00:00)
  • Auto-submitted: auto-generated


     [ 
http://java.net/jira/browse/JERSEY-1604?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Michal Gajdos updated JERSEY-1604:
----------------------------------

         Assignee: Michal Gajdos
    Fix Version/s: 1.17
      Description: 
When calling WebResource.delete() I'm catching IOException "connection 
closed" but HTTP Status is OK. I've investigated the issue it looks like 
there is a bug in ClientResponse.hasEntity method.

Here is what I have in my case:

{code}
...
 public boolean hasEntity() {
        try {
            if (entity.available() > 0) {        // returns 0 
                return true;
            } else if (entity.markSupported()) { // returns true and this is 
very strange since entity is an instance of HttpClientResponseInputStream
                entity.mark(1);                  // 
                int i = entity.read();           // i == -1
                entity.reset();                  // Here is IOException is 
thrown
                return i != -1;
...
{code}

Now let's take a look at javadocs: 
http://docs.oracle.com/javase/6/docs/api/java/io/InputStream.html#reset()

If the method markSupported returns true, then:
 - If the method mark has not been called since the stream was created, or 
the number of bytes read from the stream since mark was last called is larger 
than the argument to mark at that last call, then an IOException might be 
thrown.


So I guess the correct code should be something like this:

{code}
...
public boolean hasEntity() {
        try {
            if (entity.available() > 0) {
                return true;
            } else if (entity.markSupported()) {
                entity.mark(1);
                int i = entity.read();
                if (i == -1) {
                    return false;
                } else {
                    entity.reset();
                    return true;
                }
...
{code}

  was:
When calling WebResource.delete() I'm catching IOException "connection 
closed" but HTTP Status is OK. I've investigated the issue it looks like 
there is a bug in ClientResponse.hasEntity method.

Here is what I have in my case:
...
 public boolean hasEntity() {
        try {
            if (entity.available() > 0) {        // returns 0 
                return true;
            } else if (entity.markSupported()) { // returns true and this is 
very strange since entity is an instance of HttpClientResponseInputStream
                entity.mark(1);                  // 
                int i = entity.read();           // i == -1
                entity.reset();                  // Here is IOException is 
thrown
                return i != -1;
...

Now let's take a look at javadocs: 
http://docs.oracle.com/javase/6/docs/api/java/io/InputStream.html#reset()

If the method markSupported returns true, then:
 - If the method mark has not been called since the stream was created, or 
the number of bytes read from the stream since mark was last called is larger 
than the argument to mark at that last call, then an IOException might be 
thrown.


So I guess the correct code should be something like this:
...
 public boolean hasEntity() {
        try {
            if (entity.available() > 0) {
                return true;
            } else if (entity.markSupported()) {
                entity.mark(1);
                int i = entity.read();
                if (i == -1) {
                    return false;
                } else {
                    entity.reset();
                    return true;
                }
...



> IOException "connection closed" happens on calling delete without parameters
> ----------------------------------------------------------------------------
>
>                 Key: JERSEY-1604
>                 URL: http://java.net/jira/browse/JERSEY-1604
>             Project: jersey
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 1.15
>            Reporter: krainevsky
>            Assignee: Michal Gajdos
>             Fix For: 1.17
>
>
> When calling WebResource.delete() I'm catching IOException "connection 
> closed" but HTTP Status is OK. I've investigated the issue it looks like 
> there is a bug in ClientResponse.hasEntity method.
> Here is what I have in my case:
> {code}
> ...
>  public boolean hasEntity() {
>         try {
>             if (entity.available() > 0) {        // returns 0 
>                 return true;
>             } else if (entity.markSupported()) { // returns true and this 
> is very strange since entity is an instance of HttpClientResponseInputStream
>                 entity.mark(1);                  // 
>                 int i = entity.read();           // i == -1
>                 entity.reset();                  // Here is IOException is 
> thrown
>                 return i != -1;
> ...
> {code}
> Now let's take a look at javadocs: 
> http://docs.oracle.com/javase/6/docs/api/java/io/InputStream.html#reset()
> If the method markSupported returns true, then:
>  - If the method mark has not been called since the stream was created, or 
> the number of bytes read from the stream since mark was last called is 
> larger than the argument to mark at that last call, then an IOException 
> might be thrown.
> So I guess the correct code should be something like this:
> {code}
> ...
> public boolean hasEntity() {
>         try {
>             if (entity.available() > 0) {
>                 return true;
>             } else if (entity.markSupported()) {
>                 entity.mark(1);
>                 int i = entity.read();
>                 if (i == -1) {
>                     return false;
>                 } else {
>                     entity.reset();
>                     return true;
>                 }
> ...
> {code}

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://java.net/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


[Jersey-issues] [JIRA] Updated: (JERSEY-1604) IOException "connection closed" happens on calling delete without parameters

Michal Gajdos (JIRA) 01/10/2013

<Possible follow-up(s)>

[Jersey-issues] [JIRA] Updated: (JERSEY-1604) IOException "connection closed" happens on calling delete without parameters

Pavel Bucek (JIRA) 01/18/2013
Terms of Use; Privacy Policy; Copyright ©2013-2015 (revision 20150226.965aeb8)
 
 
Close
loading
Please Confirm
Close