【问题标题】:WSO2 APIM: Unable to generate REST APIs from SOAP BackendsWSO2 APIM:无法从 SOAP 后端生成 REST API
【发布时间】:2020-04-17 07:46:28
【问题描述】:

WSO2 API 管理器版本:2.6.0

此链接表明可以从 SOAP 端点生成 REST API: https://docs.wso2.com/display/AM260/Generate+REST+APIs+from+SOAP+Backends

但是当我选择 Generate REST APIs 选项时,WSO2 APIM 不会在 Design API 部分的 API Definitions 下生成操作,如中所述wso2 文档, 相反,此 API 部分显示带有 Test URI 按钮

的 WSDL URL

当我点击“开始创建”按钮时,我可以看到一个 INFO 日志,上面写着

INFO - SOAPOperationBindingUtils 在 WSDL 中找不到 SOAP 操作

请就如何使用 SOAP wsdl 生成 REST API 提出建议

Design API screenshot

Manage section screenshot

Generate REST APIs

以下是用于生成 REST API 的 WSDL

<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:tns="http://www.r2services.com" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.r2services.com" name="CompanyService">
   <types>
      <xsd:schema>
         <xsd:import namespace="http://www.r2services.com" schemaLocation="http://localhost:8080/r2ws/updateCompany?xsd=1" />
      </xsd:schema>
   </types>
   <message name="updateCompany">
      <part name="parameters" element="tns:updateCompany" />
   </message>
   <message name="updateCompanyResponse">
      <part name="parameters" element="tns:updateCompanyResponse" />
   </message>
   <message name="R2Exception">
      <part name="fault" element="tns:R2Exception" />
   </message>
   <message name="Exception">
      <part name="fault" element="tns:Exception" />
   </message>
   <portType name="CompanyService">
      <operation name="updateCompany">
         <input wsam:Action="http://www.r2services.com/updateCompany" message="tns:updateCompany" />
         <output wsam:Action="http://www.r2services.com/CompanyService/updateCompanyResponse" message="tns:updateCompanyResponse" />`enter code here`
         <fault message="tns:R2Exception" name="R2Exception" wsam:Action="http://www.r2services.com/CompanyService/updateCompany/Fault/R2Exception" />
         <fault message="tns:Exception" name="Exception" wsam:Action="http://www.r2services.com/CompanyService/updateCompany/Fault/Exception" />
      </operation>
   </portType>
   <binding name="UpdateCompanyServicePortBinding" type="tns:CompanyService">
      <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
      <operation name="updateCompany">
         <soap12:operation soapAction="http://www.r2services.com/updateCompany" />
         <input>
            <soap12:body use="literal" />
         </input>
         <output>
            <soap12:body use="literal" />
         </output>
         <fault name="R2Exception">
            <soap12:fault name="R2Exception" use="literal" />
         </fault>
         <fault name="Exception">
            <soap12:fault name="Exception" use="literal" />
         </fault>
      </operation>
   </binding>
   <service name="CompanyService">
      <port name="UpdateCompanyServicePort" binding="tns:UpdateCompanyServicePortBinding">
         <soap12:address location="http://localhost:8080/r2ws/updateCompany" />
      </port>
   </service>
</definitions>

点击开始创建按钮时,我也观察到错误

