0

I'm using from WSO2 API Manager 4.1.0 and I need to change URI pattern of methods that Generated REST APIs form SAOP endpoint (There is no problem in rest services with rest Endpoint).

for example I have method with /mutliply URI pattern and I want to change /api/multiply after change API Definition and save and deploy I get the following error:

api-manager_1  | [2023-02-28 09:13:01,036] ERROR - GlobalThrowableMapper An unknown exception has been captured by the global exception mapper.
api-manager_1  | java.lang.ClassCastException: class [Ljava.lang.String; cannot be cast to class [B ([Ljava.lang.String; and [B are in module java.base of loader 'bootstrap')
api-manager_1  |        at org.wso2.carbon.apimgt.persistence.RegistryPersistenceImpl.getSoapToRestSequences(RegistryPersistenceImpl.java:3581) ~[org.wso2.carbon.apimgt.persistence_9.20.74.jar:?]
api-manager_1  |        at org.wso2.carbon.apimgt.persistence.RegistryPersistenceImpl.getPublisherAPI(RegistryPersistenceImpl.java:706) ~[org.wso2.carbon.apimgt.persistence_9.20.74.jar:?]
api-manager_1  |        at org.wso2.carbon.apimgt.impl.APIProviderImpl.getAPIbyUUID_aroundBody506(APIProviderImpl.java:8318) ~[org.wso2.carbon.apimgt.impl_9.20.74.jar:?]
api-manager_1  |        at org.wso2.carbon.apimgt.impl.APIProviderImpl.getAPIbyUUID(APIProviderImpl.java:8315) ~[org.wso2.carbon.apimgt.impl_9.20.74.jar:?]
api-manager_1  |        at org.wso2.carbon.apimgt.impl.UserAwareAPIProvider.getAPIbyUUID(UserAwareAPIProvider.java:1) ~[org.wso2.carbon.apimgt.impl_9.20.74.jar:?]
api-manager_1  |        at org.wso2.carbon.apimgt.rest.api.publisher.v1.impl.ApisApiServiceImpl.getAPIByID(ApisApiServiceImpl.java:3959) ~[?:?]
api-manager_1  |        at org.wso2.carbon.apimgt.rest.api.publisher.v1.impl.ApisApiServiceImpl.createAPIRevision(ApisApiServiceImpl.java:4164) ~[?:?]
api-manager_1  |        at org.wso2.carbon.apimgt.rest.api.publisher.v1.ApisApi.createAPIRevision(ApisApi.java:339) ~[?:?]
api-manager_1  |        at jdk.internal.reflect.GeneratedMethodAccessor654.invoke(Unknown Source) ~[?:?]
api-manager_1  |        at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
api-manager_1  |        at java.lang.reflect.Method.invoke(Method.java:566) ~[?:?]
api-manager_1  |        at org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:179) ~[?:?]
api-manager_1  |        at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:96) ~[?:?]
api-manager_1  |        at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:201) ~[?:?]
api-manager_1  |        at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:104) ~[?:?]
api-manager_1  |        at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:59) ~[?:?]
api-manager_1  |        at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:96) ~[?:?]
api-manager_1  |        at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307) ~[?:?]
api-manager_1  |        at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121) ~[?:?]
api-manager_1  |        at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:265) ~[?:?]
api-manager_1  |        at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:234) ~[?:?]
api-manager_1  |        at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:208) ~[?:?]
api-manager_1  |        at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:160) ~[?:?]
api-manager_1  |        at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:225) ~[?:?]
api-manager_1  |        at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:304) ~[?:?]
api-manager_1  |        at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:217) ~[?:?]
api-manager_1  |        at javax.servlet.http.HttpServlet.service(HttpServlet.java:681) ~[tomcat-servlet-api_9.0.58.wso2v1.jar:?]
api-manager_1  |        at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:279) ~[?:?]
api-manager_1  |        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat_9.0.58.wso2v1.jar:?]
api-manager_1  |        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat_9.0.58.wso2v1.jar:?]
api-manager_1  |        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat_9.0.58.wso2v1.jar:?]
api-manager_1  |        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat_9.0.58.wso2v1.jar:?]
api-manager_1  |        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat_9.0.58.wso2v1.jar:?]
api-manager_1  |        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) ~[tomcat_9.0.58.wso2v1.jar:?]
api-manager_1  |        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat_9.0.58.wso2v1.jar:?]
api-manager_1  |        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540) ~[tomcat_9.0.58.wso2v1.jar:?]
api-manager_1  |        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) ~[tomcat_9.0.58.wso2v1.jar:?]
api-manager_1  |        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat_9.0.58.wso2v1.jar:?]
api-manager_1  |        at org.wso2.carbon.identity.context.rewrite.valve.TenantContextRewriteValve.invoke(TenantContextRewriteValve.java:107) ~[org.wso2.carbon.identity.context.rewrite.valve_1.4.52.jar:?]
api-manager_1  |        at org.wso2.carbon.identity.authz.valve.AuthorizationValve.invoke(AuthorizationValve.java:110) ~[org.wso2.carbon.identity.authz.valve_1.4.52.jar:?]
api-manager_1  |        at org.wso2.carbon.identity.auth.valve.AuthenticationValve.invoke(AuthenticationValve.java:102) ~[org.wso2.carbon.identity.auth.valve_1.4.52.jar:?]
api-manager_1  |        at org.wso2.carbon.tomcat.ext.valves.CompositeValve.continueInvocation(CompositeValve.java:101) ~[org.wso2.carbon.tomcat.ext_4.6.3.jar:?]
api-manager_1  |        at org.wso2.carbon.tomcat.ext.valves.TomcatValveContainer.invokeValves(TomcatValveContainer.java:49) ~[org.wso2.carbon.tomcat.ext_4.6.3.jar:?]
api-manager_1  |        at org.wso2.carbon.tomcat.ext.valves.CompositeValve.invoke(CompositeValve.java:62) ~[org.wso2.carbon.tomcat.ext_4.6.3.jar:?]
api-manager_1  |        at org.wso2.carbon.tomcat.ext.valves.CarbonStuckThreadDetectionValve.invoke(CarbonStuckThreadDetectionValve.java:146) ~[org.wso2.carbon.tomcat.ext_4.6.3.jar:?]
api-manager_1  |        at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687) ~[tomcat_9.0.58.wso2v1.jar:?]
api-manager_1  |        at org.wso2.carbon.tomcat.ext.valves.CarbonContextCreatorValve.invoke(CarbonContextCreatorValve.java:58) ~[org.wso2.carbon.tomcat.ext_4.6.3.jar:?]
api-manager_1  |        at org.wso2.carbon.tomcat.ext.valves.RequestCorrelationIdValve.invoke(RequestCorrelationIdValve.java:126) ~[org.wso2.carbon.tomcat.ext_4.6.3.jar:?]
api-manager_1  |        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat_9.0.58.wso2v1.jar:?]
api-manager_1  |        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:359) ~[tomcat_9.0.58.wso2v1.jar:?]
api-manager_1  |        at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399) ~[tomcat_9.0.58.wso2v1.jar:?]
api-manager_1  |        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat_9.0.58.wso2v1.jar:?]
api-manager_1  |        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889) ~[tomcat_9.0.58.wso2v1.jar:?]
api-manager_1  |        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1735) ~[tomcat_9.0.58.wso2v1.jar:?]
api-manager_1  |        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat_9.0.58.wso2v1.jar:?]
api-manager_1  |        at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat_9.0.58.wso2v1.jar:?]
api-manager_1  |        at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat_9.0.58.wso2v1.jar:?]
api-manager_1  |        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat_9.0.58.wso2v1.jar:?]
api-manager_1  |        at java.lang.Thread.run(Thread.java:829) [?:?]

