<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Test</title>
<link rel="stylesheet" href="http://www.osgi.org/www/osgi.css" type="text/css">
<style type="text/css">
					.code { font-family: Courier,
					sans-serif; }
					.error,.ok, .info,
					.warning {
					background-position: 4 4;
					background-repeat:no-repeat;
					width:10px; }
					.ok {
					background-image:url("http://www.osgi.org/www/greenball.png"); }
					.warning {
					background-image:url("http://www.osgi.org/www/orangeball.png"); }
					.error {
					background-image:url("http://www.osgi.org/www/redball.png"); }
					.info {
					background-image:url("http://www.osgi.org/www/info.png"); }
					.class { padding-top:20px; padding-bottom: 10px; font-size:12;
					font-weight:bold; }

					h2 { margin-top : 20px; margin-bottom:10px; }
					table, th, td { border: 1px solid black; padding:5px; }
					table {
					border-collapse:collapse; width:100%; margin-top:20px;}
					th { height:20px; }
					} 
				</style>
<script language="javascript">
					function toggle(name) {
					var el =
					document.getElementById(name);
					if ( el.style.display != 'none' ) {
					el.style.display = 'none';
					}
					else {
					el.style.display = '';
					}
					}				
				</script>
</head>
<body style="width:800px">
<h2>Summary</h2>
<p>The following table provides a sumary of the test information.</p>
<table>
<tr>
<th>Property Key</th><th>Property Value</th>
</tr>
<tr>
<td width="50%">Target</td><td>/Users/holly/Documents/aries/ct/jar/org.osgi.test.cases.jndi-4.2.0.jar</td>
</tr>
<tr>
<td width="50%">Framework</td><td>org.eclipse.osgi.launch.Equinox@97d01f</td>
</tr>
<tr>
<td width="50%">Testrun</td><td>Wed Jun 20 20:18:52 BST 2012</td>
</tr>
<tr>
<th colspan="2">Bundles</th>
</tr>
<tr>
<td>org.eclipse.osgi</td><td>3.5.0.v20090520</td>
</tr>
<tr>
<td>osgi.enterprise</td><td>4.2.0.201003190513</td>
</tr>
<tr>
<td>org.ops4j.pax.logging.pax-logging-api</td><td>1.5.0</td>
</tr>
<tr>
<td>org.apache.aries.util</td><td>1.0.0.SNAPSHOT</td>
</tr>
<tr>
<td>org.apache.aries.proxy</td><td>1.0.0.SNAPSHOT</td>
</tr>
<tr>
<td>org.apache.aries.jndi</td><td>1.0.0.SNAPSHOT</td>
</tr>
<tr>
<td>org.osgi.test.cases.jndi</td><td>4.2.0.201004301238</td>
</tr>
</table>
<h2>Testcases</h2>
<p>The following table shows the results of each test. A red icon indicates that the 
					test failed or had an error. A green icon
					indicates success. Any errors or failure messages 
					will be displayed as a list beneath the test name. To see the 
					exception, click on the info icon on the right.</p>
<table width="100%">
<tr>
<th width="15px"><img src="http://www.osgi.org/www/colorball.png" title="Status. red=bad, orange=almost good, green is perfect"></th><th>Test</th><th>Failures</th><th>Error</th><th>Info</th>
</tr>
<tr>
<td width="15px" class="
                                        warning
                                    "></td><td class="code">testReferenceableLookup<ul>
<li></li>
</ul>
<pre id="testReferenceableLookup" style="display:none">
<div class="code">

javax.naming.NamingException: Unable to retrieve reference
	at org.osgi.test.cases.jndi.provider.CTContext.lookup(CTContext.java:176)
	at org.osgi.test.cases.jndi.provider.CTContext.lookup(CTContext.java:159)
	at org.apache.aries.jndi.DelegateContext.lookup(DelegateContext.java:161)
	at javax.naming.InitialContext.lookup(InitialContext.java:392)
	at org.osgi.test.cases.jndi.tests.TestObjectFactory.testReferenceableLookup(TestObjectFactory.java:62)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at junit.framework.TestCase.runTest(TestCase.java:164)
	at junit.framework.TestCase.runBare(TestCase.java:130)
	at junit.framework.TestResult$1.protect(TestResult.java:106)
	at junit.framework.TestResult.runProtected(TestResult.java:124)
	at junit.framework.TestResult.run(TestResult.java:109)
	at junit.framework.TestCase.run(TestCase.java:120)
	at junit.framework.TestSuite.runTest(TestSuite.java:230)
	at junit.framework.TestSuite.run(TestSuite.java:225)
	at junit.framework.TestSuite.runTest(TestSuite.java:230)
	at junit.framework.TestSuite.run(TestSuite.java:225)
	at aQute.junit.runtime.Target.doTesting(Target.java:234)
	at aQute.junit.runtime.Target.run(Target.java:57)
	at aQute.junit.runtime.Target.main(Target.java:37)

 </div>
