如何从BPS上的BPEL流程调用在ESB上运行的REST代理服务

时间:2012-03-14 18:24:15

标签: wso2 wso2esb

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

RValue:19.000000

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

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

U Raza  以下是我得到的BPS错误

  

[2012-03-15 18:22:33,265] INFO - BpelServerImpl - 已注册流程{http://areasearvice.bpel.bps} AreaService-14。   [2012-03-15 18:22:42,282] INFO - CarbonAuthenticationUtil - ' admin'登录于[2012-03-15 18:22:42,0282],IP地址为143.53.207.235   [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:Attribute' xml:space'不允许出现在元素' bpel:literal'中。   [2012-03-15 18:23:09,043] WARN - BpelObjectFactory - 解析期间的验证错误,由于-Dorg.apache.ode.compiler.failOnValidationErrors = false切换而继续   [2012-03-15 18:23:09,046] INFO - BpelC - info:[CompilingProcess]编译BPEL流程。   [2012-03-15 18:23:09,116] INFO - WSDLRegistry - 文件中的WSDL:/ D:/ESB/WSO2/wso2bps-2.1.0/tmp/work/bpelTemp/1.33183578879275E12/BPELREST/GetLVRandomProxy.wsdl是一个重复导入,你的文档应该都在不同的命名空间(它不是很好,但仍然可以工作)。   [2012-03-15 18:23:09,116] INFO - WSDLRegistry - 文件中的WSDL:/ D:/ESB/WSO2/wso2bps-2.1.0/tmp/work/bpelTemp/1.33183578879275E12/BPELREST/GetLVRandomProxy.wsdl已经导入,这表示循环引用。   [2012-03-15 18:23:09,134] ERROR - BpelC - file:/ D:/ESB/WSO2/wso2bps-2.1.0/tmp/work/bpelTemp/1.33183578879275E12/BPELREST/RestfulProxy.bpel:72:error :[CopyToMessageFromNonMessage]复制到消息变量RestProxyPLRequest需要r值的消息。   [2012-03-15 18:23:09,139] ERROR - BpelC - file:/ D:/ESB/WSO2/wso2bps-2.1.0/tmp/work/bpelTemp/1.33183578879275E12/BPELREST/RestfulProxy.bpel:95:error :[CopyFromMessageToNonMessage]从消息变量RestProxyPLResponse复制需要一个l值的消息。   [2012-03-15 18:23:09,143]错误 - BPELUploadExecutor - BPEL流程编译失败。   org.apache.ode.bpel.compiler.api.CompilationException:error:[CompilationErrors]编译完成,出现2个错误:       file:/ D:/ESB/WSO2/wso2bps-2.1.0/tmp/work/bpelTemp/1.33183578879275E12/BPELREST/RestfulProxy.bpel:72:error:[CopyToMessageFromNonMessage复制到消息变量RestProxyPLRequest需要一条消息给r-值。       file:/ D:/ESB/WSO2/wso2bps-2.1.0/tmp/work/bpelTemp/1.33183578879275E12/BPELREST/RestfulProxy.bpel:95:error:[FopyFromMessageToNonMessage]从消息变量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)       at org.wso2.carbon.bpel.ui.fileupload.BPELUploadExecutor.validateBPELPackage(BPELUploadExecutor.java:262)       at org.wso2.carbon.bpel.ui.fileupload.BPELUploadExecutor.execute(BPELUploadExecutor.java:101)       at org.wso2.carbon.ui.transports.fileupload.AbstractFileUploadExecutor.executeGeneric(AbstractFileUploadExecutor.java:105)       at org.wso2.carbon.ui.transports.fileupload.FileUploadExecutorManager $ CarbonXmlFileUploadExecHandler.execute(FileUploadExecutorManager.java:392)       at org.wso2.carbon.ui.transports.fileupload.FileUploadExecutorManager $ FileUploadExecutionHandlerManager.startExec(FileUploadExecutorManager.java:276)       at 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)       at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)       at 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)       at java.util.concurrent.ThreadPoolExecutor $ Worker.runTask(Unknown Source)       at java.util.concurrent.ThreadPoolExecutor $ Worker.run(Unknown Source)       在java.lang.Thread.run(未知来源)

2 个答案:

答案 0 :(得分:4)

我试过这个,在这里我提供了一个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>

答案 1 :(得分:0)

这是一个ESB代理配置,对我来说是一个GET请求。

<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>
BTW你是说你是通过小工具服务器成功访问该代理服务,而不是通过BPS?你可以发布ESB代理配置和你从BPS获得的错误日志吗?