Giter VIP home page Giter VIP logo

jaxrsproviders's Introduction

OSGi Remote Services JaxRS Distribution Providers

ECF Distribution Providers based upon the JaxRS specification that supports OSGi R7 Remote Services. Implementations based on Apache CXF or Jersey are provided.

NEW: Tutorial for Extending the JaxRS Jersey Provider by adding customized request-level Basic Authentication

See the documentation on the ECF Wiki

NEW: Support for Endpoint Description Extender Format (EDEF) Properties substitution

This makes it much easier and more flexible to use EDEF files for importing Endpoint Descriptions. See the documentation on the ECF Wiki

Support for OSGi R7 Async Remote Services

OSGi R7 Remote Services includes support for Asynchronous Remote Services supporting Remote Services with return values of CompletableFuture, Future, or OSGi's Promise (Java) that will be executed asynchronously.

JaxRS Jersey and CXF Distribution Provider Configuration Properties

The Jersey and CXF distribution provider configuration properties are documented on this wiki page.

Tutorial Using JaxRS Student Example on Karaf

See JaxRS Remote Services Tutorial

Apache Karaf Download and Install

See this wiki page for a description of how to install and run in Apache Karaf.

LICENSE

JaxRS OSGi Remote Services is distributed with the Apache2 license. See LICENSE in this directory for more information.

jaxrsproviders's People

Contributors

erdalkaraca avatar modular-mind avatar scottslewis avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

jaxrsproviders's Issues

Create simpler and more flexible endpoint descriptions

I'm creating this issue really just to start a discussion. In my work with the JAX-RS client in the past I've found the EDEF xml files to be difficult to work with. There are two main issues:

  1. When creating a simple REST client, I think there are really only two properties that are unique: the endpoint URI (ecf.endpoint.id) and the remote service interface (objectClass). The rest of the properties (I think) can be set to defaults or generated randomly.

  2. The endpoint URI often needs to be configured for different environments (test/beta/prod).

My solution has been to create an extension point (these are RCP apps) called "endpointDescriptions" that has only these two attributes. When multiple environments are needed, I've had the extension reference a properties file listing all of the URIs. Finally, an OSGi service called an EndpointManager reads these from the extensions on startup and then generates and registers the actual EndpointDescriptions.

I was wondering what your opinion of a best practice is in this context. I've looked into Config Admin of course, but I want to keep this extremely simple to allow for easy integration into Eclipse RCP applications. I'm sure extension points are not ideal when looking at other non-Eclipse environments like Karaf. Is there an easier way to get this done?

Wrong Character enconding on % in parameter

I have an interface containing a method like this
@GET RestResponse<List<KundenDTO>> searchKunden(@QueryParam(TERMINAL_ID) long terminalId, @QueryParam(KUNDEN_SEARCH) String kundenSearch);

If I now set the parameter "kundenSearch" to something like '%cargo' this doesn't get properly URL encoded but sent as is so at my server I receive '[unprintable_character]rgo as %ca gets interpreted as a special, encoded character.

My question, is this to be expected? Do we have to properly encode all our parameters before passing them or is this a bug?

Cannot get asynchronous JAX-RS calls working as expected

I had the original ECF asynchronous calls working with version 1.1 of the client. I had an *Async interface that matched my original interface with *Async methods. Starting in version 1.3 this is no longer working, and I’m guessing this is because of work done to support the OSGi Asynchronous Service Specification:

https://docs.osgi.org/specification/osgi.cmpn/7.0.0/service.async.html

Previously, the ECF JAX-RS client (JaxRSClientContainer) would create a CompletableFuture and then use the non-async proxy to make the HTTP request. Now the client uses the async proxy itself, and this isn’t working right for me.

First, the JAX-RS annotations aren’t discovered on the async interface as they are only on the non-async interface. But when I add them to the async interface, the proxy is still trying to convert the HTTP response into a CompletableFuture (or other async return type) when it is actually receiving a regular object (Student, etc) in JSON from the server. The actual exception is something like:

Caused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.util.concurrent.CompletableFuture<java.util.List<com.modumind.spacex.service.model.Launch>

I'm a little over my head here, but my questions are:

  • Should the legacy async mechanism still work? Is there something I'm not doing right to get this working?

  • If I should be using the new OSGi asynchronous call (specifying "osgi.async" in the EDEF), does this require that the service itself support that? I see in the JaxRSClientJacksonJaxbJsonProvider that its looking for the response header "X-OSGI-ASYNC-RETURN-TYPE", which makes me think the server is involved.