</pre>
</td><td>0</td><td>1</td><td><img src="http://www.osgi.org/www/info.png" onclick="toggle('testReferenceableLookup')" title="Show Exceptions"></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testReferenceableLookupWithAttributes</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testReferenceLookup</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testReferenceLookupWithAttributes</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        warning
                                    "></td><td class="code">testReferenceLookupWithNoFactory<ul>
<li></li>
</ul>
<pre id="testReferenceLookupWithNoFactory" style="display:none">
<div class="code">

javax.naming.NamingException: Unable to retrieve reference
	at org.osgi.test.cases.jndi.provider.CTContext.lookup(CTContext.java:176)
	at org.osgi.test.cases.jndi.provider.CTContext.lookup(CTContext.java:159)
	at org.apache.aries.jndi.DelegateContext.lookup(DelegateContext.java:161)
	at javax.naming.InitialContext.lookup(InitialContext.java:392)
	at org.osgi.test.cases.jndi.tests.TestObjectFactory.testReferenceLookupWithNoFactory(TestObjectFactory.java:166)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at junit.framework.TestCase.runTest(TestCase.java:164)
	at junit.framework.TestCase.runBare(TestCase.java:130)
	at junit.framework.TestResult$1.protect(TestResult.java:106)
	at junit.framework.TestResult.runProtected(TestResult.java:124)
	at junit.framework.TestResult.run(TestResult.java:109)
	at junit.framework.TestCase.run(TestCase.java:120)
	at junit.framework.TestSuite.runTest(TestSuite.java:230)
	at junit.framework.TestSuite.run(TestSuite.java:225)
	at junit.framework.TestSuite.runTest(TestSuite.java:230)
	at junit.framework.TestSuite.run(TestSuite.java:225)
	at aQute.junit.runtime.Target.doTesting(Target.java:234)
	at aQute.junit.runtime.Target.run(Target.java:57)
	at aQute.junit.runtime.Target.main(Target.java:37)

 </div>
</pre>
</td><td>0</td><td>1</td><td><img src="http://www.osgi.org/www/info.png" onclick="toggle('testReferenceLookupWithNoFactory')" title="Show Exceptions"></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testReferenceLookupWithNoFactoryAndAttributes</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testReferenceLookupWithBuilder</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testReferenceLookupWithBuilderAndAttributes</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testReferenceLookupWithBuilderAndNoFactory</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testReferenceLookupWithBuilderAndNoFactoryAndAttributes</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        warning
                                    "></td><td class="code">testObjectFactoryRemoval<ul>
<li></li>
</ul>
<pre id="testObjectFactoryRemoval" style="display:none">
<div class="code">

javax.naming.NamingException: Unable to retrieve reference
	at org.osgi.test.cases.jndi.provider.CTContext.lookup(CTContext.java:176)
	at org.osgi.test.cases.jndi.provider.CTContext.lookup(CTContext.java:159)
	at org.apache.aries.jndi.DelegateContext.lookup(DelegateContext.java:161)
	at javax.naming.InitialContext.lookup(InitialContext.java:392)
	at org.osgi.test.cases.jndi.tests.TestObjectFactory.testObjectFactoryRemoval(TestObjectFactory.java:326)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at junit.framework.TestCase.runTest(TestCase.java:164)
	at junit.framework.TestCase.runBare(TestCase.java:130)
	at junit.framework.TestResult$1.protect(TestResult.java:106)
	at junit.framework.TestResult.runProtected(TestResult.java:124)
	at junit.framework.TestResult.run(TestResult.java:109)
	at junit.framework.TestCase.run(TestCase.java:120)
	at junit.framework.TestSuite.runTest(TestSuite.java:230)
	at junit.framework.TestSuite.run(TestSuite.java:225)
	at junit.framework.TestSuite.runTest(TestSuite.java:230)
	at junit.framework.TestSuite.run(TestSuite.java:225)
	at aQute.junit.runtime.Target.doTesting(Target.java:234)
	at aQute.junit.runtime.Target.run(Target.java:57)
	at aQute.junit.runtime.Target.main(Target.java:37)

 </div>
