Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 521714 - AbstractMethodError when cft.server.client 1.1.0 (Oxygen.0) plug-in is installed alongside cft.server.core 1.0.3 (Neon.3)
Summary: AbstractMethodError when cft.server.client 1.1.0 (Oxygen.0) plug-in is instal...
Status: CLOSED FIXED
Alias: None
Product: CFT
Classification: ECD
Component: General (show other bugs)
Version: 1.0.3   Edit
Hardware: PC Windows 7
: P3 normal
Target Milestone: 1.1.1   Edit
Assignee: Jonathan West CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2017-08-31 16:35 EDT by Jonathan West CLA
Modified: 2017-09-21 16:08 EDT (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Jonathan West CLA 2017-08-31 16:35:27 EDT
In Bluemix Tools, we're seeing a case where the Eclipse P2 installer is installing the Oxygen version of the cft.server.client, into an Eclipse CFT install that is otherwise entirely Neon.3.

While the P2 installer really shouldn't be doing this, it looks like the cft.server.client does not specify a minimum plug-in version for the cft.server.core dependency in cft.server.client's MANIFEST.MF. This means that the Eclipse P2 installer considers the above configuration valid.

The simple fix is to set a minimum version on cft.server.core in cft.server.client's MANIFEST.MF:

Require-Bundle: org.eclipse.core.runtime,
 org.eclipse.cft.server.core;bundle-version="1.2.3", <==== dependency now includes bundle=version of cft.server.core for Oxygen.1 (1.1.1)

This set a lower bound on plug-in version, but (despite the syntax) does not restrict the upper bound, so should not cause an issue for future releases.

This is the error that is thrown, in this case on publish:

java.lang.AbstractMethodError: org.eclipse.cft.server.client.v2.internal.V2CFClientProvider.supports(Ljava/lang/String;Lorg/eclipse/cft/server/core/internal/client/CFInfo;)Z
	at org.eclipse.cft.server.core.internal.client.CFClientProviderRegistry.getClientProvider(CFClientProviderRegistry.java:98)
	at org.eclipse.cft.server.core.internal.client.CloudFoundryServerBehaviour.getHybridClient(CloudFoundryServerBehaviour.java:2202)
	at org.eclipse.cft.server.core.internal.client.CloudFoundryServerBehaviour.startAppLogStreaming(CloudFoundryServerBehaviour.java:2254)
	at org.eclipse.cft.server.ui.internal.console.ApplicationLogConsoleStream.initialiseStream(ApplicationLogConsoleStream.java:99)
	at org.eclipse.cft.server.ui.internal.console.CloudFoundryConsole.getStream(CloudFoundryConsole.java:107)
	at org.eclipse.cft.server.ui.internal.console.CloudFoundryConsole.startTailing(CloudFoundryConsole.java:76)
	at org.eclipse.cft.server.ui.internal.console.ApplicationLogConsoleManager.doStartConsole(ApplicationLogConsoleManager.java:126)
	at org.eclipse.cft.server.ui.internal.console.ApplicationLogConsoleManager.startConsole(ApplicationLogConsoleManager.java:92)
	at org.eclipse.cft.server.ui.internal.CloudFoundryUiCallback.startApplicationConsole(CloudFoundryUiCallback.java:91)
	at org.eclipse.cft.server.core.internal.client.RestartOperation.startAndTrackApplication(RestartOperation.java:104)
	at org.eclipse.cft.server.core.internal.client.RestartOperation.performDeployment(RestartOperation.java:85)
	at org.eclipse.cft.server.core.internal.client.StartOperation.performDeployment(StartOperation.java:211)
	at org.eclipse.cft.server.core.internal.client.PushApplicationOperation.performDeployment(PushApplicationOperation.java:243)
	at org.eclipse.cft.server.core.internal.client.ApplicationOperation.doApplicationOperation(ApplicationOperation.java:124)
	at org.eclipse.cft.server.core.internal.client.AbstractPublishApplicationOperation.run(AbstractPublishApplicationOperation.java:90)
	at org.eclipse.cft.server.core.internal.client.CloudFoundryServerBehaviour.publishModule(CloudFoundryServerBehaviour.java:1516)
	at org.eclipse.wst.server.core.model.ServerBehaviourDelegate.publishModule(ServerBehaviourDelegate.java:1091)
	at org.eclipse.wst.server.core.model.ServerBehaviourDelegate.publishModules(ServerBehaviourDelegate.java:1183)
	at org.eclipse.cft.server.core.internal.client.CloudFoundryServerBehaviour.publishModules(CloudFoundryServerBehaviour.java:1441)
	at com.ibm.cftools.branding.internal.CloudFoundryBluemixServerBehaviour.publishModules(CloudFoundryBluemixServerBehaviour.java:349)
	at org.eclipse.wst.server.core.model.ServerBehaviourDelegate.publish(ServerBehaviourDelegate.java:987)
	at org.eclipse.wst.server.core.model.ServerBehaviourDelegate.publish(ServerBehaviourDelegate.java:774)
	at org.eclipse.wst.server.core.internal.Server.publishImpl(Server.java:3172)
	at org.eclipse.wst.server.core.internal.Server$PublishJob.run(Server.java:345)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)


Here is the P2 install that Eclipse ultimately produces, in the failing case:

eclipse\plugins\org.eclipse.cft.server.branding.core_1.0.2.v201703012110.jar
eclipse\plugins\org.eclipse.cft.server.branding.ui_1.0.2.v201703012110.jar
eclipse\plugins\org.eclipse.cft.server.client_1.0.1.v201706141943.jar
eclipse\plugins\org.eclipse.cft.server.core_1.2.1.v201703012110.jar
eclipse\plugins\org.eclipse.cft.server.rse_1.0.1.v201703012110.jar
eclipse\plugins\org.eclipse.cft.server.standalone.core_1.0.4.v201703012110.jar
eclipse\plugins\org.eclipse.cft.server.standalone.ui_1.0.4.v201703012110.jar
eclipse\plugins\org.eclipse.cft.server.ui_1.0.108.v201703012110.jar
eclipse\plugins\org.eclipse.cft.server.verify.ui_1.0.1.v201703012110.jar
Comment 1 Eclipse Genie CLA 2017-08-31 16:38:53 EDT
GitHub Pull Request 71 created by [jgwest]
https://github.com/eclipse/cft/pull/71
Comment 2 Jonathan West CLA 2017-09-21 16:08:12 EDT
Fixed.