My use case is that I want to have the asynchronous support managed on the client so that I can call any REST service (I'm currently working with the SpaceX REST API). If this requires changes to the client I would be happy to do the work and submit a pr, but I need a little education first to see what I should be doing.

Fix generation of exported endpoint id when pathPrefix is set

In this method:

org.eclipse.ecf.provider.jaxrs.server.JaxRSServerContainer.getExportedEndpointId(String, RSARemoteServiceRegistration)

The returned exported endpoint id is not properly calculated when the pathPrefix is set to some non-empty value.

Issues when starting RCP Client via Webstart

We intend to use this library in our newly to be developed RichClientPlatform Client. We intend to use e4 and Java 1.8.0.281 with Eclipse IDE for RCP and RAP Developers Version: 2020-12 (4.18.0).

We are able to integrate everything as described at https://www.modumind.com/2020/07/23/eclipse-rcp-and-rest-jax-rs-extensions/ and the later blogposts in the series. We are also able to build the client using tycho, start it and consume the services.

Troubles start when we try to do the same via webstart. So far we have not been able to get our client running via webstart at all. We took a step back and implemented a minimal client that attempts to inject the space-x launch service and display launches. This works fine when started on its own but does not work when started as a webstart application (via org.eclipse.equinox.launcher.WebStartMain.main(args);)
To debug the issue we created a workspace that allows to start this from eclipse using the class WebStartWrapper. What we see is that the client starts but the service injection breaks with a ClassCastException. This happens most of the time but not all the time on all machines. We have not been able to debug why it sometimes work but we have been able to debug that WHEN the error happens it is because of different classloader being used.
E.g. class org.glassfish.jersey.inject.hk2.Hk2InjectionManagerFactory -> loaded by sun.misc.Launcher$AppClassLoader@18b4aac2 with Parent CL: sun.misc.Launcher$ExtClassLoader@4043bcaf
And
interface org.glassfish.jersey.internal.inject.InjectionManagerFactory -> loaded by
org.eclipse.osgi.internal.loader.EquinoxClassLoader@49752ef8[org.glassfish.jersey.core.jersey-common:2.30.1(id=127)] withParent org.eclipse.osgi.internal.framework.EquinoxContainer$1@2a060884

Wenn it works we see org.glassfish.jersey.internal.OsgiRegistry$OsgiServiceFinder$1@7e440207 being called
when it doesn't we see org.glassfish.jersey.internal.ServiceFinder$LazyObjectIterator@6929efb4

I have attached the sample project we are using.
To get this working you have to create a RunConfiguration (as Java Application) for the WebstartWrapper. Under Classpath you need to go to Advanced... add "Variable String" and give the location to the target directory containing all the plugins e.g. c:\yourworkspace\klv-client\klv-product\target\win32.win32.x86_64\eclipse\plugins\*

To build the client you need to maven build configurations,
Base directory: ${workspace_loc:/klv-client}
Goals: clean verify

The stagingarea/workspace can be found at C:\Users[youruser]\AppData\KLV_MINIMAL but you can set it to anything you like using
System.setProperty("osgi.instance.area", "@user.home/Anwendungsdaten/KLV_MINIMAL/workspace"); System.setProperty("osgi.configuration.area", "@user.home/Anwendungsdaten/KLV_MINIMAL/config");
Just make sure to delete everything there after each run of the client.
klv_minimal.zip

If you have any questions, hints or troubles getting this to run let me know.

Also attached a full log of an attempted run
.log
Logs can be found at C:\Users[youruser]\AppData\KLV_MINIMAL.metadata

Update feature dependencies for Jersey JAX-RS Client feature

In my example, I've stripped the target and product down and now have 4 ECF feature dependencies for the Jersey Client feature:

org.eclipse.ecf.core.feature
org.eclipse.ecf.osgi.services.feature
org.eclipse.ecf.discovery.feature
org.eclipse.ecf.remoteservice.feature

The org.eclipse.ecf.osgi.services.feature already lists these two features as dependencies:

org.eclipse.ecf.discovery.feature
org.eclipse.ecf.remoteservice.feature

So if we could have these two features listed as dependencies in the Jersey Client, then the dependency hierarchy would be complete:

org.eclipse.ecf.osgi.services.feature
org.eclipse.ecf.core.feature

My goal is that a developer could add the Jersey Client feature to a product configuration and then click "Add Required" to bring in the minimal feature set needed to run.

I'm not sure how this applies to the Jersey Server or the CXF features, but these dependencies might work for those as well.

Adding needed plug-ins to features

I just created an example project attempting to show best-practices for using these providers.

https://github.com/modular-mind/spacex-client

I've also written a blog post about this:

https://www.modumind.com/2020/05/19/eclipse-rcp-and-rest-an-introduction/

I'm focused mostly on the Jersey JAX-RS client right now, though these issues may relate to the CXF provider or the server providers as well.

My goal is to have everything cleanly provisioned in a target definition and in an Eclipse RCP product configuration. Ideally that would mean that I could include a small set of features that contain all required plug-ins. Currently my product configuration features are:

--- RCP features ---
org.eclipse.emf.ecore
org.eclipse.emf.common
org.eclipse.e4.rcp

--- ECF features ---
org.eclipse.ecf.core.feature
org.eclipse.ecf.discovery.feature
org.eclipse.ecf.osgi.services.feature
org.eclipse.ecf.remoteservice.feature
org.eclipse.ecf.provider.jersey.client.feature

This looks good, except there are 3 plug-ins I have to include in my custom feature:

org.eclipse.equinox.concurrent.future
javax.servlet
javax.activation

Each of these plug-ins has a different story, and I could break them out into three separate issues if you like. But if these plugins could be added to the Jersey JAX-RS Client Provider feature, then it could be easily dropped into a target or product config and used as is.

Consume Jersey and all dependencies using Maven repositories

Now that Eclipse target definitions can contain Maven artifacts, let's try to switch over from Orbit and other sources to directly get Jersey and all dependencies (Jackson, etc) directly from Maven repositories.

I'm guessing the best way to do this would be in isolation from the Jersey 3 upgrade, though we could do them both at the same time. In the Eclipse IDE, this requires m2e PDE 1.17.0 and Tycho requires 2.1.

The easiest way to add these artifacts is to modify the target definition source directly. Here's an example for Mockito:

	<location missingManifest="generate" type="Maven">
		<groupId>org.mockito</groupId>
		<artifactId>mockito-core</artifactId>
		<version>3.7.0</version>
		<type>jar</type>
	</location>

cxf repository should be absolute

When installing the feature with feature:install -v ecf-rs-distribution-jersey in karaf-features.xml a warning is generated

18:32:08.572 WARN  [pipe-feature:install -v ecf-rs-distribution-jersey] Can't load features repository cxf
address-karaf    | java.lang.RuntimeException: URI is not absolute : cxf
address-karaf    |      at org.apache.karaf.features.internal.service.RepositoryImpl.load(RepositoryImpl.java:116)
address-karaf    |      at org.apache.karaf.features.internal.service.RepositoryImpl.<init>(RepositoryImpl.java:50)
address-karaf    |      at org.apache.karaf.features.internal.service.RepositoryCacheImpl.create(RepositoryCacheImpl.java:51)
address-karaf    |      at org.apache.karaf.features.internal.service.FeaturesServiceImpl.getFeatureCache(FeaturesServiceImpl.java:605)
address-karaf    |      at org.apache.karaf.features.internal.service.FeaturesServiceImpl.computeFeaturesToAdd(FeaturesServiceImpl.java:825)
address-karaf    |      at org.apache.karaf.features.internal.service.FeaturesServiceImpl.installFeatures(FeaturesServiceImpl.java:798)
address-karaf    |      at org.apache.karaf.features.command.InstallFeatureCommand.doExecute(InstallFeatureCommand.java:78)
address-karaf    |      at org.apache.karaf.features.command.FeaturesCommandSupport.execute(FeaturesCommandSupport.java:40)
address-karaf    |      at org.apache.karaf.shell.impl.action.command.ActionCommand.execute(ActionCommand.java:84)
address-karaf    |      at org.apache.karaf.shell.impl.console.osgi.secured.SecuredCommand.execute(SecuredCommand.java:68)
address-karaf    |      at org.apache.karaf.shell.impl.console.osgi.secured.SecuredCommand.execute(SecuredCommand.java:86)
address-karaf    |      at org.apache.felix.gogo.runtime.Closure.executeCmd(Closure.java:599)
address-karaf    |      at org.apache.felix.gogo.runtime.Closure.executeStatement(Closure.java:526)
address-karaf    |      at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:415)
address-karaf    |      at org.apache.felix.gogo.runtime.Pipe.doCall(Pipe.java:416)
address-karaf    |      at org.apache.felix.gogo.runtime.Pipe.call(Pipe.java:229)
address-karaf    |      at org.apache.felix.gogo.runtime.Pipe.call(Pipe.java:59)
address-karaf    |      at java.util.concurrent.FutureTask.run(FutureTask.java:266)
address-karaf    |      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
address-karaf    |      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
address-karaf    |      at java.lang.Thread.run(Thread.java:748)
address-karaf    | Caused by: java.lang.IllegalArgumentException: URI is not absolute
address-karaf    |      at java.net.URI.toURL(URI.java:1088)
address-karaf    |      at org.apache.karaf.features.internal.service.RepositoryImpl.load(RepositoryImpl.java:113)
address-karaf    |      ... 20 more

The repository reference in karaf-features.xml for cxf is relative <repository>cxf</repository> and should be absolute.

Bndtools run descriptor

Hello, as requested by @scottslewis i'm raising an issue to get an bndtools run descriptor with all
needed dependencies.
One more item is it possible to update ecfatcentral.maven to include equinox jetty and jetty dependencies

Could we make these features available on Eclipse update site?

These features are great and you should know they're being used extensively in some very mission-critical applications. So thank you for doing this work.

I was wondering if there are any plans to make these features available in the regular ECF update site on eclipse.org. For some reason it's not possible to point an Eclipse target definition at the URL on GitHub (build) directory, even though it's a valid p2 repository.

Also, the clients I work with are more comfortable if they're mirroring an Eclipse p2 repo, they look at me funny if I hand them a zip archive from GitHub...

Thanks,

--- Patrick

Cannot export two remote services with CXF distribution provider

Issue 13: #13 was opened to allow multiple remote services to be exported. As part of fixing that issue, it was discovered that CXF's code does not currently support multple endpoints dynamically added to org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet class. For supporting exporting multiple endpoints with different servlets this is required.

To work around this, it may be necessary to implement an alternative Servlet class to CXFNonSpringJaxrsServlet.

The work is likely to be done in these classes:

org.eclipse.ecf.provider.cxf.server.CXFJaxRSServerContainer
org.eclipse.ecf.provider.cxf.server.DPCXFNonSpringJaxrsServlet.DPCXFNonSpringJaxrsServlet

Cannot export two services from one bundle

It does not work to export two services from one bundle via JAX-RS distribution provider. I simply tried to copy and slightly modify an existing service (different path and classname) and I even tried to export a different service. In both cases I get the following exception:

