Bug 1599851 - [GSS](6.4.z) URL.getContent() returns VirtualFile instead of ImageProducer
Summary: [GSS](6.4.z) URL.getContent() returns VirtualFile instead of ImageProducer
Keywords:
Status: CLOSED CURRENTRELEASE
Alias: None
Product: JBoss Enterprise Application Platform 6
Classification: JBoss
Component: VFS
Version: 6.4.20
Hardware: Unspecified
OS: Unspecified
unspecified
unspecified
Target Milestone: CR1
: EAP 6.4.21
Assignee: jboss-set
QA Contact: Peter Mackay
URL:
Whiteboard:
Depends On:
Blocks: eap6421-payload 1602959 1606334
TreeView+ depends on / blocked
 
Reported: 2018-07-10 18:17 UTC by Brad Maxwell
Modified: 2019-08-19 12:44 UTC (History)
4 users (show)

Fixed In Version:
Doc Type: If docs needed, set a value
Doc Text:
Clone Of:
Environment:
Last Closed: 2019-08-19 12:44:55 UTC
Type: Bug


Attachments (Terms of Use)
JBAS-9399.war (75.19 KB, application/octet-stream)
2018-07-10 18:19 UTC, Brad Maxwell
no flags Details


Links
System ID Priority Status Summary Last Updated
Red Hat One Jira Issue Tracker JBAS-9399 Major Open URL.getContent() returns VirtualFile instead of ImageProducer in JBoss AS 6.0.0.FINAL 2019-06-10 15:14:53 UTC
Red Hat One Jira Issue Tracker JBEAP-15028 Major Verified [GSS](7.1.z) URL.getContent() returns VirtualFile instead of ImageProducer 2019-06-10 15:14:53 UTC

Description Brad Maxwell 2018-07-10 18:17:14 UTC
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}

Comment 1 Brad Maxwell 2018-07-10 18:17:42 UTC
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}

Comment 2 Brad Maxwell 2018-07-10 18:19:49 UTC
Created attachment 1457891 [details]
JBAS-9399.war


Note You need to log in before you can comment on or make changes to this bug.