</pre>
</td><td>0</td><td>1</td><td><img src="http://www.osgi.org/www/info.png" onclick="toggle('testObjectFactoryRemoval')" title="Show Exceptions"></td>
</tr>
<tr>
<td width="15px" class="
                                        warning
                                    "></td><td class="code">testObjectFactoryBuilderRemoval<ul>
<li></li>
</ul>
<pre id="testObjectFactoryBuilderRemoval" style="display:none">
<div class="code">

javax.naming.NamingException: Unable to retrieve reference
	at org.osgi.test.cases.jndi.provider.CTContext.lookup(CTContext.java:176)
	at org.osgi.test.cases.jndi.provider.CTContext.lookup(CTContext.java:159)
	at org.apache.aries.jndi.DelegateContext.lookup(DelegateContext.java:161)
	at javax.naming.InitialContext.lookup(InitialContext.java:392)
	at org.osgi.test.cases.jndi.tests.TestObjectFactory.testObjectFactoryBuilderRemoval(TestObjectFactory.java:353)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at junit.framework.TestCase.runTest(TestCase.java:164)
	at junit.framework.TestCase.runBare(TestCase.java:130)
	at junit.framework.TestResult$1.protect(TestResult.java:106)
	at junit.framework.TestResult.runProtected(TestResult.java:124)
	at junit.framework.TestResult.run(TestResult.java:109)
	at junit.framework.TestCase.run(TestCase.java:120)
	at junit.framework.TestSuite.runTest(TestSuite.java:230)
	at junit.framework.TestSuite.run(TestSuite.java:225)
	at junit.framework.TestSuite.runTest(TestSuite.java:230)
	at junit.framework.TestSuite.run(TestSuite.java:225)
	at aQute.junit.runtime.Target.doTesting(Target.java:234)
	at aQute.junit.runtime.Target.run(Target.java:57)
	at aQute.junit.runtime.Target.main(Target.java:37)

 </div>
</pre>
</td><td>0</td><td>1</td><td><img src="http://www.osgi.org/www/info.png" onclick="toggle('testObjectFactoryBuilderRemoval')" title="Show Exceptions"></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testLookupOfJREProvidedContexts</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testLookupWithSpecificInitialContextFactory</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testLookupWithSpecificInitialDirContextFactory</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testDefaultLookupWithInitialContextFactory</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testDefaultLookupWithInitialDirContextFactory</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testLookupWithInitialContextFactoryBuilder</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testLookupWithInitialDirContextFactoryBuilder</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testDefaultLookupWithInitialContextFactoryBuilder</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testDefaultLookupWithInitialDirContextFactoryBuilder</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testLookupWithJndiPropertiesFile</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testLookupWithNoMatchingContext</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testDefaultLookupWithNoMatchingContext</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testInitialContextFactoryBuilderExceptionHandling</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testProviderUnregistration</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testProviderUnregistrationWithBuilder</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testContextRebinding</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testUngetContextManager</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        warning
                                    "></td><td class="code">testServiceRanking<ul>
<li></li>
</ul>
<pre id="testServiceRanking" style="display:none">
<div class="code">

