2

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

RValue:19.000000

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

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

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

[2012-03-15 18:22:33,265] 信息 - BpelServerImpl - 注册进程 { http://areasearvice.bpel.bps}区域服务-14。[2012-03-15 18:22:42,282] 信息 - 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:属性“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 - info: [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 复制需要左值的消息。[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:

4

2 回答 2

4

我试过了,在这里我提供了一个 BPEL 示例来调用以下代理服务。请从此处找到示例工件。注意 - 您必须从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>
于 2012-03-22T07:05:37.483 回答
0

这是一个适用于我的 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 获得的错误日志吗?

于 2012-03-15T07:06:07.970 回答