如何保存新版本的祖先形式。我使用了CRUD API,并使用两种方法遵循了步骤:
-
通过强加最新版本号来检索表单的XML:
- 创建一个具有较早版本的表单:用
docId=fd4f49aad1ac3eb5a8ac29b0fa15a8cc1ec6ee6e
和version=1
进行测试 - 运行此命令:
curl -v -k -H "Orbeon-Form-Definition-Version: 2" http://127.0.0.1:8080/orbeon/fr/service/persistence/crud/newProject/test/data/fd4f49aad1ac3eb5a8ac29b0fa15a8cc1ec6ee6e/data.xml
- 这会导致" 400不良请求"。如果我将旧版本1而不是2放置,则没有错误。
- 创建一个具有较早版本的表单:用
-
创建一个带有最新版本的空测试表格,然后将其填充用旧版本创建的表单
-
运行此命令
curl -v -k -H "Orbeon-Form-Definition-Version: 1" http://127.0.0.1:8080/orbeon/fr/service/persistence/crud/newProject/test/data/fd4f49aad1ac3eb5a8ac29b0fa15a8cc1ec6ee6e/data.xml >>myData
。⇒XML文件保存到目录。 -
用新版本(
documentId = 40239f94e49538db4e94e4f60ad7b4f312c23f3e
)保存一个空测试表格 - 运行此命令
curl -v -k -d @mydata.xml -H "Content-Type: application/xml" -H "Orbeon-Form-Definition-Version: 2" -X PUT http://127.0.0.1:8080/orbeon/fr/service/persistence/crud/newProject/test/data/40239f94e49538db4e94e4f60ad7b4f312c23f3e/data.xml
⇒结果500内部服务器错误。
-
发生错误时,这是一个堆叠式:
> |An Error has Occurred |
|----------------------------------------------------------------------------------------------------------------------|
|Fatal error: The markup in the document following the root element must be well-formed. |
|----------------------------------------------------------------------------------------------------------------------|
|Application Call Stack |
|----------------------------------------------------------------------------------------------------------------------|
|oxf:/ops/pfc/xforms-xml-submission.xpl |reading processor output | 111|
|······················································································································|
|element=<p:output name="data" ref="instance"/> |
|name =data |
|ref =instance |
|----------------------------------------------------------------------------------------------------------------------|
|oxf:/ops/pfc/xforms-xml-submission.xpl |reading processor output | 102|
|······················································································································|
|element=<p:output name="data" id="raw-instance"/> |
|name =data |
|id =raw-instance |
|----------------------------------------------------------------------------------------------------------------------|
|:/Users/fkammoun/AppData/Local/Temp/upload__5a2c8fe_15fbb88e967__8000_00000000.tmp| | 1|
|----------------------------------------------------------------------------------------------------------------------|
|Exception: org.orbeon.oxf.common.ValidationException |
|----------------------------------------------------------------------------------------------------------------------|
|org.orbeon.oxf.xml.XMLParsing$ErrorHandler |fatalError |XMLParsing.java | 221|
|orbeon.apache.xerces.util.ErrorHandlerWrapper |fatalError | | |
|orbeon.apache.xerces.impl.XMLErrorReporter |reportError | | |
|orbeon.apache.xerces.impl.XMLErrorReporter |reportError | | |
|orbeon.apache.xerces.impl.XMLErrorReporter |reportError | | |
|orbeon.apache.xerces.impl.XMLScanner |reportFatalError | | |
|.impl.XMLDocumentScannerImpl$TrailingMiscDispatcher|dispatch | | |
|n.apache.xerces.impl.XMLDocumentFragmentScannerImpl|scanDocument | | |
|orbeon.apache.xerces.parsers.XML11Configuration |parse | | |
|orbeon.apache.xerces.parsers.XML11Configuration |parse | | |
|orbeon.apache.xerces.parsers.XMLParser |parse | | |
|orbeon.apache.xerces.parsers.AbstractSAXParser |parse | | |
|processor.generator.URLGenerator$URLResourceHandler|readXML |URLGenerator.java |1042|
|org.orbeon.oxf.processor.generator.URLGenerator$1 |readImpl |URLGenerator.java | 545|
|essor.impl.ProcessorOutputImpl$TopLevelOutputFilter|read |ProcessorOutputImpl.java | 257|
|org.orbeon.oxf.processor.impl.ProcessorOutputImpl |read |ProcessorOutputImpl.java | 394|
|org.orbeon.oxf.processor.ProcessorImpl |readInputAsSAX |ProcessorImpl.java | 262|
|ssor.pipeline.PipelineProcessor$InternalTopOutput$1|run |PipelineProcessor.java | 535|
|org.orbeon.oxf.processor.pipeline.PipelineProcessor|executeParents |PipelineProcessor.java | 696|
|org.orbeon.oxf.processor.pipeline.PipelineProcessor|access$400 |PipelineProcessor.java | 60|
|cessor.pipeline.PipelineProcessor$InternalTopOutput|readImpl |PipelineProcessor.java | 531|
|essor.impl.ProcessorOutputImpl$TopLevelOutputFilter|read |ProcessorOutputImpl.java | 257|
|org.orbeon.oxf.processor.impl.ProcessorOutputImpl |read |ProcessorOutputImpl.java | 394|
|org.orbeon.oxf.processor.ProcessorImpl |readInputAsSAX |ProcessorImpl.java | 262|
|org.orbeon.oxf.processor.ProcessorImpl |readInputAsSAX |ProcessorImpl.java | 266|
|org.orbeon.oxf.processor.IdentityProcessor$1 |readImpl |IdentityProcessor.java | 33|
|essor.impl.ProcessorOutputImpl$TopLevelOutputFilter|read |ProcessorOutputImpl.java | 257|
|org.orbeon.oxf.processor.impl.ProcessorOutputImpl |read |ProcessorOutputImpl.java | 394|
|org.orbeon.oxf.processor.ProcessorImpl |readInputAsSAX |ProcessorImpl.java | 262|
|orbeon.oxf.processor.pipeline.PipelineProcessor$1$1|run |PipelineProcessor.java | 93|
|org.orbeon.oxf.processor.pipeline.PipelineProcessor|executeChildren |PipelineProcessor.java | 679|
|org.orbeon.oxf.processor.pipeline.PipelineProcessor|access$000 |PipelineProcessor.java | 60|
|g.orbeon.oxf.processor.pipeline.PipelineProcessor$1|readImpl |PipelineProcessor.java | 91|
|essor.impl.ProcessorOutputImpl$TopLevelOutputFilter|read |ProcessorOutputImpl.java | 257|
|org.orbeon.oxf.processor.impl.ProcessorOutputImpl |read |ProcessorOutputImpl.java | 394|
|processor.pipeline.choose.ConcreteChooseProcessor$1|readImpl |ConcreteChooseProcessor.java | 126|
|essor.impl.ProcessorOutputImpl$TopLevelOutputFilter|read |ProcessorOutputImpl.java | 257|
|org.orbeon.oxf.processor.impl.ProcessorOutputImpl |read |ProcessorOutputImpl.java | 394|
|org.orbeon.oxf.processor.ProcessorImpl |readInputAsSAX |ProcessorImpl.java | 262|
|orbeon.oxf.processor.pipeline.PipelineProcessor$1$1|run |PipelineProcessor.java | 93|
以下解释了您提到的两种情况下遇到的错误:
- 检索文档时,您无法指定表单版本。该信息附加到文档,通过文档ID标识,并且在执行
GET
时,该信息由API返回给您。 - 给定文档ID的表单定义版本预计不会更改。这解释了您尝试更新文档并提供新的表单定义版本时,您会遇到第二种情况的错误。实际上,当您更新文档时,您不会期望提供任何表单定义版本,因为该信息无法更改,并且已经存储在数据库中。
并回答标题中的问题,如果您使用表单的版本1创建了文档,并且要在将其升级后存储该文档的版本以对应于表单的版本2,则需要使用其他文档ID存储它。