java.lang.IllegalArgumentException: org.apache.aries.proxy.UnableToProxyException: The class org.osgi.test.cases.jndi.provider.CTInitialContextFactory is not an interface and therefore a proxy cannot be generated.
	at org.apache.aries.jndi.services.ServiceHelper.proxyPriviledged(ServiceHelper.java:363)
	at org.apache.aries.jndi.services.ServiceHelper.access$700(ServiceHelper.java:66)
	at org.apache.aries.jndi.services.ServiceHelper$1.run(ServiceHelper.java:287)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.apache.aries.jndi.services.ServiceHelper.proxy(ServiceHelper.java:284)
	at org.apache.aries.jndi.services.ServiceHelper.getService(ServiceHelper.java:258)
	at org.apache.aries.jndi.url.ServiceRegistryContext.lookup(ServiceRegistryContext.java:102)
	at org.apache.aries.jndi.url.ServiceRegistryContext.lookup(ServiceRegistryContext.java:144)
	at org.apache.aries.jndi.DelegateContext.lookup(DelegateContext.java:161)
	at org.osgi.test.cases.jndi.tests.TestJNDIContextManager.testServiceRanking(TestJNDIContextManager.java:576)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at junit.framework.TestCase.runTest(TestCase.java:164)
	at junit.framework.TestCase.runBare(TestCase.java:130)
	at junit.framework.TestResult$1.protect(TestResult.java:106)
	at junit.framework.TestResult.runProtected(TestResult.java:124)
	at junit.framework.TestResult.run(TestResult.java:109)
	at junit.framework.TestCase.run(TestCase.java:120)
	at junit.framework.TestSuite.runTest(TestSuite.java:230)
	at junit.framework.TestSuite.run(TestSuite.java:225)
	at junit.framework.TestSuite.runTest(TestSuite.java:230)
	at junit.framework.TestSuite.run(TestSuite.java:225)
	at aQute.junit.runtime.Target.doTesting(Target.java:234)
	at aQute.junit.runtime.Target.run(Target.java:57)
	at aQute.junit.runtime.Target.main(Target.java:37)
Caused by: org.apache.aries.proxy.UnableToProxyException: The class org.osgi.test.cases.jndi.provider.CTInitialContextFactory is not an interface and therefore a proxy cannot be generated.
	at org.apache.aries.proxy.impl.JdkProxyManager.getInterfaces(JdkProxyManager.java:43)
	at org.apache.aries.proxy.impl.JdkProxyManager.createNewProxy(JdkProxyManager.java:36)
	at org.apache.aries.proxy.impl.AbstractProxyManager.createDelegatingInterceptingProxy(AbstractProxyManager.java:75)
	at org.apache.aries.proxy.impl.AbstractProxyManager.createDelegatingProxy(AbstractProxyManager.java:40)
	at org.apache.aries.jndi.services.ServiceHelper.proxyPriviledged(ServiceHelper.java:361)
	... 26 more

 </div>
</pre>
</td><td>0</td><td>1</td><td><img src="http://www.osgi.org/www/info.png" onclick="toggle('testServiceRanking')" title="Show Exceptions"></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testServiceRankingOnContextCreation</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        warning
                                    "></td><td class="code">testServiceRanking<ul>
<li></li>
</ul>
<pre id="testServiceRanking" style="display:none">
<div class="code">

java.lang.IllegalArgumentException: org.apache.aries.proxy.UnableToProxyException: The class org.osgi.test.cases.jndi.provider.CTInitialContextFactory is not an interface and therefore a proxy cannot be generated.
	at org.apache.aries.jndi.services.ServiceHelper.proxyPriviledged(ServiceHelper.java:363)
	at org.apache.aries.jndi.services.ServiceHelper.access$700(ServiceHelper.java:66)
	at org.apache.aries.jndi.services.ServiceHelper$1.run(ServiceHelper.java:287)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.apache.aries.jndi.services.ServiceHelper.proxy(ServiceHelper.java:284)
	at org.apache.aries.jndi.services.ServiceHelper.getService(ServiceHelper.java:258)
	at org.apache.aries.jndi.url.ServiceRegistryContext.lookup(ServiceRegistryContext.java:102)
	at org.apache.aries.jndi.url.ServiceRegistryContext.lookup(ServiceRegistryContext.java:144)
	at org.apache.aries.jndi.DelegateContext.lookup(DelegateContext.java:161)
	at javax.naming.InitialContext.lookup(InitialContext.java:392)
	at org.osgi.test.cases.jndi.tests.TestInitialContextFactory.testServiceRanking(TestInitialContextFactory.java:389)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at junit.framework.TestCase.runTest(TestCase.java:164)
	at junit.framework.TestCase.runBare(TestCase.java:130)
	at junit.framework.TestResult$1.protect(TestResult.java:106)
	at junit.framework.TestResult.runProtected(TestResult.java:124)
	at junit.framework.TestResult.run(TestResult.java:109)
	at junit.framework.TestCase.run(TestCase.java:120)
	at junit.framework.TestSuite.runTest(TestSuite.java:230)
	at junit.framework.TestSuite.run(TestSuite.java:225)
	at junit.framework.TestSuite.runTest(TestSuite.java:230)
	at junit.framework.TestSuite.run(TestSuite.java:225)
	at aQute.junit.runtime.Target.doTesting(Target.java:234)
	at aQute.junit.runtime.Target.run(Target.java:57)
	at aQute.junit.runtime.Target.main(Target.java:37)
