jsfresourcesjsf-2weblogic-10.xmojarra

JSF1064 "Unable to find or serve resource" warning on jsf 2.0


I'm working on an Enterprise project with Java EE 5 and JSF 2.0 (Mojarra 2.0.3) on Weblogic 10.3.3

I don't have an error, but a very annoying warning in my console when going through my application.

Whenever I perform a redirect in JSF, I get a warning in my console of the following form:

Nov 7, 2011 5:36:46 PM com.sun.faces.application.resource.ResourceHandlerImpl logMissingResource
WARNING: JSF1064: Unable to find or serve resource, images/jquery-theme/ui-icons_cc0000_256x240.png.
Nov 7, 2011 5:36:46 PM com.sun.faces.application.resource.ResourceHandlerImpl logMissingResource
WARNING: 
java.net.SocketException: Software caused connection abort: socket write error
    at java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
    at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
    at weblogic.servlet.internal.ChunkOutput.writeChunkTransfer(ChunkOutput.java:507)
    at weblogic.servlet.internal.ChunkOutput.writeChunks(ChunkOutput.java:486)
    at weblogic.servlet.internal.ChunkOutput.flush(ChunkOutput.java:382)
    at weblogic.servlet.internal.ChunkOutput$2.checkForFlush(ChunkOutput.java:580)
    at weblogic.servlet.internal.ChunkOutput.write(ChunkOutput.java:306)
    at weblogic.servlet.internal.ChunkOutputWrapper.write(ChunkOutputWrapper.java:146)
    at weblogic.servlet.internal.ServletOutputStreamImpl.write(ServletOutputStreamImpl.java:138)
    at java.nio.channels.Channels$WritableByteChannelImpl.write(Channels.java:275)
    at com.sun.faces.application.resource.ResourceHandlerImpl.handleResourceRequest(ResourceHandlerImpl.java:277)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:310)

But in my application, the resource is displayed correctly. I don't know why this warning is being shown, when the image is loaded without a problem. I've read on an icefaces forum that it might be related to the <h:outputScript/> or the <h:outputStylesheet/> tags.

This is my usage of these tags:

<h:outputStylesheet name="jquery-theme/jquery-ui-1.8.16.custom.css" library="css"/>

and

<h:outputScript name="jquery-ui-1.8.16.custom.min.js" library="js"/>

These files are in the src/main/resources/css and src/main/resources/js folders respectively, and once again, they are correctly loaded and visible in the source code of the page. I just want to get rid of these warnings in my console.


Solution

  • java.net.SocketException: Software caused connection abort: socket write error

    The connection was aborted while the resource was still busy downloading. That can happen when you for example navigated to a different page, or pressed Esc, or the closed the browser window while the browser is still busy downloading all resources.

    I checked the Mojarra source code and see the following in ResourceHandlerImpl#handleResourceRequest() (lines 292-294 in Mojarra 2.1.3):

    } catch (IOException ioe) {
        send404(context, resourceName, libraryName, ioe, true);
    }
    

    So, the IOException on writing the response is been caught and forcibly handled as a 404. Personally, this should have been ignored or delegated to the servletcontainer by throws IOException, not forcibly be transformed into a HTTP 404 error.

    I've reported this as issue 2245 the Mojarra guys. Until then, you can't do anything much against it, but it may be good to know that those warnings won't be logged when the javax.faces.PROJECT_STAGE is set to Production instead of Development. Instead, it will be logged as FINE.