wso2 / api-manager

All issues, tasks, improvements and new features of WSO2 API Manager
Apache License 2.0
34 stars 8 forks source link

Generate REST API from SOAP wsdl not working #2281

Open lpastor74 opened 7 months ago

lpastor74 commented 7 months ago

Description

I wanted to create a REST API based on UserAdmin service wsdl.

Steps to Reproduce

  1. Enable admin services.
  2. Choose 'Expose a SOAP Service as a REST API ', select 'Generate REST APIs' and provide the UserAdmin service wsdl URL https://localhost:9443/services/UserAdmin?wsdl

the error Im getting is on the resource level there is error with payload image image

no gateway URL ? image

example: for Resource addUser mediator looks like

<header description="SOAPAction" name="SOAPAction" scope="transport" value="urn:addUser"/>
<property name="REST_URL_POSTFIX" scope="axis2" action="remove"/>
<property expression="json-eval($.addUser.claims.claimURI)" name="req.var.addUser.claims.claimURI"/>
<property expression="json-eval($.addUser.claims.value)" name="req.var.addUser.claims.value"/>
<property expression="json-eval($.addUser.userName)" name="req.var.addUser.userName"/>
<property expression="json-eval($.addUser.profileName)" name="req.var.addUser.profileName"/>
<property expression="json-eval($.addUser.password)" name="req.var.addUser.password"/>

<property name="JSONPayload" expression="json-eval($.)"/>
<script language="js">
    var payload =  mc.getProperty("JSONPayload");
    var payloadObj = JSON.parse(payload);
    var results = payloadObj.addUser; 
   var response = "";
   for (i = 0; i &lt; results.length; i++) {
       var elem = results[i];
       response += "&lt;web:roles xmlns:web='http://org.apache.axis2/xsd'&gt;" + elem + "&lt;/web:string&gt;";
   } 
   var propertyName = "req.var.addUser.roles";
   mc.setProperty(propertyName, response.toString());
 </script>
<payloadFactory description="transform" media-type="xml">
  <format>
  <soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:web="http://org.apache.axis2/xsd">
  <soapenv:Header/>
  <soapenv:Body>
    <web:addUser xmlns:web="http://org.apache.axis2/xsd">
  <web:claims>
    <web:claimURI>$1</web:claimURI>
    <web:value>$2</web:value>
  </web:claims>
  <web:userName>$3</web:userName>
  <web:profileName>$4</web:profileName>
  <web:password>$5</web:password>
</web:addUser>

  </soapenv:Body>
  </soapenv:Envelope>
  </format>
  <args>
    <arg evaluator="xml" expression="get-property('req.var.addUser.claims.claimURI')"/>
<arg evaluator="xml" expression="get-property('req.var.addUser.claims.value')"/>
<arg evaluator="xml" expression="get-property('req.var.addUser.userName')"/>
<arg evaluator="xml" expression="get-property('req.var.addUser.profileName')"/>
<arg evaluator="xml" expression="get-property('req.var.addUser.password')"/>
<arg evaluator="xml" expression="get-property('req.var.addUser.roles')"/>

  </args>
</payloadFactory>
<property description="messageProperty" name="messageType" scope="axis2" type="STRING" value="application/soap+xml"/>

and real SOAP looks like

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://org.apache.axis2/xsd" xmlns:xsd1="http://common.mgt.user.carbon.wso2.org/xsd">
   <soapenv:Header/>
   <soapenv:Body>
      <xsd:addUser>
         <!--Optional:-->
         <xsd:userName>?</xsd:userName>
         <!--Optional:-->
         <xsd:password>?</xsd:password>
         <!--Zero or more repetitions:-->
         <xsd:roles>?</xsd:roles>
         <!--Zero or more repetitions:-->
         <xsd:claims>
            <!--Optional:-->
            <xsd1:claimURI>?</xsd1:claimURI>
            <!--Optional:-->
            <xsd1:value>?</xsd1:value>
         </xsd:claims>
         <!--Optional:-->
         <xsd:profileName>?</xsd:profileName>
      </xsd:addUser>
   </soapenv:Body>
</soapenv:Envelope>

when I tried locally I observed the log