Caused by: org.apache.aries.proxy.UnableToProxyException: The class org.osgi.test.cases.jndi.provider.CTInitialContextFactory is not an interface and therefore a proxy cannot be generated.
	at org.apache.aries.proxy.impl.JdkProxyManager.getInterfaces(JdkProxyManager.java:43)
	at org.apache.aries.proxy.impl.JdkProxyManager.createNewProxy(JdkProxyManager.java:36)
	at org.apache.aries.proxy.impl.AbstractProxyManager.createDelegatingInterceptingProxy(AbstractProxyManager.java:75)
	at org.apache.aries.proxy.impl.AbstractProxyManager.createDelegatingProxy(AbstractProxyManager.java:40)
	at org.apache.aries.jndi.services.ServiceHelper.proxyPriviledged(ServiceHelper.java:361)
	... 27 more

 </div>
</pre>
</td><td>0</td><td>1</td><td><img src="http://www.osgi.org/www/info.png" onclick="toggle('testServiceRanking')" title="Show Exceptions"></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testServiceRankingOnContextCreation</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testSpecificInitialContextFactory</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testSpecificInitialDirContextFactory</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testUnspecifiedInitialContextFactory</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testUnspecifiedInitialDirContextFactory</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testInitialContextFactoryBuilderWithFactory</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testInitialDirContextFactoryBuilderWithFactory</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testInitialContextFactoryBuilderWithNoFactory</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testInitialDirContextFactoryBuilderWithNoFactory</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testInitialContextFactoryFromPropertiesFile</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testInitialContextFactoryRemoval</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testInitialContextFactoryBuilderRemoval</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testNoInitialContextFound</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testURLContextFactoryRegistration</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testURLContextFactoryRemoval</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testGetObjectInstanceWithReferenceable</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testGetObjectInstanceWithReferencableAndAttributes</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testGetObjectInstanceWithNoReference</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testGetObjectInstanceWithNoReferenceAndAttributes</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testGetObjectInstanceWithFactoryName</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testGetObjectInstanceWithFactoryNameAndAttributes</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testGetObjectInstanceWithNoFactoryName</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testGetObjectInstanceWithNoFactoryNameAndAttributes</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        warning
                                    "></td><td class="code">testGetObjectInstanceWithNoFactoryNameAndURL<ul>
<li></li>
</ul>
<pre id="testGetObjectInstanceWithNoFactoryNameAndURL" style="display:none">
<div class="code">

javax.naming.NamingException: Unable to retrieve reference
	at org.osgi.test.cases.jndi.provider.CTContext.lookup(CTContext.java:176)
	at org.osgi.test.cases.jndi.provider.CTContext.lookup(CTContext.java:159)
	at org.osgi.test.cases.jndi.provider.ct.ctURLContext.lookup(ctURLContext.java:147)
	at org.osgi.test.cases.jndi.provider.ct.ctURLContextFactory.getObjectInstance(ctURLContextFactory.java:41)
	at org.apache.aries.jndi.ObjectFactoryHelper.getObjectInstanceUsingRefAddress(ObjectFactoryHelper.java:229)
	at org.apache.aries.jndi.ObjectFactoryHelper.getObjectInstance(ObjectFactoryHelper.java:79)
	at org.apache.aries.jndi.ProviderAdminService.getObjectInstance(ProviderAdminService.java:45)
	at org.osgi.test.cases.jndi.tests.TestJNDIProviderAdmin.testGetObjectInstanceWithNoFactoryNameAndURL(TestJNDIProviderAdmin.java:209)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at junit.framework.TestCase.runTest(TestCase.java:164)
	at junit.framework.TestCase.runBare(TestCase.java:130)
	at junit.framework.TestResult$1.protect(TestResult.java:106)
	at junit.framework.TestResult.runProtected(TestResult.java:124)
	at junit.framework.TestResult.run(TestResult.java:109)
	at junit.framework.TestCase.run(TestCase.java:120)
	at junit.framework.TestSuite.runTest(TestSuite.java:230)
	at junit.framework.TestSuite.run(TestSuite.java:225)
	at junit.framework.TestSuite.runTest(TestSuite.java:230)
	at junit.framework.TestSuite.run(TestSuite.java:225)
	at aQute.junit.runtime.Target.doTesting(Target.java:234)
	at aQute.junit.runtime.Target.run(Target.java:57)
	at aQute.junit.runtime.Target.main(Target.java:37)

 </div>
