Web services 在Orbeon xforms中调用REST Web服务
我是Orbeon xforms的新手,所以我在这里提问。我有一个REST webservice,它有一个地址(方法GET),我想打电话给他,结果应该提供给我表单的元数据:Web services 在Orbeon xforms中调用REST Web服务,web-services,rest,orbeon,Web Services,Rest,Orbeon,我是Orbeon xforms的新手,所以我在这里提问。我有一个REST webservice,它有一个地址(方法GET),我想打电话给他,结果应该提供给我表单的元数据: <!-- Main instance --> <xforms:instance id="fr-form-instance"> <form> <section-meta> <resultOfMyRestWebservice/&g
<!-- Main instance -->
<xforms:instance id="fr-form-instance">
<form>
<section-meta>
<resultOfMyRestWebservice/>
我曾尝试遵循本教程(拉式解决方案),但我不知道如何将rest的结果放在marker:ResultToMyRestWebService中,以及必须将提交代码放在哪里:
<xforms:submission
id="load-data-submission"
method="get" serialization="none"
resource="addressOfMyRestWS/{xxforms:get-request-parameter('myParam')}"
replace="?" instance="?"/>
关于如果我是你,我会使用一个临时运行时实例来保存REST调用的结果,然后使用setvalue填充持久化实例 如果您在模型中定义了元数据的结构,那么下面的示例就可以使用setvalue进行填充。否则,您可以使用insert 即,在xforms:model中定义:
<!-- Run-time instance to hold Service response -->
<xforms:instance id="fr-service-response-instance" xxforms:exclude-result-prefixes="#all">
<response/>
</xforms:instance>
定义要替换此响应实例的提交:
<xforms:submission id="load-data-submission" method="get"
serialization="none" mediatype="application/xml"
resource="addressOfMyRestWS/{xxforms:get-request-parameter('myParam')}"
replace="instance" instance="fr-service-response-instance"/>
<!-- Populate Data
uses Load Data Submission
runs on form load -->
<xforms:action id="populate-data-binding">
<xforms:action ev:event="xforms-ready" ev:observer="fr-form-model" if="true()">
<xforms:send submission="load-data-submission"/>
</xforms:action>
<!-- Populate resultOfMyRestWebservice control with pathToResults value
following successful submission -->
<xforms:action ev:event="xforms-submit-done" ev:observer="load-data-submission"
context="instance('fr-service-response-instance')">
<xforms:action>
<xf:var name="control-name" value="'resultOfMyRestWebservice'" as="xs:string"/>
<xf:var name="control-value" value="/pathToResults" as="xs:string"/>
<xforms:setvalue ref="instance('fr-form-instance')/*/*[name() = $control-name]"
value="$control-value"/>
</xforms:action>
</xforms:action>
</xforms:action>
然后创建一个操作来调用提交并填充实例:
<xforms:submission id="load-data-submission" method="get"
serialization="none" mediatype="application/xml"
resource="addressOfMyRestWS/{xxforms:get-request-parameter('myParam')}"
replace="instance" instance="fr-service-response-instance"/>
<!-- Populate Data
uses Load Data Submission
runs on form load -->
<xforms:action id="populate-data-binding">
<xforms:action ev:event="xforms-ready" ev:observer="fr-form-model" if="true()">
<xforms:send submission="load-data-submission"/>
</xforms:action>
<!-- Populate resultOfMyRestWebservice control with pathToResults value
following successful submission -->
<xforms:action ev:event="xforms-submit-done" ev:observer="load-data-submission"
context="instance('fr-service-response-instance')">
<xforms:action>
<xf:var name="control-name" value="'resultOfMyRestWebservice'" as="xs:string"/>
<xf:var name="control-value" value="/pathToResults" as="xs:string"/>
<xforms:setvalue ref="instance('fr-form-instance')/*/*[name() = $control-name]"
value="$control-value"/>
</xforms:action>
</xforms:action>
</xforms:action>
注意pathToResults是指向您希望从结果中得到的值的xpath。我做了前面提到的教程中提到的所有事情:我的意思是:
。。。。
....
....
....
....
我想从link()中获取xml,放入“user data”实例,然后获取第一个名称并放入“fr form instance”中的“name”标记。不幸的是,它不起作用,我的意思是setvalue不起作用,因为当我这样更改“用户实例”时:
<xf:instance id="user-data">
<registration>
<first-name>SomeName</first-name>
<last-name/>
</registration>
</xf:instance>
名字
它正在工作,最终的xml如下所示:
....
<name>SomeName</name>
....
。。。。
名字
....
我真的不知道为什么它不起作用
问候
///
现在我看到我的问题可能会归结为:
它的工作原理是:
<xforms:instance id="user-data" src="http://example.org/service/load-initial-form-data-pull-instance"/>
而且它不起作用:
<xforms:send ev:event="xforms-model-construct-done" submission="load-data-submission"/>
<xforms:submission id="load-data-submission"
method="get" serialization="none"
resource="http://example.org/service/load-initial-form-data-pull-instance"
replace="instance" instance="user-data"/>
我必须使用第二种方法,因为我必须将一些参数传递给resource(resource=“http…/{xxforms:get request parameter('myParam')))PS我应该将此解决方案归功于Form Builder处理Web服务的方式。谢谢。不幸的是,此代码:在我的代码中出错。你能描述一下我如何将你的代码与这样的东西合并吗:例如,如果我想把webservice的结果放在名字的前面。你检查过名称空间了吗?它们从
xxforms
移动到xxf
和xforms
到xf
,所以可能这就是错误的来源。如果我想从varialble或instance设置xpath,我该怎么办?我的意思是我有一个值为“/myXpath”的实例,我想设置:而不是?当我运行这段代码时,它不起作用(结果是:“/myXpath”,而不是来自XMLREST节点的值)