[2023-11-21 15:21:11,522] INFO - DataBridge user admin connected [2023-11-21 15:21:12,043] INFO - TimeoutHandler This engine will expire all callbacks after GLOBAL_TIMEOUT: 120 seconds, irrespective of the timeout action, after the specified or optional timeout [2023-11-21 15:21:12,321] WARN - AuthenticationHandler Illegal access attempt at [2023-11-21 15:21:12,0320] from IP address 127.0.0.1 while trying to authenticate access to service UserAdmin

Affected Component

APIM

Version

4.0

Environment Details (with versions)

Private cloud

Relevant Log Output

No response

Related Issues

No response

Suggested Labels

No response

lpastor74 commented 7 months ago

Update : When I addedd the basic auth on end point (admin/admin) I was able to hit the end point but new error that Im getting is :

[2023-11-21 17:11:52,218] ERROR - RPCMessageReceiver null
java.lang.IllegalArgumentException: null
    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:566) ~[?:?]
    at org.apache.axis2.rpc.receivers.RPCUtil.invokeServiceClass(RPCUtil.java:212) ~[axis2_1.6.1.wso2v83_2.jar:?]
    at org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic(RPCMessageReceiver.java:117) ~[axis2_1.6.1.wso2v83_2.jar:?]
    at org.apache.axis2.receivers.AbstractInOutMessageReceiver.invokeBusinessLogic(AbstractInOutMessageReceiver.java:40) ~[axis2_1.6.1.wso2v83_2.jar:?]
    at org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:110) ~[axis2_1.6.1.wso2v83_2.jar:?]
    at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180) ~[axis2_1.6.1.wso2v83_2.jar:?]
    at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:173) ~[axis2_1.6.1.wso2v83_2.jar:?]
    at org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:148) ~[axis2_1.6.1.wso2v83_2.jar:?]
    at org.wso2.carbon.core.transports.CarbonServlet.doPost(CarbonServlet.java:238) ~[org.wso2.carbon.core_4.8.1.4.jar:?]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:555) ~[tomcat-servlet-api_9.0.76.wso2v1.jar:?]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:623) ~[tomcat-servlet-api_9.0.76.wso2v1.jar:?]
    at org.eclipse.equinox.http.servlet.internal.ServletRegistration.service(ServletRegistration.java:61) ~[?:?]
    at org.eclipse.equinox.http.servlet.internal.ProxyServlet.processAlias(ProxyServlet.java:128) ~[?:?]
    at org.eclipse.equinox.http.servlet.internal.ProxyServlet.service(ProxyServlet.java:68) ~[?:?]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:623) ~[tomcat-servlet-api_9.0.76.wso2v1.jar:?]
    at org.wso2.carbon.tomcat.ext.servlet.DelegationServlet.service(DelegationServlet.java:68) ~[org.wso2.carbon.tomcat.ext_4.8.1.jar:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) ~[tomcat_9.0.76.wso2v1.jar:?]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat_9.0.76.wso2v1.jar:?]
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat_9.0.76.wso2v1.jar:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat_9.0.76.wso2v1.jar:?]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat_9.0.76.wso2v1.jar:?]
    at org.owasp.csrfguard.CsrfGuardFilter.doFilter(CsrfGuardFilter.java:88) ~[csrfguard_3.1.0.wso2v4.jar:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat_9.0.76.wso2v1.jar:?]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat_9.0.76.wso2v1.jar:?]
    at org.apache.catalina.filters.HttpHeaderSecurityFilter.doFilter(HttpHeaderSecurityFilter.java:129) ~[tomcat_9.0.76.wso2v1.jar:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat_9.0.76.wso2v1.jar:?]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat_9.0.76.wso2v1.jar:?]
    at org.wso2.carbon.tomcat.ext.filter.CharacterSetFilter.doFilter(CharacterSetFilter.java:65) ~[org.wso2.carbon.tomcat.ext_4.8.1.jar:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat_9.0.76.wso2v1.jar:?]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat_9.0.76.wso2v1.jar:?]
    at org.apache.catalina.filters.HttpHeaderSecurityFilter.doFilter(HttpHeaderSecurityFilter.java:129) ~[tomcat_9.0.76.wso2v1.jar:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat_9.0.76.wso2v1.jar:?]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat_9.0.76.wso2v1.jar:?]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) ~[tomcat_9.0.76.wso2v1.jar:?]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat_9.0.76.wso2v1.jar:?]
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) ~[tomcat_9.0.76.wso2v1.jar:?]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) ~[tomcat_9.0.76.wso2v1.jar:?]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat_9.0.76.wso2v1.jar:?]
    at org.wso2.carbon.identity.context.rewrite.valve.TenantContextRewriteValve.invoke(TenantContextRewriteValve.java:119) ~[org.wso2.carbon.identity.context.rewrite.valve_1.7.1.jar:?]
    at org.wso2.carbon.identity.context.rewrite.valve.OrganizationContextRewriteValve.invoke(OrganizationContextRewriteValve.java:116) ~[org.wso2.carbon.identity.context.rewrite.valve_1.7.1.jar:?]
    at org.wso2.carbon.tomcat.ext.valves.SameSiteCookieValve.invoke(SameSiteCookieValve.java:38) ~[org.wso2.carbon.tomcat.ext_4.8.1.jar:?]
    at org.wso2.carbon.identity.authz.valve.AuthorizationValve.invoke(AuthorizationValve.java:165) ~[org.wso2.carbon.identity.authz.valve_1.7.1.jar:?]
    at org.wso2.carbon.identity.auth.valve.AuthenticationValve.invoke(AuthenticationValve.java:118) ~[org.wso2.carbon.identity.auth.valve_1.7.1.2.jar:?]
    at org.wso2.carbon.tomcat.ext.valves.CompositeValve.continueInvocation(CompositeValve.java:106) ~[org.wso2.carbon.tomcat.ext_4.8.1.jar:?]
    at org.wso2.carbon.tomcat.ext.valves.TomcatValveContainer.invokeValves(TomcatValveContainer.java:49) ~[org.wso2.carbon.tomcat.ext_4.8.1.jar:?]
    at org.wso2.carbon.tomcat.ext.valves.CompositeValve.invoke(CompositeValve.java:67) ~[org.wso2.carbon.tomcat.ext_4.8.1.jar:?]
    at org.wso2.carbon.tomcat.ext.valves.CarbonStuckThreadDetectionValve.invoke(CarbonStuckThreadDetectionValve.java:152) ~[org.wso2.carbon.tomcat.ext_4.8.1.jar:?]
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:673) ~[tomcat_9.0.76.wso2v1.jar:?]
    at org.wso2.carbon.tomcat.ext.valves.CarbonContextCreatorValve.invoke(CarbonContextCreatorValve.java:63) ~[org.wso2.carbon.tomcat.ext_4.8.1.jar:?]
    at org.wso2.carbon.tomcat.ext.valves.RequestCorrelationIdValve.invoke(RequestCorrelationIdValve.java:137) ~[org.wso2.carbon.tomcat.ext_4.8.1.jar:?]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat_9.0.76.wso2v1.jar:?]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) ~[tomcat_9.0.76.wso2v1.jar:?]
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) ~[tomcat_9.0.76.wso2v1.jar:?]
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat_9.0.76.wso2v1.jar:?]
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) ~[tomcat_9.0.76.wso2v1.jar:?]
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) ~[tomcat_9.0.76.wso2v1.jar:?]
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat_9.0.76.wso2v1.jar:?]
    at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat_9.0.76.wso2v1.jar:?]
    at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat_9.0.76.wso2v1.jar:?]
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat_9.0.76.wso2v1.jar:?]
    at java.lang.Thread.run(Thread.java:834) [?:?]
lpastor74 commented 7 months ago

fix for add Role was to change the param order before :

 <arg evaluator="xml" expression="get-property('req.var.addRole.roleName')"/>
<arg evaluator="xml" expression="get-property('req.var.addRole.userList')"/>
<arg evaluator="xml" expression="get-property('req.var.addRole.permissions')"/>
 <arg evaluator="xml" expression="get-property('req.var.addRole.isSharedRole')"/>

after (correct one ) :

    <arg evaluator="xml" expression="get-property('req.var.addRole.roleName')"/>
   <arg evaluator="xml" expression="get-property('req.var.addRole.isSharedRole')"/>
<arg evaluator="xml" expression="get-property('req.var.addRole.userList')"/>
<arg evaluator="xml" expression="get-property('req.var.addRole.permissions')"/>

The point is: the wsld -> rest generator needs a review. It is not working as it should.