</pre>
</td><td>0</td><td>1</td><td><img src="http://www.osgi.org/www/info.png" onclick="toggle('testGetObjectInstanceWithNoFactoryNameAndURL')" title="Show Exceptions"></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testGetObjectInstanceWithBuilder</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testGetObjectInstanceWithBuilderAndAttributes</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testGetObjectInstanceWithMissingFactory</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testGetObjectInstanceWithMissingFactoryAndAttributes</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testGetObjectInstanceWithAttributesAndNoDirObjectFactory</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testSignature</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testServiceLookup</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testServiceLookupWithRebinding</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testServiceLookupWithoutRebinding</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testMultipleServiceLookupWithListBindings</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testMultipleServiceLookupWithList</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testMultipleServiceLookupWithRebinding</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testBundleContextLookup</td><td>0</td><td>0</td><td></td>
</tr>
<tr>
<td width="15px" class="
                                        ok
                                    "></td><td class="code">testServiceNameProperty</td><td>0</td><td>0</td><td></td>
</tr>
</table>
<br>
<h2>Coverage</h2>
<p>The following table provides a sumary of the coverage based on static analysis.
					A red icon indicates the method is never referred. An orange icon indicates there is
					only one method referring to the method and a green icon indicates there are 2 or more
					references. The references are shown by clicking on the info icon. This table is based on static analysis so it is not possible to see
					how often the method is called and with what parameters.</p>
<table width="100%">
<tr>
<th width="15px"></th><th>org.osgi.service.jndi.JNDIContextManager</th><th></th><th></th>
</tr>
<tr>
<td width="15px" class="
													ok
												"></td><td class="code">Context JNDIContextManager.newInitialContext()<div class="code" style="display:none;margin:4;padding:8; background-color: #FFFFCC;" id="Context JNDIContextManager.newInitialContext()" title="Callers">void TestJNDIContextManager.testDefaultLookupWithInitialContextFactory()<br>void TestJNDIContextManager.testDefaultLookupWithInitialContextFactoryBuilder()<br>void TestJNDIContextManager.testLookupWithJndiPropertiesFile()<br>void TestJNDIContextManager.testDefaultLookupWithNoMatchingContext()<br>void TestJNDIContextManager.testInitialContextFactoryBuilderExceptionHandling()<br>void TestJNDIContextManager.testServiceRanking()<br>void TestJNDIContextManager.testServiceRankingOnContextCreation()<br>
</div>
</td><td>7</td><td><img src="http://www.osgi.org/www/info.png" onclick="toggle('Context JNDIContextManager.newInitialContext()')" title="Show/Hide Callers"></td>
</tr>
<tr>
<td width="15px" class="
													ok
												"></td><td class="code">Context JNDIContextManager.newInitialContext(Map)<div class="code" style="display:none;margin:4;padding:8; background-color: #FFFFCC;" id="Context JNDIContextManager.newInitialContext(Map)" title="Callers">void TestJNDIProviderAdmin.testGetObjectInstanceWithNoFactoryNameAndURL()<br>void TestJNDIContextManager.testLookupOfJREProvidedContexts()<br>void TestJNDIContextManager.testLookupWithSpecificInitialContextFactory()<br>void TestJNDIContextManager.testLookupWithInitialContextFactoryBuilder()<br>void TestJNDIContextManager.testLookupWithNoMatchingContext()<br>void TestJNDIContextManager.testProviderUnregistration()<br>void TestJNDIContextManager.testProviderUnregistrationWithBuilder()<br>void TestJNDIContextManager.testContextRebinding()<br>void TestJNDIContextManager.testUngetContextManager()<br>
