1 package it.com.atlassian.plugin.osgi;
2
3 import com.atlassian.plugin.osgi.ObjectModuleDescriptor;
4 import com.atlassian.plugin.osgi.PluginInContainerTestBase;
5 import com.atlassian.plugin.test.PluginJarBuilder;
6 import com.atlassian.plugin.JarPluginArtifact;
7 import com.atlassian.plugin.DefaultModuleDescriptorFactory;
8 import com.atlassian.plugin.hostcontainer.DefaultHostContainer;
9 import com.atlassian.plugin.osgi.hostcomponents.HostComponentProvider;
10 import com.atlassian.plugin.osgi.hostcomponents.ComponentRegistrar;
11 import com.atlassian.plugin.osgi.factory.OsgiPlugin;
12
13 import java.io.File;
14 import java.lang.reflect.InvocationTargetException;
15 import java.lang.reflect.Method;
16
17
18
19
20 public class TestClassLoaderEdgeCases extends PluginInContainerTestBase
21 {
22 public void testLinkageError() throws Exception
23 {
24 File privateJar = new PluginJarBuilder("private-jar")
25 .addFormattedJava("com.atlassian.plugin.osgi.Callable2",
26 "package com.atlassian.plugin.osgi;",
27 "public interface Callable2 {",
28 " String call() throws Exception;",
29 "}")
30 .build();
31
32 File pluginJar = new PluginJarBuilder("privatejartest")
33 .addFormattedResource("atlassian-plugin.xml",
34 "<atlassian-plugin name='Test' key='test.privatejar.plugin' pluginsVersion='2'>",
35 " <plugin-info>",
36 " <version>1.0</version>",
37 " </plugin-info>",
38 " <object key='obj' class='my.Foo'/>",
39 "</atlassian-plugin>")
40 .addFormattedJava("my.Foo",
41 "package my;",
42 "import com.atlassian.plugin.osgi.Callable2;",
43 "import com.atlassian.plugin.osgi.test.Callable2Factory;",
44 "public class Foo {",
45 " public String call() throws Exception { return 'hi ' + new Callable2Factory().create().call();}",
46 "}")
47 .addFile("META-INF/lib/private.jar", privateJar)
48 .build();
49 DefaultModuleDescriptorFactory factory = new DefaultModuleDescriptorFactory(new DefaultHostContainer());
50 factory.addModuleDescriptor("object", ObjectModuleDescriptor.class);
51 initPluginManager(null, factory);
52 pluginManager.installPlugin(new JarPluginArtifact(pluginJar));
53 assertEquals(1, pluginManager.getEnabledPlugins().size());
54 OsgiPlugin plugin = (OsgiPlugin) pluginManager.getPlugin("test.privatejar.plugin");
55 assertEquals("Test", plugin.getName());
56 Class foo = plugin.getModuleDescriptor("obj").getModuleClass();
57 Object fooObj = plugin.autowire(foo);
58 try
59 {
60 Method method = foo.getMethod("call");
61 method.invoke(fooObj);
62 fail("Should have thrown linkage error");
63 }
64 catch (InvocationTargetException ex)
65 {
66 if (ex.getTargetException() instanceof LinkageError) {
67
68 }
69 else
70 {
71 fail("Should have thrown linkage error");
72 }
73 }
74 }
75 }