[log;+0200 2018.10.18 20:37:30:983;ERROR;org.eclipse.ecf.osgi.services.remoteserviceadmin;org.eclipse.core.runtime.Status[plugin=org.eclipse.ecf.osgi.services.remoteserviceadmin;code=4;message=org.eclipse.ecf.osgi.services.remoteserviceadmin.TopologyManagerImpl:handleRemoteAdminEvent.EXPORT_ERROR:Export error with event=RemoteServiceAdminEvent[containerID=null, getType()=6, getSource()=org.eclipse.ecf.osgi.services.remoteserviceadmin [23], getException()=java.lang.RuntimeException: JaxRSServerContainer=http://localhost:8080/ cannot has already exported registration=RemoteServiceRegistrationImpl[remoteServiceID=org.eclipse.ecf.remoteservice.RemoteServiceID[containerID=URIID [uri=http://localhost:8080/];containerRelativeID=1];rserviceranking=0;classes=[org.fipro.modifier.remote.api.ModifierService];state=0;properties={osgi.confidential=intent, ordered=intent, osgi.basic.timeout=50000, jaxrs=intent, osgi.private=intent, exactlyOnce=intent, osgi.async=intent, ecf.rsvc.id=1, passByValue=intent}], getImportReference()=null, getExportReference()=null];severity4;exception=null;children=[]]]

It looks like the containerRelativeID is not incremented per exported service.

Jersey instantiates the JAX-RS service on request

It seems that jersey re-instantiates the OSGi component on the first request to the alias URI.
This means that if the OSGi component has any dependencies injected via Reference, then they will not be available.

Scott, do you have any ideas what I could check?

Provide JAX-RS and Jersey defaults so they don't have to be duplicated in EDEF files

Many of the EDEF properties will be the same for most JAX-RS and Jersey clients. It would be nice to have a way to specify defaults at both the JAX-RS and Jersey levels and then allow developers to override these if they wish. Currently, I'm doing the following for defaults:

JAX-RS

ecf.endpoint.id.ns = ecf.namespace.jaxrs
remote.intents.supported = { "passByValue", "exactlyOnce", "ordered", "jaxrs" }
service.intents = { "osgi.async" }
endpoint.id = randomly generated UUID
ecf.rsvc.id = 0
ecf.endpoint.rsfilter = (objectClass=*)

Jersey

service.imported.configs = { "ecf.jaxrs.jersey.server" }

This was the smallest set of defaults that I could come up with that would create a valid Jersey endpoint description (no validation error). The only other properties that were needed (and specified in the EDEF) are:

ecf.endpoint.id = http://myurl
objectClass = { "com.myorg.MyServiceClient" }

There may be better defaults, and this is just to start a discussion.

I do have a set of EndpointDescriptionReaders that are specific to JAX-RS and Jersey. These readers set the defaults and then call the superclass. I'll submit them as a PR, but there may obviously be better ways to handle this.

NPE in JaxRSServerContainer.getHttpService()

java.lang.NullPointerException
at org.eclipse.ecf.provider.jaxrs.server.JaxRSServerContainer.getHttpService(JaxRSServerContainer.java:95)
at org.eclipse.ecf.provider.jaxrs.server.JaxRSServerContainer.exportRemoteService(JaxRSServerContainer.java:136)
at org.eclipse.ecf.remoteservice.RSARemoteServiceContainerAdapter$RSARemoteServiceRegistration.publish(RSARemoteServiceContainerAdapter.java:53)
at org.eclipse.ecf.remoteservice.RemoteServiceContainerAdapterImpl.registerRemoteService(RemoteServiceContainerAdapterImpl.java:123)
at org.eclipse.ecf.osgi.services.remoteserviceadmin.RemoteServiceAdmin.exportService(RemoteServiceAdmin.java:2156)

Each registered jax-rs service is bound to its own jersey container?

It seems that each JAX-RS service is started in its own jersey container.
This means, that if we have two OSGi bundles that both deploy their services using the alias "/", then not both services are available. Am I right, or what do I miss?

When I do this, only one of my services work (can be accessed via GET, for example).

Remove example plugins from features

While it's not causing a problem, I think it would be cleaner to remove the example plug-ins from the features. It would help developers to see these features as production quality.

Problem running the example com.mycorp.examples.student.remoteservice.host

Hi:

I have just cloned the repository, imported the bundles in Eclipse and set ecf-jaxrs-2020-12.target as the platform target. Everything compiles fine but when I run the product StudentServer.zeroconf.jersey.product, I get this log:

2022-11-29 00:00:08.480:INFO::Start Level: Equinox Container: 076fca46-342e-4163-a085-e3255ec9fc0f: Logging initialized @3061ms to org.eclipse.jetty.util.log.StdErrLog
2022-11-29 00:00:08.707:INFO:oejs.session:Start Level: Equinox Container: 076fca46-342e-4163-a085-e3255ec9fc0f: DefaultSessionIdManager workerName=node0
2022-11-29 00:00:08.707:INFO:oejs.session:Start Level: Equinox Container: 076fca46-342e-4163-a085-e3255ec9fc0f: No SessionScavenger set, using defaults
2022-11-29 00:00:08.710:INFO:oejs.session:Start Level: Equinox Container: 076fca46-342e-4163-a085-e3255ec9fc0f: node0 Scavenging every 660000ms
2022-11-29 00:00:08.795:INFO:oejs.session:Start Level: Equinox Container: 076fca46-342e-4163-a085-e3255ec9fc0f: node0 Scavenging every 660000ms
Nov 29, 2022 12:00:09 AM org.glassfish.jersey.internal.inject.Providers checkProviderRuntime
WARNING: A provider com.mycorp.examples.student.remoteservice.host.StudentServiceImpl2 registered in SERVER runtime does not implement any provider interfaces applicable in the SERVER runtime. Due to constraint configuration problems the provider com.mycorp.examples.student.remoteservice.host.StudentServiceImpl2 will be ignored.
00:00:15.048;EXPORT_REGISTRATION;exportedSR={com.mycorp.examples.student.StudentService}={service.exported.intents=[osgi.async,jaxrs], ecf.jaxrs.server.pathPrefix=/rs2, service.exported.configs=ecf.jaxrs.jersey.server, service.id=76, service.bundleid=5, service.scope=bundle, osgi.basic.timeout=1000000, component.name=com.mycorp.examples.student.remoteservice.host.StudentServiceImpl2, service.exported.interfaces=, component.id=4};cID=URIID [uri=http://localhost:8080/rservices/rs2];rsId=1
--Endpoint Description---













com.mycorp.examples.student.StudentService





ecf.jaxrs.jersey.server




passByValue
exactlyOnce
ordered
osgi.async
osgi.private
osgi.confidential
jaxrs





ecf.jaxrs.jersey.server




osgi.async
jaxrs




---End Endpoint Description
Nov 29, 2022 12:00:15 AM org.glassfish.jersey.internal.inject.Providers checkProviderRuntime
WARNING: A provider com.mycorp.examples.student.remoteservice.host.StudentServiceImpl registered in SERVER runtime does not implement any provider interfaces applicable in the SERVER runtime. Due to constraint configuration problems the provider com.mycorp.examples.student.remoteservice.host.StudentServiceImpl will be ignored.
00:00:18.305;EXPORT_REGISTRATION;exportedSR={com.mycorp.examples.student.StudentService}={service.exported.intents=[osgi.async,jaxrs], ecf.jaxrs.server.pathPrefix=/rs1, service.exported.configs=ecf.jaxrs.jersey.server, service.id=81, service.bundleid=5, service.scope=bundle, osgi.basic.timeout=0, component.name=com.mycorp.examples.student.remoteservice.host.StudentServiceImpl, service.exported.interfaces=
, component.id=5};cID=URIID [uri=http://localhost:8080/rservices/rs1];rsId=2
--Endpoint Description---













com.mycorp.examples.student.StudentService





ecf.jaxrs.jersey.server




passByValue
exactlyOnce
ordered
osgi.async
osgi.private
osgi.confidential
jaxrs





ecf.jaxrs.jersey.server




osgi.async
jaxrs




---End Endpoint Description
osgi>

I have tried in my browser http://localhost:8080/rservices/rs2/students, http://localhost:8080/rs2/students or just http://localhost:8080/students but I have always a 404. What am I doing wrong?

Thanks

PD: I am using linux (SLES15) and openjdk11

Blank default uuid causes issues with multiple bundles providing services

I have two bundles providing remote JAX-RS services with edef_defaults.properties in each. If I specify the endpoint.id like:

endpoint.id:uuid=

Then only the first bundle processed gets its service loaded. If I change the default to:

endpoint.id:uuid=0

Then both bundles' remote services get processed. Perhaps I'm just misunderstanding the default syntax and want to clarify.

Thanks :-)

warning when com.mycorp.examples.student.client is executed in karaf

The bundle com.mycorp.examples.student.client produced the expected output but a warning was logged.

Karaf 4.2.9

Karaf system properties I set
• org.osgi.service.http.port = 8181
• ecf.jaxrs.server.pathPrefix = /rservices
• verboseRemoteServiceAdmin = false

Warnings using student feature from the repo’s kar file:

karaf    | 21:10:11.559 WARN  [pipe-start 190 191 192] A provider com.mycorp.examples.student.remoteservice.host.StudentServiceImpl2 registered in SERVER runtime does not implement any provider interfaces applicable in the SERVER runtime. Due to constraint configuration problems the provider com.mycorp.examples.student.remoteservice.host.StudentServiceImpl2 will be ignored.
karaf    | 21:10:14.330 WARN  [pipe-start 190 191 192] A provider com.mycorp.examples.student.remoteservice.host.StudentServiceImpl registered in SERVER runtime does not implement any provider interfaces applicable in the SERVER runtime. Due to constraint configuration problems the provider com.mycorp.examples.student.remoteservice.host.StudentServiceImpl will be ignored.

Clean up metadata for features

Requesting that the feature names be standardized. Here's what we have now:

ECF CXF Client Distribution Provider Feature
ECF CXF JaxRC Distribution Provier
ECF Remote Services Jersey Server Provider
Jersey Remote Service Client Provider Feature

After looking at the features in the main Eclipse ECF repo, I would suggest something like this:

ECF Remote Services JAX-RS CXF Client Provider
ECF Remote Services JAX-RS CXF Server Provider
ECF Remote Services JAX-RS Jersey Client Provider
ECF Remote Services JAX-RS Jersey Server Provider

Replace service id in URL with a value of my choice?

Hello,
I wonder if it is possible to replace service id with something else in service URL for Jersey provider? Or make it possible? Let's say with ecf.jaxrs.jersey.server.pathPrefix value, for example.
In other words, if service URL is http://localhost:8080/1 is it possible to replace the "1" with another value?

Fix handling of url prefix prop handling

In this method:

org.eclipse.ecf.provider.jaxrs.server.JaxRSServerContainerInstantiator.getUrl(Map<String, ?>, String)

The handling of urlPrefix only checks against system properties. It should also check against the service properties and use the value if present.

Clean clone of repo will not build

A clean clone of the full repo will not build (at least) the project com.mycorp.examples.student.remoteservice.host. Full debug log from attempt follows
`C:\Users\tvogel\git\JaxRSProviders\examples\com.mycorp.examples.student.remoteservice.host>D:\dev\apache-maven-3.6.3\bin\mvn -e -X clean install
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: D:\dev\apache-maven-3.6.3\bin..
Java version: 14, vendor: AdoptOpenJDK, runtime: D:\java\AdoptOpenJDK\jdk-14.0.0.36-openj9
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
[DEBUG] Created new class realm maven.api
[DEBUG] Importing foreign packages into class realm maven.api
[DEBUG] Imported: javax.annotation.* < plexus.core
[DEBUG] Imported: javax.annotation.security.* < plexus.core
[DEBUG] Imported: javax.enterprise.inject.* < plexus.core
[DEBUG] Imported: javax.enterprise.util.* < plexus.core
[DEBUG] Imported: javax.inject.* < plexus.core
[DEBUG] Imported: org.apache.maven.* < plexus.core
[DEBUG] Imported: org.apache.maven.artifact < plexus.core
[DEBUG] Imported: org.apache.maven.classrealm < plexus.core
[DEBUG] Imported: org.apache.maven.cli < plexus.core
[DEBUG] Imported: org.apache.maven.configuration < plexus.core
[DEBUG] Imported: org.apache.maven.exception < plexus.core
[DEBUG] Imported: org.apache.maven.execution < plexus.core
[DEBUG] Imported: org.apache.maven.execution.scope < plexus.core
[DEBUG] Imported: org.apache.maven.lifecycle < plexus.core
[DEBUG] Imported: org.apache.maven.model < plexus.core
[DEBUG] Imported: org.apache.maven.monitor < plexus.core
[DEBUG] Imported: org.apache.maven.plugin < plexus.core
[DEBUG] Imported: org.apache.maven.profiles < plexus.core
[DEBUG] Imported: org.apache.maven.project < plexus.core
[DEBUG] Imported: org.apache.maven.reporting < plexus.core
[DEBUG] Imported: org.apache.maven.repository < plexus.core
[DEBUG] Imported: org.apache.maven.rtinfo < plexus.core
[DEBUG] Imported: org.apache.maven.settings < plexus.core
[DEBUG] Imported: org.apache.maven.toolchain < plexus.core
[DEBUG] Imported: org.apache.maven.usability < plexus.core
[DEBUG] Imported: org.apache.maven.wagon.* < plexus.core
[DEBUG] Imported: org.apache.maven.wagon.authentication < plexus.core
[DEBUG] Imported: org.apache.maven.wagon.authorization < plexus.core
[DEBUG] Imported: org.apache.maven.wagon.events < plexus.core
[DEBUG] Imported: org.apache.maven.wagon.observers < plexus.core
[DEBUG] Imported: org.apache.maven.wagon.proxy < plexus.core
[DEBUG] Imported: org.apache.maven.wagon.repository < plexus.core
[DEBUG] Imported: org.apache.maven.wagon.resource < plexus.core
[DEBUG] Imported: org.codehaus.classworlds < plexus.core
[DEBUG] Imported: org.codehaus.plexus.* < plexus.core
[DEBUG] Imported: org.codehaus.plexus.classworlds < plexus.core
[DEBUG] Imported: org.codehaus.plexus.component < plexus.core
[DEBUG] Imported: org.codehaus.plexus.configuration < plexus.core
[DEBUG] Imported: org.codehaus.plexus.container < plexus.core
[DEBUG] Imported: org.codehaus.plexus.context < plexus.core
[DEBUG] Imported: org.codehaus.plexus.lifecycle < plexus.core
[DEBUG] Imported: org.codehaus.plexus.logging < plexus.core
[DEBUG] Imported: org.codehaus.plexus.personality < plexus.core
[DEBUG] Imported: org.codehaus.plexus.util.xml.Xpp3Dom < plexus.core
[DEBUG] Imported: org.codehaus.plexus.util.xml.pull.XmlPullParser < plexus.core
[DEBUG] Imported: org.codehaus.plexus.util.xml.pull.XmlPullParserException < plexus.core
[DEBUG] Imported: org.codehaus.plexus.util.xml.pull.XmlSerializer < plexus.core
[DEBUG] Imported: org.eclipse.aether.* < plexus.core
[DEBUG] Imported: org.eclipse.aether.artifact < plexus.core
[DEBUG] Imported: org.eclipse.aether.collection < plexus.core
[DEBUG] Imported: org.eclipse.aether.deployment < plexus.core
[DEBUG] Imported: org.eclipse.aether.graph < plexus.core
[DEBUG] Imported: org.eclipse.aether.impl < plexus.core
[DEBUG] Imported: org.eclipse.aether.installation < plexus.core
[DEBUG] Imported: org.eclipse.aether.internal.impl < plexus.core
[DEBUG] Imported: org.eclipse.aether.metadata < plexus.core
[DEBUG] Imported: org.eclipse.aether.repository < plexus.core
[DEBUG] Imported: org.eclipse.aether.resolution < plexus.core
[DEBUG] Imported: org.eclipse.aether.spi < plexus.core
[DEBUG] Imported: org.eclipse.aether.transfer < plexus.core
[DEBUG] Imported: org.eclipse.aether.version < plexus.core
[DEBUG] Imported: org.fusesource.jansi.* < plexus.core
[DEBUG] Imported: org.slf4j.* < plexus.core
[DEBUG] Imported: org.slf4j.event.* < plexus.core
[DEBUG] Imported: org.slf4j.helpers.* < plexus.core
[DEBUG] Imported: org.slf4j.spi.* < plexus.core
[DEBUG] Populating class realm maven.api
[INFO] Error stacktraces are turned on.
[DEBUG] Message scheme: color
[DEBUG] Message styles: debug info warning error success failure strong mojo project
[DEBUG] Reading global settings from D:\dev\apache-maven-3.6.3\bin..\conf\settings.xml
[DEBUG] Reading user settings from C:\Users\tvogel.m2\settings.xml
[DEBUG] Reading global toolchains from D:\dev\apache-maven-3.6.3\bin..\conf\toolchains.xml
[DEBUG] Reading user toolchains from C:\Users\tvogel.m2\toolchains.xml
[DEBUG] Using local repository at C:\Users\tvogel.m2\repository
[DEBUG] Using manager EnhancedLocalRepositoryManager with priority 10.0 for C:\Users\tvogel.m2\repository
[INFO] Scanning for projects...
[DEBUG] Dependency collection stats: {ConflictMarker.analyzeTime=564900, ConflictMarker.markTime=247600, ConflictMarker.nodeCount=97, ConflictIdSorter.graphTime=317500, ConflictIdSorter.topsortTime=207800, ConflictIdSorter.conflictIdCount=45, ConflictIdSorter.conflictIdCycleCount=0, ConflictResolver.totalTime=5152200, ConflictResolver.conflictItemCount=96, DefaultDependencyCollector.collectTime=206906700, DefaultDependencyCollector.transformTime=7607500}
[DEBUG] org.eclipse.tycho:tycho-maven-plugin:jar:1.2.0
[DEBUG] org.eclipse.tycho:tycho-core:jar:1.2.0:compile
[DEBUG] org.apache.maven:maven-core:jar:3.0:compile (version managed from default)
[DEBUG] org.apache.maven:maven-model:jar:3.0:compile (version managed from default)
[DEBUG] org.apache.maven:maven-settings:jar:3.0:compile (version managed from default)
[DEBUG] org.apache.maven:maven-settings-builder:jar:3.0:compile
[DEBUG] org.apache.maven:maven-repository-metadata:jar:3.0:compile
[DEBUG] org.apache.maven:maven-artifact:jar:3.0:compile
[DEBUG] org.apache.maven:maven-model-builder:jar:3.0:compile
[DEBUG] org.apache.maven:maven-aether-provider:jar:3.0:runtime
[DEBUG] org.sonatype.aether:aether-impl:jar:1.7:compile
[DEBUG] org.sonatype.aether:aether-spi:jar:1.7:compile
[DEBUG] org.sonatype.aether:aether-api:jar:1.7:compile
[DEBUG] org.sonatype.aether:aether-util:jar:1.7:compile
[DEBUG] org.sonatype.sisu:sisu-inject-plexus:jar:1.4.2:compile
[DEBUG] org.sonatype.sisu:sisu-inject-bean:jar:1.4.2:compile
[DEBUG] org.sonatype.sisu:sisu-guice:jar:noaop:2.1.7:compile
[DEBUG] org.codehaus.plexus:plexus-interpolation:jar:1.14:compile
[DEBUG] org.codehaus.plexus:plexus-classworlds:jar:2.2.3:compile
[DEBUG] org.sonatype.plexus:plexus-sec-dispatcher:jar:1.3:compile
[DEBUG] org.sonatype.plexus:plexus-cipher:jar:1.7:compile (version managed from default)
[DEBUG] org.apache.maven:maven-plugin-api:jar:3.0:compile (version managed from default)
[DEBUG] org.codehaus.plexus:plexus-utils:jar:3.0.24:compile (version managed from default)
[DEBUG] org.codehaus.plexus:plexus-archiver:jar:3.4:compile (version managed from default) (exclusions managed from default)
[DEBUG] org.codehaus.plexus:plexus-io:jar:2.7.1:compile (version managed from default)
[DEBUG] commons-io:commons-io:jar:2.5:compile
[DEBUG] org.apache.commons:commons-compress:jar:1.15:compile (version managed from default)
[DEBUG] org.objenesis:objenesis:jar:2.6:compile
[DEBUG] org.iq80.snappy:snappy:jar:0.4:compile
[DEBUG] org.tukaani:xz:jar:1.5:runtime
[DEBUG] org.eclipse.tycho:org.eclipse.osgi.compatibility.state:jar:1.1.100.v20180131-1413:compile (version managed from default)
[DEBUG] org.eclipse.tycho:sisu-equinox-embedder:jar:1.2.0:compile
[DEBUG] org.eclipse.tycho:org.eclipse.osgi:jar:3.13.0.v20180226-1711:compile (version managed from default)
[DEBUG] org.eclipse.tycho:sisu-equinox-api:jar:1.2.0:compile
[DEBUG] org.eclipse.tycho:tycho-metadata-model:jar:1.2.0:compile
[DEBUG] de.pdark:decentxml:jar:1.3:compile (version managed from default)
[DEBUG] org.eclipse.tycho:tycho-embedder-api:jar:1.2.0:compile
[DEBUG] org.eclipse.tycho:org.eclipse.tycho.embedder.shared:jar:1.2.0:compile
[DEBUG] org.eclipse.tycho:org.eclipse.tycho.core.shared:jar:1.2.0:compile
[DEBUG] org.apache.maven:maven-compat:jar:3.0:compile (version managed from default)
[DEBUG] org.apache.maven.wagon:wagon-provider-api:jar:1.0-beta-6:compile
[DEBUG] org.eclipse.tycho:tycho-p2-facade:jar:1.2.0:compile
[DEBUG] org.codehaus.plexus:plexus-component-annotations:jar:1.7.1:compile (version managed from default)
[DEBUG] org.eclipse.tycho:org.eclipse.tycho.p2.resolver.shared:jar:1.2.0:compile
[DEBUG] org.eclipse.tycho:org.eclipse.tycho.p2.tools.shared:jar:1.2.0:compile
[DEBUG] Created new class realm extension>org.eclipse.tycho:tycho-maven-plugin:1.2.0
[DEBUG] Importing foreign packages into class realm extension>org.eclipse.tycho:tycho-maven-plugin:1.2.0
[DEBUG] Imported: < maven.api
[DEBUG] Populating class realm extension>org.eclipse.tycho:tycho-maven-plugin:1.2.0
[DEBUG] Included: org.eclipse.tycho:tycho-maven-plugin:jar:1.2.0
[DEBUG] Included: org.eclipse.tycho:tycho-core:jar:1.2.0
[DEBUG] Included: org.sonatype.aether:aether-util:jar:1.7
[DEBUG] Included: org.sonatype.sisu:sisu-inject-bean:jar:1.4.2
[DEBUG] Included: org.sonatype.sisu:sisu-guice:jar:noaop:2.1.7
[DEBUG] Included: org.codehaus.plexus:plexus-interpolation:jar:1.14
[DEBUG] Included: org.sonatype.plexus:plexus-sec-dispatcher:jar:1.3
[DEBUG] Included: org.sonatype.plexus:plexus-cipher:jar:1.7
[DEBUG] Included: org.codehaus.plexus:plexus-utils:jar:3.0.24
[DEBUG] Included: org.codehaus.plexus:plexus-archiver:jar:3.4
[DEBUG] Included: org.codehaus.plexus:plexus-io:jar:2.7.1
[DEBUG] Included: commons-io:commons-io:jar:2.5
[DEBUG] Included: org.apache.commons:commons-compress:jar:1.15
[DEBUG] Included: org.objenesis:objenesis:jar:2.6
[DEBUG] Included: org.iq80.snappy:snappy:jar:0.4
[DEBUG] Included: org.tukaani:xz:jar:1.5
[DEBUG] Included: org.eclipse.tycho:org.eclipse.osgi.compatibility.state:jar:1.1.100.v20180131-1413
[DEBUG] Included: org.eclipse.tycho:sisu-equinox-embedder:jar:1.2.0
[DEBUG] Included: org.eclipse.tycho:org.eclipse.osgi:jar:3.13.0.v20180226-1711
[DEBUG] Included: org.eclipse.tycho:sisu-equinox-api:jar:1.2.0
[DEBUG] Included: org.eclipse.tycho:tycho-metadata-model:jar:1.2.0
[DEBUG] Included: de.pdark:decentxml:jar:1.3
[DEBUG] Included: org.eclipse.tycho:tycho-embedder-api:jar:1.2.0
[DEBUG] Included: org.eclipse.tycho:org.eclipse.tycho.embedder.shared:jar:1.2.0
[DEBUG] Included: org.eclipse.tycho:org.eclipse.tycho.core.shared:jar:1.2.0
[DEBUG] Included: org.eclipse.tycho:tycho-p2-facade:jar:1.2.0
[DEBUG] Included: org.codehaus.plexus:plexus-component-annotations:jar:1.7.1
[DEBUG] Included: org.eclipse.tycho:org.eclipse.tycho.p2.resolver.shared:jar:1.2.0
[DEBUG] Included: org.eclipse.tycho:org.eclipse.tycho.p2.tools.shared:jar:1.2.0
[DEBUG] Extension realms for project org.eclipse.ecf.jaxrs:com.mycorp.examples.student.remoteservice.host:eclipse-plugin:2.0.0-SNAPSHOT: [ClassRealm[extension>org.eclipse.tycho:tycho-maven-plugin:1.2.0, parent: jdk.internal.loader.ClassLoaders$AppClassLoader@bea95d50]]
[DEBUG] Created new class realm project>org.eclipse.ecf.jaxrs:com.mycorp.examples.student.remoteservice.host:2.0.0-SNAPSHOT
[DEBUG] Populating class realm project>org.eclipse.ecf.jaxrs:com.mycorp.examples.student.remoteservice.host:2.0.0-SNAPSHOT
[DEBUG] Looking up lifecycle mappings for packaging eclipse-plugin from ClassRealm[project>org.eclipse.ecf.jaxrs:com.mycorp.examples.student.remoteservice.host:2.0.0-SNAPSHOT, parent: ClassRealm[maven.api, parent: null]]
[DEBUG] Dependency collection stats: {ConflictMarker.analyzeTime=241600, ConflictMarker.markTime=119100, ConflictMarker.nodeCount=97, ConflictIdSorter.graphTime=119000, ConflictIdSorter.topsortTime=29700, ConflictIdSorter.conflictIdCount=45, ConflictIdSorter.conflictIdCycleCount=0, ConflictResolver.totalTime=2993200, ConflictResolver.conflictItemCount=96, DefaultDependencyCollector.collectTime=5505500, DefaultDependencyCollector.transformTime=3532700}
[DEBUG] org.eclipse.tycho:tycho-maven-plugin:jar:1.2.0
[DEBUG] org.eclipse.tycho:tycho-core:jar:1.2.0:compile
[DEBUG] org.apache.maven:maven-core:jar:3.0:compile (version managed from default)
[DEBUG] org.apache.maven:maven-model:jar:3.0:compile (version managed from default)
[DEBUG] org.apache.maven:maven-settings:jar:3.0:compile (version managed from default)
[DEBUG] org.apache.maven:maven-settings-builder:jar:3.0:compile
[DEBUG] org.apache.maven:maven-repository-metadata:jar:3.0:compile
[DEBUG] org.apache.maven:maven-artifact:jar:3.0:compile
[DEBUG] org.apache.maven:maven-model-builder:jar:3.0:compile
[DEBUG] org.apache.maven:maven-aether-provider:jar:3.0:runtime
[DEBUG] org.sonatype.aether:aether-impl:jar:1.7:compile
[DEBUG] org.sonatype.aether:aether-spi:jar:1.7:compile
[DEBUG] org.sonatype.aether:aether-api:jar:1.7:compile
[DEBUG] org.sonatype.aether:aether-util:jar:1.7:compile
[DEBUG] org.sonatype.sisu:sisu-inject-plexus:jar:1.4.2:compile
[DEBUG] org.sonatype.sisu:sisu-inject-bean:jar:1.4.2:compile
[DEBUG] org.sonatype.sisu:sisu-guice:jar:noaop:2.1.7:compile
[DEBUG] org.codehaus.plexus:plexus-interpolation:jar:1.14:compile
[DEBUG] org.codehaus.plexus:plexus-classworlds:jar:2.2.3:compile
[DEBUG] org.sonatype.plexus:plexus-sec-dispatcher:jar:1.3:compile
[DEBUG] org.sonatype.plexus:plexus-cipher:jar:1.7:compile (version managed from default)
[DEBUG] org.apache.maven:maven-plugin-api:jar:3.0:compile (version managed from default)
[DEBUG] org.codehaus.plexus:plexus-utils:jar:3.0.24:compile (version managed from default)
[DEBUG] org.codehaus.plexus:plexus-archiver:jar:3.4:compile (version managed from default) (exclusions managed from default)
[DEBUG] org.codehaus.plexus:plexus-io:jar:2.7.1:compile (version managed from default)
[DEBUG] commons-io:commons-io:jar:2.5:compile
[DEBUG] org.apache.commons:commons-compress:jar:1.15:compile (version managed from default)
[DEBUG] org.objenesis:objenesis:jar:2.6:compile
[DEBUG] org.iq80.snappy:snappy:jar:0.4:compile
[DEBUG] org.tukaani:xz:jar:1.5:runtime
[DEBUG] org.eclipse.tycho:org.eclipse.osgi.compatibility.state:jar:1.1.100.v20180131-1413:compile (version managed from default)
[DEBUG] org.eclipse.tycho:sisu-equinox-embedder:jar:1.2.0:compile
[DEBUG] org.eclipse.tycho:org.eclipse.osgi:jar:3.13.0.v20180226-1711:compile (version managed from default)
[DEBUG] org.eclipse.tycho:sisu-equinox-api:jar:1.2.0:compile
[DEBUG] org.eclipse.tycho:tycho-metadata-model:jar:1.2.0:compile
[DEBUG] de.pdark:decentxml:jar:1.3:compile (version managed from default)
[DEBUG] org.eclipse.tycho:tycho-embedder-api:jar:1.2.0:compile
[DEBUG] org.eclipse.tycho:org.eclipse.tycho.embedder.shared:jar:1.2.0:compile
[DEBUG] org.eclipse.tycho:org.eclipse.tycho.core.shared:jar:1.2.0:compile
[DEBUG] org.apache.maven:maven-compat:jar:3.0:compile (version managed from default)
[DEBUG] org.apache.maven.wagon:wagon-provider-api:jar:1.0-beta-6:compile
[DEBUG] org.eclipse.tycho:tycho-p2-facade:jar:1.2.0:compile
[DEBUG] org.codehaus.plexus:plexus-component-annotations:jar:1.7.1:compile (version managed from default)
[DEBUG] org.eclipse.tycho:org.eclipse.tycho.p2.resolver.shared:jar:1.2.0:compile
[DEBUG] org.eclipse.tycho:org.eclipse.tycho.p2.tools.shared:jar:1.2.0:compile
[DEBUG] Extension realms for project org.eclipse.ecf.jaxrs:org.eclipse.ecf.jaxrs.parent:pom:1.0.0-SNAPSHOT: [ClassRealm[extension>org.eclipse.tycho:tycho-maven-plugin:1.2.0, parent: jdk.internal.loader.ClassLoaders$AppClassLoader@bea95d50]]
[DEBUG] Looking up lifecycle mappings for packaging pom from ClassRealm[project>org.eclipse.ecf.jaxrs:com.mycorp.examples.student.remoteservice.host:2.0.0-SNAPSHOT, parent: ClassRealm[maven.api, parent: null]]
[DEBUG] org.eclipse.tycho:tycho-maven-plugin:1.2.0 configured in MavenProject: org.eclipse.ecf.jaxrs:com.mycorp.examples.student.remoteservice.host:2.0.0-SNAPSHOT @ C:\Users\tvogel\git\JaxRSProviders\examples\com.mycorp.examples.student.remoteservice.host\pom.xml
[DEBUG] org.eclipse.tycho:tycho-source-plugin:1.2.0 configured in MavenProject: org.eclipse.ecf.jaxrs:com.mycorp.examples.student.remoteservice.host:2.0.0-SNAPSHOT @ C:\Users\tvogel\git\JaxRSProviders\examples\com.mycorp.examples.student.remoteservice.host\pom.xml
[DEBUG] org.eclipse.tycho:tycho-p2-plugin:1.2.0 configured in MavenProject: org.eclipse.ecf.jaxrs:com.mycorp.examples.student.remoteservice.host:2.0.0-SNAPSHOT @ C:\Users\tvogel\git\JaxRSProviders\examples\com.mycorp.examples.student.remoteservice.host\pom.xml
[DEBUG] org.eclipse.tycho:tycho-packaging-plugin:1.2.0 configured in MavenProject: org.eclipse.ecf.jaxrs:com.mycorp.examples.student.remoteservice.host:2.0.0-SNAPSHOT @ C:\Users\tvogel\git\JaxRSProviders\examples\com.mycorp.examples.student.remoteservice.host\pom.xml
[DEBUG] org.eclipse.tycho:tycho-compiler-plugin:1.2.0 configured in MavenProject: org.eclipse.ecf.jaxrs:com.mycorp.examples.student.remoteservice.host:2.0.0-SNAPSHOT @ C:\Users\tvogel\git\JaxRSProviders\examples\com.mycorp.examples.student.remoteservice.host\pom.xml
[DEBUG] target-platform-configuration for MavenProject: org.eclipse.ecf.jaxrs:com.mycorp.examples.student.remoteservice.host:2.0.0-SNAPSHOT @ C:\Users\tvogel\git\JaxRSProviders\examples\com.mycorp.examples.student.remoteservice.host\pom.xml:

org.eclipse.ecf.jaxrs org.eclipse.ecf.jaxrs.releng.target ecf-jaxrs-2019-12 1.0.0-SNAPSHOT consider win32 win32 x86 win32 win32 x86_64 linux gtk x86 linux gtk x86_64 macosx cocoa x86_64 [DEBUG] Could not find metadata org.eclipse.ecf.jaxrs:org.eclipse.ecf.jaxrs.releng.target:1.0.0-SNAPSHOT/maven-metadata.xml in local (C:\Users\tvogel\.m2\repository) [DEBUG] Using transporter WagonTransporter with priority -1.0 for https://repo1.maven.org/maven2 [DEBUG] Using connector BasicRepositoryConnector with priority 0.0 for https://repo1.maven.org/maven2 Downloading from central: https://repo1.maven.org/maven2/org/eclipse/ecf/jaxrs/org.eclipse.ecf.jaxrs.releng.target/1.0.0-SNAPSHOT/maven-metadata.xml [DEBUG] Writing tracking file C:\Users\tvogel\.m2\repository\org\eclipse\ecf\jaxrs\org.eclipse.ecf.jaxrs.releng.target\1.0.0-SNAPSHOT\resolver-status.properties [DEBUG] Could not find metadata org.eclipse.ecf.jaxrs:org.eclipse.ecf.jaxrs.releng.target:1.0.0-SNAPSHOT/maven-metadata.xml in central (https://repo1.maven.org/maven2) [DEBUG] Using transporter WagonTransporter with priority -1.0 for https://repo1.maven.org/maven2 [DEBUG] Using connector BasicRepositoryConnector with priority 0.0 for https://repo1.maven.org/maven2 Downloading from central: https://repo1.maven.org/maven2/org/eclipse/ecf/jaxrs/org.eclipse.ecf.jaxrs.releng.target/1.0.0-SNAPSHOT/org.eclipse.ecf.jaxrs.releng.target-1.0.0-SNAPSHOT-ecf-jaxrs-2019-12.target [DEBUG] Writing tracking file C:\Users\tvogel\.m2\repository\org\eclipse\ecf\jaxrs\org.eclipse.ecf.jaxrs.releng.target\1.0.0-SNAPSHOT\org.eclipse.ecf.jaxrs.releng.target-1.0.0-SNAPSHOT-ecf-jaxrs-2019-12.target.lastUpdated [ERROR] Internal error: java.lang.RuntimeException: Could not resolve target platform specification artifact org.eclipse.ecf.jaxrs:org.eclipse.ecf.jaxrs.releng.target:target:ecf-jaxrs-2019-12:1.0.0-SNAPSHOT -> [Help 1] org.apache.maven.InternalErrorException: Internal error: java.lang.RuntimeException: Could not resolve target platform specification artifact org.eclipse.ecf.jaxrs:org.eclipse.ecf.jaxrs.releng.target:target:ecf-jaxrs-2019-12:1.0.0-SNAPSHOT at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:120) at org.apache.maven.cli.MavenCli.execute (MavenCli.java:957) at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289) at org.apache.maven.cli.MavenCli.main (MavenCli.java:193) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke (Method.java:564) at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282) at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225) at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406) at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347) Caused by: java.lang.RuntimeException: Could not resolve target platform specification artifact org.eclipse.ecf.jaxrs:org.eclipse.ecf.jaxrs.releng.target:target:ecf-jaxrs-2019-12:1.0.0-SNAPSHOT at org.eclipse.tycho.core.resolver.DefaultTargetPlatformConfigurationReader.addTargetArtifact (DefaultTargetPlatformConfigurationReader.java:389) at org.eclipse.tycho.core.resolver.DefaultTargetPlatformConfigurationReader.setTarget (DefaultTargetPlatformConfigurationReader.java:342) at org.eclipse.tycho.core.resolver.DefaultTargetPlatformConfigurationReader.getTargetPlatformConfiguration (DefaultTargetPlatformConfigurationReader.java:75) at org.eclipse.tycho.core.resolver.DefaultTychoResolver.setupProject (DefaultTychoResolver.java:87) at org.eclipse.tycho.core.maven.TychoMavenLifecycleParticipant.afterProjectsRead (TychoMavenLifecycleParticipant.java:90) at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:264) at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192) at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105) at org.apache.maven.cli.MavenCli.execute (MavenCli.java:957) at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289) at org.apache.maven.cli.MavenCli.main (MavenCli.java:193) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke (Method.java:564) at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282) at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225) at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406) at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347) [ERROR] [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/InternalErrorException `

Possible racecondition on Service creation and injection?

This is an intermittent error that has been puzzeling me for some weeks now. Sometimes, when I start our RCP Client this fails with the following error logs
12.07.2021 15:46:37.513 [2bcb0ca164] [DEBUG] c.e.k.s.extension.KlvApiObjectMapper - Initialize new ObjectMapper. 12.07.2021 15:46:42.798 [ main] [INFO ] c.evolit.klv.ui.state.ApplicationState - ClientId set to 000C292A7378 org.eclipse.e4.core.di.InjectionException: Unable to process "LoginController.authService": no actual value was found for the argument "AuthenticationServiceInterface[@org.eclipse.e4.core.di.extensions.Service(filterExpression=, dynamic=true)]". at org.eclipse.e4.core.internal.di.InjectorImpl.reportUnresolvedArgument(InjectorImpl.java:482) at org.eclipse.e4.core.internal.di.InjectorImpl.resolveRequestorArgs(InjectorImpl.java:473) at org.eclipse.e4.core.internal.di.InjectorImpl.internalInject(InjectorImpl.java:129) at org.eclipse.e4.core.internal.di.InjectorImpl.internalMake(InjectorImpl.java:405) at org.eclipse.e4.core.internal.di.InjectorImpl.resolveArgs(InjectorImpl.java:558) at org.eclipse.e4.core.internal.di.InjectorImpl.resolveRequestorArgs(InjectorImpl.java:463) at org.eclipse.e4.core.internal.di.InjectorImpl.internalInject(InjectorImpl.java:129) at org.eclipse.e4.core.internal.di.InjectorImpl.internalMake(InjectorImpl.java:405) at org.eclipse.e4.core.internal.di.InjectorImpl.make(InjectorImpl.java:332) at org.eclipse.e4.core.contexts.ContextInjectionFactory.make(ContextInjectionFactory.java:202) at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.createFromBundle(ReflectionContributionFactory.java:91) at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.doCreate(ReflectionContributionFactory.java:60) at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.create(ReflectionContributionFactory.java:42) at org.eclipse.e4.ui.internal.workbench.swt.E4Application.lambda$0(E4Application.java:243) at java.util.Optional.ifPresent(Optional.java:159) at org.eclipse.e4.ui.internal.workbench.swt.E4Application.createE4Workbench(E4Application.java:242) at org.eclipse.e4.ui.internal.workbench.swt.E4Application.start(E4Application.java:153) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:401) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:657) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:594) at org.eclipse.equinox.launcher.Main.run(Main.java:1447) at org.eclipse.equinox.launcher.Main.main(Main.java:1420) org.eclipse.e4.core.di.InjectionException: Unable to process "AbrechnungLoadService.abrechnungService": no actual value was found for the argument "AbrechnungServiceInterface[@org.eclipse.e4.core.di.extensions.Service(filterExpression=, dynamic=true)]". at org.eclipse.e4.core.internal.di.InjectorImpl.reportUnresolvedArgument(InjectorImpl.java:482) at org.eclipse.e4.core.internal.di.InjectorImpl.resolveRequestorArgs(InjectorImpl.java:473) at org.eclipse.e4.core.internal.di.InjectorImpl.internalInject(InjectorImpl.java:129) at org.eclipse.e4.core.internal.di.InjectorImpl.internalMake(InjectorImpl.java:405) at org.eclipse.e4.core.internal.di.InjectorImpl.resolveArgs(InjectorImpl.java:558) at org.eclipse.e4.core.internal.di.InjectorImpl.resolveRequestorArgs(InjectorImpl.java:463) at org.eclipse.e4.core.internal.di.InjectorImpl.internalInject(InjectorImpl.java:129) at org.eclipse.e4.core.internal.di.InjectorImpl.internalMake(InjectorImpl.java:405) at org.eclipse.e4.core.internal.di.InjectorImpl.make(InjectorImpl.java:332) at org.eclipse.e4.core.contexts.ContextInjectionFactory.make(ContextInjectionFactory.java:202) at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.createFromBundle(ReflectionContributionFactory.java:91) at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.doCreate(ReflectionContributionFactory.java:60) at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.create(ReflectionContributionFactory.java:42) at org.eclipse.e4.ui.internal.workbench.addons.HandlerProcessingAddon.processActiveHandler(HandlerProcessingAddon.java:145) at org.eclipse.e4.ui.internal.workbench.addons.HandlerProcessingAddon.handleContextEvent(HandlerProcessingAddon.java:127) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:58) at org.eclipse.e4.core.di.internal.extensions.EventObjectSupplier$DIEventHandler.handleEvent(EventObjectSupplier.java:92) at org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:205) at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:203) at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:1) at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151) at org.eclipse.equinox.internal.event.EventAdminImpl.dispatchEvent(EventAdminImpl.java:132) at org.eclipse.equinox.internal.event.EventAdminImpl.sendEvent(EventAdminImpl.java:75) at org.eclipse.equinox.internal.event.EventComponent.sendEvent(EventComponent.java:44) at org.eclipse.e4.ui.services.internal.events.EventBroker.send(EventBroker.java:55) at org.eclipse.e4.ui.internal.workbench.UIEventPublisher.notifyChanged(UIEventPublisher.java:63) at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify(BasicNotifierImpl.java:424) at org.eclipse.e4.ui.model.application.ui.basic.impl.WindowImpl.setContext(WindowImpl.java:521) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:635) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:766) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:737) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:731) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:715) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1084) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1047) at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) at org.eclipse.e4.ui.internal.workbench.swt.E4Application.start(E4Application.java:166) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:401) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:657) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:594) at org.eclipse.equinox.launcher.Main.run(Main.java:1447) at org.eclipse.equinox.launcher.Main.main(Main.java:1420) org.eclipse.e4.core.di.InjectionException: Unable to process "AbrechnungLoadService.abrechnungService": no actual value was found for the argument "AbrechnungServiceInterface[@org.eclipse.e4.core.di.extensions.Service(filterExpression=, dynamic=true)]". at org.eclipse.e4.core.internal.di.InjectorImpl.reportUnresolvedArgument(InjectorImpl.java:482) at org.eclipse.e4.core.internal.di.InjectorImpl.resolveRequestorArgs(InjectorImpl.java:473) at org.eclipse.e4.core.internal.di.InjectorImpl.internalInject(InjectorImpl.java:129) at org.eclipse.e4.core.internal.di.InjectorImpl.internalMake(InjectorImpl.java:405) at org.eclipse.e4.core.internal.di.InjectorImpl.resolveArgs(InjectorImpl.java:558) at org.eclipse.e4.core.internal.di.InjectorImpl.resolveRequestorArgs(InjectorImpl.java:463) at org.eclipse.e4.core.internal.di.InjectorImpl.internalInject(InjectorImpl.java:129) at org.eclipse.e4.core.internal.di.InjectorImpl.internalMake(InjectorImpl.java:405) at org.eclipse.e4.core.internal.di.InjectorImpl.make(InjectorImpl.java:332) at org.eclipse.e4.core.contexts.ContextInjectionFactory.make(ContextInjectionFactory.java:202) at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.createFromBundle(ReflectionContributionFactory.java:91) at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.doCreate(ReflectionContributionFactory.java:60) at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.create(ReflectionContributionFactory.java:42) at org.eclipse.e4.ui.internal.workbench.addons.HandlerProcessingAddon.processActiveHandler(HandlerProcessingAddon.java:145) at org.eclipse.e4.ui.internal.workbench.addons.HandlerProcessingAddon.handleContextEvent(HandlerProcessingAddon.java:127) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:58) at org.eclipse.e4.core.di.internal.extensions.EventObjectSupplier$DIEventHandler.handleEvent(EventObjectSupplier.java:92) at org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:205) at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:203) at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:1) at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151) at org.eclipse.equinox.internal.event.EventAdminImpl.dispatchEvent(EventAdminImpl.java:132) at org.eclipse.equinox.internal.event.EventAdminImpl.sendEvent(EventAdminImpl.java:75) at org.eclipse.equinox.internal.event.EventComponent.sendEvent(EventComponent.java:44) at org.eclipse.e4.ui.services.internal.events.EventBroker.send(EventBroker.java:55) at org.eclipse.e4.ui.internal.workbench.UIEventPublisher.notifyChanged(UIEventPublisher.java:63) at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify(BasicNotifierImpl.java:424) at org.eclipse.e4.ui.model.application.ui.basic.impl.WindowImpl.setContext(WindowImpl.java:521) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:635) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:766) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:737) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:731) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:715) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1084) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1047) at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) at org.eclipse.e4.ui.internal.workbench.swt.E4Application.start(E4Application.java:166) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:401) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:657) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:594) at org.eclipse.equinox.launcher.Main.run(Main.java:1447) at org.eclipse.equinox.launcher.Main.main(Main.java:1420) 15:46:46.404;IMPORT_REGISTRATION;importedSR={com.evolit.klv.service.AbrechnungServiceInterface, com.evolit.klv.service.AnwenderEinstellungServiceInterface, com.evolit.klv.service.AuthenticationServiceInterface, com.evolit.klv.service.BetreiberServiceInterface, com.evolit.klv.service.LookupServiceInterface, com.evolit.klv.service.RechnungServiceInterface, com.evolit.klv.service.TerminalServiceInterface, com.evolit.klv.service.NebengebuehrServiceInterface, com.evolit.klv.service.ITEVorgangServiceInterface, com.evolit.klv.service.ReportingServiceInterface, com.evolit.klv.service.LogEndToEndServiceInterface, com.evolit.klv.service.AbrechnungKorrekturServiceInterface, com.evolit.klv.service.KundenServiceInterface}={service.intents=osgi.async, service.id=170, service.bundleid=85, service.scope=bundle, osgi.basic.timeout=1800000, service.imported.configs=[ecf.jaxrs.jersey.client], endpoint.id=[redacted], service.imported=org.eclipse.ecf.provider.jaxrs.client.JaxRSClientContainer$JaxRSClientRemoteService@fbce72};cID=URIID [uri=[redacted];rsId=0 --Endpoint Description--- <endpoint-descriptions xmlns="http://www.osgi.org/xmlns/rsa/v1.0.0"> <endpoint-description> <property name="ecf.endpoint.id.ns" value-type="String" value="ecf.namespace.jaxrs"/> <property name="ecf.endpoint.rsfilter" value-type="String" value="(objectClass=*)"/> <property name="ecf.rsvc.id" value-type="Long" value="0"/> <property name="endpoint.id" value-type="String" value="[redacted]"/> <property name="objectClass" value-type="String"> <array> <value>com.evolit.klv.service.AbrechnungServiceInterface</value> <value>com.evolit.klv.service.AnwenderEinstellungServiceInterface</value> <value>com.evolit.klv.service.AuthenticationServiceInterface</value> <value>com.evolit.klv.service.BetreiberServiceInterface</value> <value>com.evolit.klv.service.LookupServiceInterface</value> <value>com.evolit.klv.service.RechnungServiceInterface</value> <value>com.evolit.klv.service.TerminalServiceInterface</value> <value>com.evolit.klv.service.NebengebuehrServiceInterface</value> <value>com.evolit.klv.service.ITEVorgangServiceInterface</value> <value>com.evolit.klv.service.ReportingServiceInterface</value> <value>com.evolit.klv.service.LogEndToEndServiceInterface</value> <value>com.evolit.klv.service.AbrechnungKorrekturServiceInterface</value> <value>com.evolit.klv.service.KundenServiceInterface</value> </array> </property> <property name="osgi.basic.timeout" value-type="String" value="1800000"/> <property name="remote.configs.supported" value-type="String"> <array> <value>ecf.jaxrs.jersey.server</value> </array> </property> <property name="remote.intents.supported" value-type="String"> <array> <value>passByValue</value> <value>exactlyOnce</value> <value>ordered</value> <value>jaxrs</value> </array> </property> <property name="service.imported.configs" value-type="String"> <array> <value>ecf.jaxrs.jersey.client</value> </array> </property> <property name="service.intents" value-type="String" value="osgi.async"/> </endpoint-description> </endpoint-descriptions> ---End Endpoint Description

If I close the client and restart everything works fine. This happens perhaps one in ten times, perhaps even less and it is impossible for us to force it in our DEV environment, it NEVER happens when we start directly from Eclipse (tried literally dozens of time) only when we start the built client.

Unfortunately the above is the only "good" log I have of such an issue but it makes me think that there might be a race condition where the dependency injection already tries to inject while our services are not ready yet, what is your opinion here, is that possible?
Perhaps related to our startlevels?
image

Like for example the bundle handling the DI and the jersey bundles run at the same time and in 99% of the time jersey/ecf finishes before DI kicks in but just sometimes it doesn't? If so, what should we change on start-levels or is there another way we could prevent this?

Enroute Examples

Hello,
Is is possible to change the samples mentionned in the JaxRSProviders folder to use maven same as enroute tutorials.
Thanks in advance

HttpServiceHolder component usage

Hi,

while trying to understand remote services with JAX-RS better, I looked through the code and came across the HttpServiceHolder. The implementation looks strange from a DS perspective, but I am not sure.

It is defined as a DS Component and it looks like it is intended to provide the HttpService. Why is that necessary? If DS is used there should be no need for such a class. If someone needs the HttpService he could inject it directly without the use of a HttpServiceHolder. If the intention is to also support non-DS environments, than still the implementation looks strange. In its current implementation it works in both DS and non-DS. But the DS benefits are not used in any way?

  • immediate=true does not really make sense. Why does it need to be activated immediately?
  • Why do you use the ServiceTracker? With DS you could get the service injected once it is available.

Maybe I am missing something, but like I said, from a DS perspective the implementation looks incorrect. I just wanted to inform about that, not sure where and in which scenarios this class is used.

Greez,
Dirk

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.