[2019-12-30 11:57:50,011] 信息 - SOAPOperationBindingUtils 在 WSDL 中找不到 SOAP 操作 [2019-12-30 11:57:50,115] 错误 - 添加:jag org.mozilla.javascript.EcmaError:TypeError:无法从 null 读取属性“长度”(/publisher/site/blocks/item-design/ajax/add .jag#227) 在 org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3687) 在 org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3665) 在 org.mozilla.javascript.ScriptRuntime.typeError(ScriptRuntime.java:3693) 在 org.mozilla.javascript.ScriptRuntime.typeError2(ScriptRuntime.java:3712) 在 org.mozilla.javascript.ScriptRuntime.undefReadError(ScriptRuntime.java:3725) 在 org.mozilla.javascript.ScriptRuntime.getObjectProp(ScriptRuntime.java:1483) 在 org.jaggeryjs.rhino.publisher.site.blocks.item_design.ajax.c0._c_anonymous_5(/publisher/site/blocks/item-design/ajax/add.jag:227) 在 org.jaggeryjs.rhino.publisher.site.blocks.item_design.ajax.c0.call(/publisher/site/blocks/item-design/ajax/add.jag) 在 org.mozilla.javascript.optimizer.OptRuntime.call0(OptRuntime.java:23) 在 org.jaggeryjs.rhino.publisher.site.blocks.item_design.ajax.c0._c_script_0(/publisher/site/blocks/item-design/ajax/add.jag:54) 在 org.jaggeryjs.rhino.publisher.site.blocks.item_design.ajax.c0.call(/publisher/site/blocks/item-design/ajax/add.jag) 在 org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:394) 在 org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3091) 在 org.jaggeryjs.rhino.publisher.site.blocks.item_design.ajax.c0.call(/publisher/site/blocks/item-design/ajax/add.jag) 在 org.jaggeryjs.rhino.publisher.site.blocks.item_design.ajax.c0.exec(/publisher/site/blocks/item-design/ajax/add.jag) 在 org.jaggeryjs.scriptengine.engine.RhinoEngine.execScript(RhinoEngine.java:567) 在 org.jaggeryjs.scriptengine.engine.RhinoEngine.exec(RhinoEngine.java:273) 在 org.jaggeryjs.jaggery.core.manager.WebAppManager.exec(WebAppManager.java:588) 在 org.jaggeryjs.jaggery.core.manager.WebAppManager.execute(WebAppManager.java:508) 在 org.jaggeryjs.jaggery.core.JaggeryServlet.doPost(JaggeryServlet.java:29) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:650) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:743) 在 org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:485) 在 org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:377) 在 org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:337) 在 org.jaggeryjs.jaggery.core.JaggeryFilter.doFilter(JaggeryFilter.java:21) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 org.wso2.carbon.ui.filters.cache.ContentTypeBasedCachePreventionFilter.doFilter(ContentTypeBasedCachePreventionFilter.java:53) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 org.apache.catalina.filters.HttpHeaderSecurityFilter.doFilter(HttpHeaderSecurityFilter.java:124) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:498) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 在 org.wso2.carbon.identity.context.rewrite.valve.TenantContextRewriteValve.invoke(TenantContextRewriteValve.java:80) 在 org.wso2.carbon.identity.authz.valve.AuthorizationValve.invoke(AuthorizationValve.java:91) 在 org.wso2.carbon.identity.auth.valve.AuthenticationValve.invoke(AuthenticationValve.java:65) 在 org.wso2.carbon.tomcat.ext.valves.CompositeValve.continueInvocation(CompositeValve.java:99) 在 org.wso2.carbon.tomcat.ext.valves.CarbonTomcatValve$1.invoke(CarbonTomcatValve.java:47) 在 org.wso2.carbon.webapp.mgt.TenantLazyLoaderValve.invoke(TenantLazyLoaderValve.java:57) 在 org.wso2.carbon.event.receiver.core.internal.tenantmgt.TenantLazyLoaderValve.invoke(TenantLazyLoaderValve.java:48) 在 org.wso2.carbon.tomcat.ext.valves.TomcatValveContainer.invokeValves(TomcatValveContainer.java:47) 在 org.wso2.carbon.tomcat.ext.valves.CompositeValve.invoke(CompositeValve.java:62) 在 org.wso2.carbon.tomcat.ext.valves.CarbonStuckThreadDetectionValve.invoke(CarbonStuckThreadDetectionValve.java:159) 在 org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962) 在 org.wso2.carbon.tomcat.ext.valves.CarbonContextCreatorValve.invoke(CarbonContextCreatorValve.java:57) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445) 在 org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1115) 在 org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637) 在 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1775) 在 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1734) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 在 java.lang.Thread.run(Thread.java:748)

【问题讨论】:

  • 仍在等待听到有关此问题的建议/帮助。请建议

标签: soap wso2 wso2-am


【解决方案1】:

如果您选择了Pass Through 选项,就会发生这种情况。请确保您已选择 Generate REST APIs 选项。

【讨论】:

  • 感谢 Bee,但我选择了 Generate REST APIs 选项。我已通过附加此屏幕截图和更多错误日志更新了我的原始帖子。请告知
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多