Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 328493

Summary: [RemoteSrvs] ServicePublicationHandler.createURI(ID, String) fails for StringID[zRkyn9U7y3LN+o8sdei9ZxsX0Yc=]
Product: [RT] ECF Reporter: Markus Kuppe <bugs.eclipse.org>
Component: ecf.remoteservicesAssignee: Markus Kuppe <bugs.eclipse.org>
Status: RESOLVED FIXED QA Contact:
Severity: normal    
Priority: P3 CC: slewis
Version: 3.3.0   
Target Milestone: 3.4.0   
Hardware: All   
OS: All   
Whiteboard:
Attachments:
Description Flags
mylyn/context/zip none

Description Markus Kuppe CLA 2010-10-22 12:03:23 EDT
java.net.URI.isOpaque() returns true for e.g. "zRkyn9U7y3LN+o8sdei9ZxsX0Yc=" which subsequently causes an AssertionFailedException:

!ENTRY org.eclipse.osgi 4 0 2010-10-22 18:02:58.095
!MESSAGE An unexpected runtime error has occurred.
!STACK 0
org.eclipse.core.runtime.AssertionFailedException: null argument:
	at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:85)
	at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:73)
	at org.eclipse.ecf.discovery.ServiceInfo.<init>(ServiceInfo.java:130)
	at org.eclipse.ecf.discovery.ServiceInfo.<init>(ServiceInfo.java:84)
	at org.eclipse.ecf.discovery.ServiceInfo.<init>(ServiceInfo.java:74)
	at org.eclipse.ecf.internal.osgi.services.discovery.ServicePublicationHandler.handleServicePublication(ServicePublicationHandler.java:344)
	at org.eclipse.ecf.internal.osgi.services.discovery.ServicePublicationHandler.addingService(ServicePublicationHandler.java:192)
	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:896)
	at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:261)
	at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:233)
	at org.osgi.util.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:840)
	at org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:104)
	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.dispatchEvent(BundleContextImpl.java:933)
	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:227)
	at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:149)
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:756)
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:711)
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:130)
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:206)
	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:507)
	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:525)
	at org.eclipse.ecf.internal.osgi.services.distribution.EventHookImpl.publishRemoteService(EventHookImpl.java:280)
	at org.eclipse.ecf.internal.osgi.services.distribution.EventHookImpl.handleRegisteredServiceEvent(EventHookImpl.java:140)
	at org.eclipse.ecf.internal.osgi.services.distribution.EventHookImpl.event(EventHookImpl.java:65)
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.notifyEventHooksPrivileged(ServiceRegistry.java:1143)
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:743)
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:711)
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:130)
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:206)
	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:507)
	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:525)
	at org.eclipse.ecf.tests.osgi.services.distribution.AbstractServicePublicationTest.testServicePublication(AbstractServicePublicationTest.java:107)
	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:168)
	at junit.framework.TestCase.runBare(TestCase.java:134)
	at junit.framework.TestResult$1.protect(TestResult.java:110)
	at junit.framework.TestResult.runProtected(TestResult.java:128)
	at junit.framework.TestResult.run(TestResult.java:113)
	at junit.framework.TestCase.run(TestCase.java:124)
	at junit.framework.TestSuite.runTest(TestSuite.java:232)
	at junit.framework.TestSuite.run(TestSuite.java:227)
	at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
	at org.eclipse.pde.internal.junit.runtime.RemotePluginTestRunner.main(RemotePluginTestRunner.java:62)
	at org.eclipse.pde.internal.junit.runtime.CoreTestApplication.run(CoreTestApplication.java:23)
	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 org.eclipse.equinox.internal.app.EclipseAppContainer.callMethodWithException(EclipseAppContainer.java:587)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:198)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
	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 org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:619)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:574)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1407)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1383)
Comment 1 Scott Lewis CLA 2010-10-22 12:26:10 EDT
How is this occurring?  

Note:  all of this code (ServicePublicationHandler) is likely going away in favor of the new remote services admin implementation...so if a temporary fix can be devised for the use case that creates this situation, then I would favor that.
Comment 2 Markus Kuppe CLA 2010-10-22 12:51:55 EDT
It's the StringID that is created in org.eclipse.ecf.provider.generic.GenericContainerInstantiator.createInstance(ContainerTypeDescription, Object[]) which is later used as an URI in SPH.
Comment 3 Markus Kuppe CLA 2010-10-22 12:53:20 EDT
Btw. why do the tests create the (client) container explicitly in org.eclipse.ecf.tests.osgi.services.distribution.generic.GenericServicePublicationTest?
Comment 4 Scott Lewis CLA 2010-10-22 13:08:06 EDT
(In reply to comment #3)
> Btw. why do the tests create the (client) container explicitly in
> org.eclipse.ecf.tests.osgi.services.distribution.generic.GenericServicePublicationTest?


Because the tests have been around longer than the OSGi 4.2 remote services impl.  More tests should probably be added, but I don't have time to do it.


(In reply to comment #2)
> It's the StringID that is created in
> org.eclipse.ecf.provider.generic.GenericContainerInstantiator.createInstance(ContainerTypeDescription,
> Object[]) which is later used as an URI in SPH.


Ok.  I guess I don't understand why I haven't ever seen this exception before, but no matter.  I don't think the ServicePublicationHandler URI value is actually used, so anything can probably be used for createURI.
Comment 5 Markus Kuppe CLA 2010-10-22 13:26:23 EDT
Fix released to master (http://git.eclipse.org/c/ecf/org.eclipse.ecf.git/commit/?id=3a6c4ee5f9fe95f90df6b9d43165f1129092d2d3)
Merge to Release_3_4 pending execution of unit tests on build server
Comment 6 Markus Kuppe CLA 2010-10-22 13:26:25 EDT
Created attachment 181524 [details]
mylyn/context/zip
Comment 7 Markus Kuppe CLA 2010-10-22 13:53:54 EDT
Fix released to Release_3_4