【问题标题】:How to invoke a REST Proxy service running on the ESB from a BPEL process on the BPS如何从 BPS 上的 BPEL 流程调用在 ESB 上运行的 REST 代理服务
【发布时间】:2014-10-23 11:44:36
【问题描述】:

我已经设置了 BPS 并创建了一些 BPEL 流程,我可以使用它们来调用应用服务器上的服务。我在 ESB 上创建了一个 REST 代理服务,它使用 Labview 服务器的端点。在 Labview 中,我有一个非常基本的 REST 服务,它每秒生成一个随机值。我可以按如下方式访问 REST 服务http://localhost:8000/Maths/random。这将生成具有随机值的以下输出

RValue:19.000000

我已成功通过小工具服务器访问此服务,并使用 WSO2 图形框架将值显示为图形。

但是当我尝试从 BPEL 流程调用相同的代理服务时遇到问题。我从 ESB 为代理服务生成了一个 wsdl 文件。此 wsdl 文件用于端口连接等。它只有一个操作,即“中介”操作,没有参数或元素。我已经按照 BPS 服务器的一些教程来调用该服务,但到目前为止我还没有成功。 谁能告诉我如何做到这一点或指向我类似的教程? 非常感谢。

乌拉扎 下面是我得到的 BPS 错误

[2012-03-15 18:22:33,265] 信息 - BpelServerImpl - 注册进程 {http://areasearvice.bpel.bps}AreaService-14。 [2012-03-15 18:22:42,282] 信息-CarbonAuthenticationUtil-“管理员”从 IP 地址 143.53.207.235 在 [2012-03-15 18:22:42,0282] 登录 [2012-03-15 18:23:09,041] 错误 - BpelObjectFactory$BOMSAXErrorHandler - null:file:///D:/ESB/WSO2/wso2bps-2.1.0/tmp/work/bpelTemp/1.33183578879275E12/BPELREST/RestfulProxy .bpel:88:56:cvc-complex-type.3.2.2:属性“xml:space”不允许出现在元素“bpel:literal”中。 [2012-03-15 18:23:09,043] 警告 - BpelObjectFactory - 解析期间的验证错误,由于 -Dorg.apache.ode.compiler.failOnValidationErrors=false 开关而继续 [2012-03-15 18:23:09,046] 信息 - BpelC - 信息:[CompilingProcess] 编译 BPEL 流程。 [2012-03-15 18:23:09,116] 信息 - WSDLRegistry - 文件中的 WSDL:/D:/ESB/WSO2/wso2bps-2.1.0/tmp/work/bpelTemp/1.33183578879275E12/BPELREST/GetLVRandomProxy.wsdl 是重复导入,您的文档应该都在不同的命名空间中(它不好但仍然可以工作)。 [2012-03-15 18:23:09,116] 信息 - WSDLRegistry - 文件中的 WSDL:/D:/ESB/WSO2/wso2bps-2.1.0/tmp/work/bpelTemp/1.33183578879275E12/BPELREST/GetLVRandomProxy.wsdl 已经存在导入,这表示循环引用。 [2012-03-15 18:23:09,134] 错误 - BpelC - 文件:/D:/ESB/WSO2/wso2bps-2.1.0/tmp/work/bpelTemp/1.33183578879275E12/BPELREST/RestfulProxy.bpel:72:错误:[CopyToMessageFromNonMessage] 复制到消息变量 RestProxyPLRequest 需要 r 值的消息。 [2012-03-15 18:23:09,139] 错误 - BpelC - 文件:/D:/ESB/WSO2/wso2bps-2.1.0/tmp/work/bpelTemp/1.33183578879275E12/BPELREST/RestfulProxy.bpel:95:错误:[CopyFromMessageToNonMessage] 从消息变量 RestProxyPLResponse 复制需要 l 值的消息。 [2012-03-15 18:23:09,143] 错误 - BPELUploadExecutor - BPEL 流程编译失败。 org.apache.ode.bpel.compiler.api.CompilationException:错误:[CompilationErrors] 编译完成,出现 2 个错误: file:/D:/ESB/WSO2/wso2bps-2.1.0/tmp/work/bpelTemp/1.33183578879275E12/BPELREST/RestfulProxy.bpel:72: 错误: [CopyToMessageFromNonMessage] 复制到消息变量 RestProxyPLRequest 需要 r-价值。 file:/D:/ESB/WSO2/wso2bps-2.1.0/tmp/work/bpelTemp/1.33183578879275E12/BPELREST/RestfulProxy.bpel:95: 错误: [CopyFromMessageToNonMessage] 从消息变量 RestProxyPLResponse 复制需要 l-价值。 在 org.apache.ode.bpel.compiler.BpelCompiler.compile(BpelCompiler.java:815) 在 org.apache.ode.bpel.compiler.BpelC.compile(BpelC.java:278) 在 org.apache.ode.bpel.compiler.BpelC.compile(BpelC.java:364) 在 org.apache.ode.store.DeploymentUnitDir$5.run(DeploymentUnitDir.java:213) 在 org.apache.ode.utils.InternPool.runBlock(InternPool.java:57) 在 org.apache.ode.store.DeploymentUnitDir.compile(DeploymentUnitDir.java:210) 在 org.apache.ode.store.DeploymentUnitDir.compile(DeploymentUnitDir.java:169) 在 org.wso2.carbon.bpel.ui.fileupload.BPELUploadExecutor.validateBPELPackage(BPELUploadExecutor.java:262) 在 org.wso2.carbon.bpel.ui.fileupload.BPELUploadExecutor.execute(BPELUploadExecutor.java:101) 在 org.wso2.carbon.ui.transports.fileupload.AbstractFileUploadExecutor.executeGeneric(AbstractFileUploadExecutor.java:105) 在 org.wso2.carbon.ui.transports.fileupload.FileUploadExecutorManager$CarbonXmlFileUploadExecHandler.execute(FileUploadExecutorManager.java:392) 在 org.wso2.carbon.ui.transports.fileupload.FileUploadExecutorManager$FileUploadExecutionHandlerManager.startExec(FileUploadExecutorManager.java:276) 在 org.wso2.carbon.ui.transports.fileupload.FileUploadExecutorManager.execute(FileUploadExecutorManager.java:125) 在 org.wso2.carbon.ui.transports.FileUploadServlet.doPost(FileUploadServlet.java:57) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:641) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 在 org.eclipse.equinox.http.helper.ContextPathServletAdaptor.service(ContextPathServletAdaptor.java:36) 在 org.eclipse.equinox.http.servlet.internal.ServletRegistration.handleRequest(ServletRegistration.java:90) 在 org.eclipse.equinox.http.servlet.internal.ProxyServlet.processAlias(ProxyServlet.java:111) 在 org.eclipse.equinox.http.servlet.internal.ProxyServlet.service(ProxyServlet.java:67) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 在 org.wso2.carbon.bridge.BridgeServlet.service(BridgeServlet.java:155) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 在 org.wso2.carbon.server.TomcatServer$1.invoke(TomcatServer.java:241) 在 org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:399) 在 org.apache.coyote.http11.Http11NioProcessor.process(Http11NioProcessor.java:396) 在 org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:356) 在 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1534) 在 java.util.concurrent.ThreadPoolExecutor$Worker.runTask(未知来源) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(未知来源) 在 java.lang.Thread.run(Unknown Source)

【问题讨论】:

    标签: wso2 wso2esb


    【解决方案1】:

    我试过了,在这里我提供了一个 BPEL 示例来调用以下代理服务。请从here 找到示例工件。 注意 - 您必须从 goodreads 获取 api 密钥并替换为 MyKeyHere

    <proxy name="GetProxy" transports="https http" startOnLoad="true" trace="disable">
            <target>
                <inSequence>
                    <log level="full"/>
                    <property name="HTTP_METHOD" value="GET" scope="axis2"/>
                    <property name="REST_URL_POSTFIX" value="/4776766.xml?key=MyKeyHere" scope="axis2"/>
                    <send>
                        <endpoint>
                            <address uri="http://www.goodreads.com/author/list"/>
                        </endpoint>
                    </send>
                </inSequence>
                <outSequence>
                    <send/>
                </outSequence>
            </target>
        </proxy>
    

    【讨论】:

      【解决方案2】:

      这是一个适用于我的 GET 请求的 ESB 代理配置。

      <proxy name="GetProxy" transports="https http" startOnLoad="true" trace="disable">
              <target>
                  <inSequence>
                      <log level="full"/>
                      <property name="HTTP_METHOD" value="GET" scope="axis2"/>
                      <property name="REST_URL_POSTFIX" value="/4776766.xml?key=MyKeyHere" scope="axis2"/>
                      <send>
                          <endpoint>
                              <address uri="http://www.goodreads.com/author/list"/>
                          </endpoint>
                      </send>
                  </inSequence>
                  <outSequence>
                      <send/>
                  </outSequence>
              </target>
          </proxy>
      

      这是一个 POST 请求

      <proxy name="TestProxy" transports="https http" startOnLoad="true" trace="disable">
          <target>
              <inSequence>
                  <log level="full"/>
                  <property name="messageType" value="application/xml" scope="axis2"/>
                  <property name="ContentType" value="application/xml" scope="axis2"/>
                  <send>
                      <endpoint>
                          <address uri="http://localhost:8080/TestServlet/emal/xml_api"/>
                      </endpoint>
                  </send>
              </inSequence>
              <outSequence>
                  <property name="messageType" value="text/xml" scope="axis2"/>
                  <property name="ContentType" value="text/xml" scope="axis2"/>
                  <send/>
              </outSequence>
          </target>
      </proxy>
      

      顺便说一句,您的意思是说您通过小工具服务器成功访问了该代理服务,而不是通过 BPS?您可以发布 ESB 代理配置和您从 BPS 获得的错误日志吗?

      【讨论】:

      • 嗨 Keheliya 感谢您的回复,我已经像您一样设置了代理,我可以直接从 firefox 浏览器调用它,我得到了预期的输出。为了从 BPEL 流程调用它,上述代理需要一个 wsdl 文件。您在 BPS 中使用的 wsdl 文件是什么样的?我将从 ESB 生成一个并尝试使用它。
      • 是使用的代理配置
      • 以上是我使用的代理配置,我可以通过网络浏览器调用它。我想从 BPEL 流程中调用它。我怎样才能做到这一点。我将尝试使用来自 ESB 的 wsdl 文件并创建一个简单的流程来调用该服务。无论如何,非常感谢您的回复。奥马尔
      猜你喜欢
      • 1970-01-01
      • 2013-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-05
      • 2014-06-05
      • 1970-01-01
      相关资源
      最近更新 更多