Bug 1599851
| Summary: | [GSS](6.4.z) URL.getContent() returns VirtualFile instead of ImageProducer | ||||||
|---|---|---|---|---|---|---|---|
| Product: | [JBoss] JBoss Enterprise Application Platform 6 | Reporter: | Brad Maxwell <bmaxwell> | ||||
| Component: | VFS | Assignee: | jboss-set | ||||
| Status: | CLOSED CURRENTRELEASE | QA Contact: | Peter Mackay <pmackay> | ||||
| Severity: | unspecified | Docs Contact: | |||||
| Priority: | unspecified | ||||||
| Version: | 6.4.20 | CC: | david.lloyd, dcihak, pmackay, rstancel | ||||
| Target Milestone: | CR1 | ||||||
| Target Release: | EAP 6.4.21 | ||||||
| Hardware: | Unspecified | ||||||
| OS: | Unspecified | ||||||
| Whiteboard: | |||||||
| Fixed In Version: | Doc Type: | If docs needed, set a value | |||||
| Doc Text: | Story Points: | --- | |||||
| Clone Of: | Environment: | ||||||
| Last Closed: | 2019-08-19 12:44:55 UTC | Type: | Bug | ||||
| Regression: | --- | Mount Type: | --- | ||||
| Documentation: | --- | CRM: | |||||
| Verified Versions: | Category: | --- | |||||
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |||||
| Cloudforms Team: | --- | Target Upstream Version: | |||||
| Embargoed: | |||||||
| Bug Depends On: | |||||||
| Bug Blocks: | 1567790, 1602959, 1606334 | ||||||
| Attachments: |
|
||||||
Workaround:
Read the content directly such as with ImageIO.read(url.openStream().getSource()
{code}
import java.awt.Image;
import javax.imageio.ImageIO;
import java.io.InputStream;
import java.beans.SimpleBeanInfo;
URL url = Thread.currentThread().getContextClassLoader().getResource(resourceName);
InputStream is = null;
try {
is = url.openStream();
return ImageIO.read(is).getSource();
} catch(Exception e) {
e.printStackTrace();
return null;
} finally {
try { is.close(); } catch(Exception e) { }
}
{code}
Created attachment 1457891 [details]
JBAS-9399.war
|
Here are an example class and a jsp to reproduce the problem: {code:title=LoadImageTest.java|borderStyle=solid} package example.loadimage.fail; import java.awt.Image; import java.beans.SimpleBeanInfo; public class LoadImageTest extends SimpleBeanInfo { public Image image; public LoadImageTest(){ image = loadImage2("icon.png"); } public static void main(String[] args) { LoadImageTest test = new LoadImageTest(); System.out.println("Is image null? " + (test.image == null)); } // Note: This method was pulled out of the JDK src file for SimpleBeanInfo.java. // This allows for easier debugging, you can actually see the local variables. public java.awt.Image loadImage2(final String resourceName) { try { final Class c = getClass(); java.awt.image.ImageProducer ip = (java.awt.image.ImageProducer) java.security.AccessController.doPrivileged( new java.security.PrivilegedAction() { public Object run() { java.net.URL url; if ((url = c.getResource(resourceName)) == null) { return null; } else { try { return url.getContent(); } catch (java.io.IOException ioe) { return null; } } } }); if (ip == null) return null; java.awt.Toolkit tk = java.awt.Toolkit.getDefaultToolkit(); return tk.createImage(ip); } catch (Exception ex) { // will end up here because the PrivilegedAction returns something that cannot be cast // to an ImageProducer when this is run in JBoss AS 6.0.0.FINAL. In JBoss the returned // object will be a VirtualFile instead of an ImageProducer. return null; } } } {code} {code:html} <%@page import=" example.loadimage.fail.LoadImageTest"%> <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> </head> <body> <% out.print("Testing<br />"); LoadImageTest test = new LoadImageTest(); out.print("Is test.image null? " + (test.image == null) + "<br />"); %> </body> </html> {code}