Even after getting the error I'm not able to open the api!

Thank you for helping me

Mr White
  • 97
  • 1
  • 9

1 Answers1

0

It's not a straight forward task to change a resource of a SOAP to REST API. Since resources are generated according to the operations present in the WSDL and there is an internal mapping that uses the paths, and parameters of the REST API to generate the backend SOAP envelop, you can't simply update the resource name from the API definition.

If you proceed to the resources section, you can see that there is a synapse sequence created with each resource. This is the mapping logic that generates the SOAP envelop according to the request parameters. Since this API is governed by the WSDL, I don't think you can change the resource name.

You have to either proxy this API with another REST API and change the resource and map, or you have to use specialized tools such as micro integrator and integration studio for such usecases.

Lakshitha
  • 1,021
  • 1
  • 6
  • 15
  • Thank you for your answer. I know I can use from MI and integration studio but I want to fix this in publisher so I create rest api and copy api definition from generated rest to this new one but only post method worked while I want to have get method. @Lakshitha – Mr White Mar 03 '23 at 13:18
  • What do you mean? GET resource from the generated API cannot be called from the other proxy API? – Lakshitha Mar 03 '23 at 17:22
  • No, I said that when I create a rest api, only the post-proxied methods of the main soap service work, and when I create one of its methods with the GET type, it does not work. – Mr White Mar 04 '23 at 07:16
  • This should work as a normal back-end API fronted with API manager. Any errors? – Lakshitha Mar 04 '23 at 10:49
  • No, I don't have an error, it's just that when I call the method with GET, it doesn't give the desired output. Actually, I need to convert the GET method to the POST, which will finally request the endpoint (soap) with the POST. – Mr White Mar 04 '23 at 10:59