[MGNLREST-260] Rest client definition in 6.2 incompatible with its older versions Created: 13/Jul/20  Updated: 24/Jul/20  Resolved: 24/Jul/20

Status: Closed
Project: Magnolia REST Framework
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Improvement Priority: Neutral
Reporter: Viet Nguyen Assignee: Unassigned
Resolution: Not an issue Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Attachments: Java Source File CustomerCareKnowledgeApiService.java     Java Source File CustomerCareKnowledgeApiServiceTest.java    
Issue Links:
Relates
Template:
Acceptance criteria:
Empty
Task DoD:
[ ]* Doc/release notes changes? Comment present?
[ ]* Downstream builds green?
[ ]* Solution information and context easily available?
[ ]* Tests
[ ]* FixVersion filled and not yet released
[ ]  Architecture Decision Record (ADR)
Date of First Response:

 Description   

Customers who is using Rest Client module in prior versions than 6.2 need to update all their definitions for 6.2 working.
Hopefully we can provide a better way or compatibility module to support the working of older version definition style or somehow mitigate the affect.



 Comments   
Comment by Mercedes Iruela [ 20/Jul/20 ]

Tested on 6.2.1 that it is working as expected, old rest client are registered, in addition, the services are accesible via Java using info.magnolia.rest.client.factory.RestClientFactory:

<SERVICE_INTERFACE_CLASS> service= restClientFactory
        .createClient(this.restClientRegistry.getProvider("<REST_CLIENT_NAME>").get())
        .proxy(<SERVICE_INTERFACE_CLASS>.class);

Example: https://git.magnolia-cms.com/projects/SERVICES/repos/linkmapper/browse/src/main/java/info/magnolia/linkmapper/BrokenLinkRestService.java#98

Comment by Gonzalo Rodríguez [ 21/Jul/20 ]

Hello,

We have tested and the public part works correctly, but the junit tests do not pass, it returns the following error, I do not know how we would have to change to be able to run the junit tests.

testGetInstance(org.mgnl.ob.backend.rest.CustomerCareKnowledgeApiServiceTest) Time elapsed: 2.8 sec <<< ERROR!
info.magnolia.objectfactory.MgnlInstantiationException: Failed to resolve param [2] of type [class info.magnolia.rest.client.factory.RestClientFactory]
at info.magnolia.objectfactory.ObjectManufacturer.resolveParameters(ObjectManufacturer.java:146)
at info.magnolia.objectfactory.ObjectManufacturer.newInstance(ObjectManufacturer.java:91)
at info.magnolia.test.mock.MockComponentProvider.newInstanceWithParameterResolvers(MockComponentProvider.java:143)
at info.magnolia.test.mock.MockComponentProvider.createInstance(MockComponentProvider.java:129)
at info.magnolia.test.mock.AbstractComponentProvider.newInstance(AbstractComponentProvider.java:205)
at info.magnolia.test.mock.AbstractComponentProvider.getComponent(AbstractComponentProvider.java:165)
at info.magnolia.objectfactory.Components.getComponent(Components.java:107)
at org.mgnl.ob.backend.rest.services.api.CustomerCareKnowledgeApiService.<init>(CustomerCareKnowledgeApiService.java:24)
at org.mgnl.ob.backend.rest.services.api.CustomerCareKnowledgeApiService.getInstance(CustomerCareKnowledgeApiService.java:32)
at org.mgnl.ob.backend.rest.CustomerCareKnowledgeApiServiceTest.testGetInstance(CustomerCareKnowledgeApiServiceTest.java:20)
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.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141)
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112)
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.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)
at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)
at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)
Caused by: info.magnolia.objectfactory.MgnlInstantiationException: Failed to resolve param [0] of type [interface info.magnolia.objectfactory.ComponentProvider]
at info.magnolia.objectfactory.ObjectManufacturer.resolveParameters(ObjectManufacturer.java:146)
at info.magnolia.objectfactory.ObjectManufacturer.newInstance(ObjectManufacturer.java:91)
at info.magnolia.test.mock.MockComponentProvider.newInstanceWithParameterResolvers(MockComponentProvider.java:143)
at info.magnolia.test.mock.MockComponentProvider.createInstance(MockComponentProvider.java:129)
at info.magnolia.test.mock.AbstractComponentProvider.newInstance(AbstractComponentProvider.java:205)
at info.magnolia.test.mock.AbstractComponentProvider.getComponent(AbstractComponentProvider.java:165)
at info.magnolia.test.mock.MockParameterResolver.resolveParameter(MockParameterResolver.java:55)
at info.magnolia.objectfactory.ObjectManufacturer.resolveParameter(ObjectManufacturer.java:160)
at info.magnolia.objectfactory.ObjectManufacturer.resolveParameters(ObjectManufacturer.java:140)
... 43 more
Caused by: info.magnolia.objectfactory.MgnlInstantiationException: No concrete implementation defined for interface info.magnolia.objectfactory.ComponentProvider
at info.magnolia.test.mock.AbstractComponentProvider.getComponent(AbstractComponentProvider.java:157)
at info.magnolia.test.mock.MockParameterResolver.resolveParameter(MockParameterResolver.java:55)
at info.magnolia.objectfactory.ObjectManufacturer.resolveParameter(ObjectManufacturer.java:160)
at info.magnolia.objectfactory.ObjectManufacturer.resolveParameters(ObjectManufacturer.java:140)
... 51 more 

On the other hand, there is a warning saying that it is necessary to close the clients, is this necessary? At what point should we close the client?

2020-07-21 10:54:09,135 WARN org.jboss.resteasy.client.jaxrs.i18n : RESTEASY004687: Closing a class org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClient43Engine instance for you. Please close clients yourself.

I attach the junit class and the service classes

Regards,

Gonzalo.

Comment by Mercedes Iruela [ 24/Jul/20 ]

Hi Gonzalo,

Here you can find examples that I think that could help: https://git.magnolia-cms.com/projects/MODULES/repos/rest-client/browse/magnolia-rest-client/src/test/java/info/magnolia/rest/client/integration/RestClientIntegrationTest.java

BTW, I am closing this ticket since it is not an issue.

Regards,
Mercedes

Generated at Mon Feb 12 06:58:10 CET 2024 using Jira 9.4.2#940002-sha1:46d1a51de284217efdcb32434eab47a99af2938b.