</div>
</td><td>9</td><td><img src="http://www.osgi.org/www/info.png" onclick="toggle('Context JNDIContextManager.newInitialContext(Map)')" title="Show/Hide Callers"></td>
</tr>
<tr>
<td width="15px" class="
													ok
												"></td><td class="code">DirContext JNDIContextManager.newInitialDirContext()<div class="code" style="display:none;margin:4;padding:8; background-color: #FFFFCC;" id="DirContext JNDIContextManager.newInitialDirContext()" title="Callers">void TestJNDIContextManager.testDefaultLookupWithInitialDirContextFactory()<br>void TestJNDIContextManager.testDefaultLookupWithInitialDirContextFactoryBuilder()<br>
</div>
</td><td>2</td><td><img src="http://www.osgi.org/www/info.png" onclick="toggle('DirContext JNDIContextManager.newInitialDirContext()')" title="Show/Hide Callers"></td>
</tr>
<tr>
<td width="15px" class="
													ok
												"></td><td class="code">DirContext JNDIContextManager.newInitialDirContext(Map)<div class="code" style="display:none;margin:4;padding:8; background-color: #FFFFCC;" id="DirContext JNDIContextManager.newInitialDirContext(Map)" title="Callers">void TestJNDIContextManager.testLookupWithSpecificInitialDirContextFactory()<br>void TestJNDIContextManager.testLookupWithInitialDirContextFactoryBuilder()<br>
</div>
</td><td>2</td><td><img src="http://www.osgi.org/www/info.png" onclick="toggle('DirContext JNDIContextManager.newInitialDirContext(Map)')" title="Show/Hide Callers"></td>
</tr>
<tr>
<th width="15px"></th><th>org.osgi.service.jndi.JNDIProviderAdmin</th><th></th><th></th>
</tr>
<tr>
<td width="15px" class="
													ok
												"></td><td class="code">Object JNDIProviderAdmin.getObjectInstance(Object,Name,Context,Map)<div class="code" style="display:none;margin:4;padding:8; background-color: #FFFFCC;" id="Object JNDIProviderAdmin.getObjectInstance(Object,Name,Context,Map)" title="Callers">void TestJNDIProviderAdmin.testGetObjectInstanceWithReferenceable()<br>void TestJNDIProviderAdmin.testGetObjectInstanceWithNoReference()<br>void TestJNDIProviderAdmin.testGetObjectInstanceWithFactoryName()<br>void TestJNDIProviderAdmin.testGetObjectInstanceWithNoFactoryName()<br>void TestJNDIProviderAdmin.testGetObjectInstanceWithNoFactoryNameAndURL()<br>void TestJNDIProviderAdmin.testGetObjectInstanceWithBuilder()<br>void TestJNDIProviderAdmin.testGetObjectInstanceWithMissingFactory()<br>
</div>
</td><td>7</td><td><img src="http://www.osgi.org/www/info.png" onclick="toggle('Object JNDIProviderAdmin.getObjectInstance(Object,Name,Context,Map)')" title="Show/Hide Callers"></td>
</tr>
<tr>
<td width="15px" class="
													ok
												"></td><td class="code">Object JNDIProviderAdmin.getObjectInstance(Object,Name,Context,Map,Attributes)<div class="code" style="display:none;margin:4;padding:8; background-color: #FFFFCC;" id="Object JNDIProviderAdmin.getObjectInstance(Object,Name,Context,Map,Attributes)" title="Callers">void TestJNDIProviderAdmin.testGetObjectInstanceWithReferencableAndAttributes()<br>void TestJNDIProviderAdmin.testGetObjectInstanceWithNoReferenceAndAttributes()<br>void TestJNDIProviderAdmin.testGetObjectInstanceWithFactoryNameAndAttributes()<br>void TestJNDIProviderAdmin.testGetObjectInstanceWithNoFactoryNameAndAttributes()<br>void TestJNDIProviderAdmin.testGetObjectInstanceWithBuilderAndAttributes()<br>void TestJNDIProviderAdmin.testGetObjectInstanceWithMissingFactoryAndAttributes()<br>void TestJNDIProviderAdmin.testGetObjectInstanceWithAttributesAndNoDirObjectFactory()<br>
</div>
</td><td>7</td><td><img src="http://www.osgi.org/www/info.png" onclick="toggle('Object JNDIProviderAdmin.getObjectInstance(Object,Name,Context,Map,Attributes)')" title="Show/Hide Callers"></td>
</tr>
</table>
</body>
</html>
