this is additionally compounded by
public final Object readObject(Class<?> baseType, String
resourceName, boolean localize)
throws IOException, SerializationException {
if (baseType == null) {
throw new IllegalArgumentException("baseType is null.");
}
if (resourceName == null) {
throw new IllegalArgumentException("resourceName is null.");
}
return readObject(baseType.getResource(resourceName),
localize ? new Resources(baseType.getName()) : null);
}
which uses baseType.getResource(resourceName) instead of
Thread.currentThread().getContextClassLoader().getResource()
so the complete workaround is this kludge:
Thread thread = Thread.currentThread();
ClassLoader tccl = thread.getContextClassLoader();
try {
thread.setContextClassLoader(getClass().getClassLoader());
BXMLSerializer bxml = new BXMLSerializer();
URL url =
getClass().getResource("LoginComponent.bxml");
window = (Window) bxml.readObject(url);
window.open(display);
} finally {
thread.setContextClassLoader(tccl);
}
-------- Original Message --------
Subject: pivot + osgi : class loading?
From: Andrei Pozolotin <[email protected]>
To: [email protected]
Date: Fri 13 May 2011 10:35:37 PM CDT
>
> *Greg, *hello;
>
>
> 1) I am hitting in the following issue while trying to run pivot
> in osgi environment:
>
> this example
> http://pivot.apache.org/tutorials/labels-and-image-views.html
>
> |<||Window| |title||=||"Labels"| |maximized||=||"true"|
> | ||xmlns:bxml||=||"http://pivot.apache.org/bxml"|
> | ||xmlns||=||"org.apache.pivot.wtk"||>|
> | ||<||BoxPane| |styles||=||"{padding:4,
> verticalAlignment:'center'}"||>|
> | ||<||ImageView| |image||=||"/clock.png"||/>|
> | ||<||Label| |text||=||"What time is it?"||/>|
> | ||</||BoxPane||>|
> |</||Window||>|
>
>
> 2) in terms of |ImageView| properties, it is getting translated by
> BXMLSerializer into a call |*setImage(String imageName)*| ,
> which fails to locate resource:
>
> |||ImageView ::
> /**
> * Sets the image view's image by {@linkplain
> ClassLoader#getResource(String)
> * resource name}.
> *
> * @param imageName
> * The resource name of the image to set.
> *
> * @see #setImage(URL)
> */
> * public final void setImage(String imageName) {
> * if (imageName == null) {
> throw new IllegalArgumentException("imageName is null.");
> }
>
> * ClassLoader classLoader =
> Thread.currentThread().getContextClassLoader();
> setImage(classLoader.getResource(imageName.substring(1)));
> * }
>
> |2) note that in my case the pivot package classes and
> [AWT-EventQueue-0] event queues are instantiated in osgi host
> class loader
>
>
> http://felix.apache.org/site/apache-felix-framework-launching-and-embedding.html
> but the actual call to |setImage(String imageName)| is executed in
> osgi plugin class loader;
>
> just to give you an example, when this snipped gets executed
> inside osgi plugin bundle:
>
> // class loader used by pivot
> ClassLoader loader =
> Thread.currentThread().getContextClassLoader();
> URL urlPivot = loader.getResource("");
> * log.info("urlPivot : {} ", urlPivot);
> *
> // class loader used by plugin bundle
> URL urlOSGI = getClass().getResource("");
> * log.info("urlOSGI : {}", urlOSGI);
> *
> it produces this log:
>
> 22:08:46.876 [AWT-EventQueue-0] INFO
> com.carrotgarden.core.LoginComponent - urlPivot :
>
> file:/home/user1/Workspaces/github/carrot-tester/carrot-test-osgi-ws/carrot-test-osgi-pivot-host/target/test-classes/
>
>
> 22:08:46.876 [AWT-EventQueue-0] INFO
> com.carrotgarden.core.LoginComponent - urlOSGI :
> bundle://7.0:1/com/carrotgarden/core/
>
> as you can see,
> * urlPivot :
>
> file:/home/user1/Workspaces/github/carrot-tester/carrot-test-osgi-ws/carrot-test-osgi-pivot-host/target/test-classes/
>
> *resolves back to osgi host class loader which is not visible by
> the the client plugin
>
> and
> * urlOSGI : bundle://7.0:1/com/carrotgarden/core/
> *resolves inside calling osgi bundle name space as expected;
>
>
> 3) am I missing something obvious?
> why do you use current class loading approach in pivot?
> are you open to change this?
> what would your recommend instead?
>
>
> Thank you,
>
> Andrei.
>