Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Generate REST API from SOAP wsdl not working #2281

Open
lpastor74 opened this issue Nov 21, 2023 · 2 comments
Open

Generate REST API from SOAP wsdl not working #2281

lpastor74 opened this issue Nov 21, 2023 · 2 comments

Comments

@lpastor74
Copy link

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
Copy link
Author

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
Copy link
Author

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants