ObeoNetwork / M2Doc

The M2Doc technology enables the generation of Office Open XML documents from models.
http://obeonetwork.github.io/M2Doc/
Eclipse Public License 2.0
38 stars 22 forks source link

Export of descriptions containing xhtml tables with fromHTMLBodyString from inside a template does not work #489

Closed Elmar555 closed 1 year ago

Elmar555 commented 1 year ago

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[x] Bug report  
[ ] Feature request
[ ] Documentation issue or request
[ ] Support request => Please have a look to the support pages of our website : http://m2doc.org/support/

Current behavior

Exporting descriptions containing xhtml tables from inside a template does not work, following construct leads to the error below:


{ m:template showDescriptions(top:capellamodeller::SystemEngineering) }
{ m:for fkt | top.eAllContents(pa::PhysicalFunction) }
{ m:if not fkt.description.trim().equals('') and fkt.description.trim()->size() > 0 }
{ m: fkt.description.trim().fromHTMLBodyString() }
{ m:else }
- 
{ m:endif }
{ m:endfor }
{ m:endtemplate }

{ m:mySystemEngineering.showDescriptions() }

Error:


M2Doc : technical error.

org.apache.xmlbeans.impl.values.XmlValueDisconnectedException
    at org.apache.xmlbeans.impl.values.XmlObjectBase.check_orphaned(XmlObjectBase.java:1258)
    at org.openxmlformats.schemas.wordprocessingml.x2006.main.impl.CTPImpl.addNewR(Unknown Source)
    at org.apache.poi.xwpf.usermodel.XWPFParagraph.createRun(XWPFParagraph.java:1414)
    at org.obeonetwork.m2doc.util.M2DocUtils.appendMessageRun(M2DocUtils.java:238)
    at org.obeonetwork.m2doc.generator.M2DocEvaluator.insertBody(M2DocEvaluator.java:716)
    at org.obeonetwork.m2doc.generator.M2DocEvaluator.insertGenerationResult(M2DocEvaluator.java:694)
    at org.obeonetwork.m2doc.generator.M2DocEvaluator.insertObject(M2DocEvaluator.java:670)
    at org.obeonetwork.m2doc.generator.M2DocEvaluator.caseQuery(M2DocEvaluator.java:610)
    at org.obeonetwork.m2doc.generator.M2DocEvaluator.caseQuery(M2DocEvaluator.java:1)
    at org.obeonetwork.m2doc.template.util.TemplateSwitch.doSwitch(TemplateSwitch.java:186)
    at org.eclipse.emf.ecore.util.Switch.doSwitch(Switch.java:53)
    at org.eclipse.emf.ecore.util.Switch.doSwitch(Switch.java:69)
    at org.obeonetwork.m2doc.generator.M2DocEvaluator.doSwitch(M2DocEvaluator.java:1450)
    at org.obeonetwork.m2doc.generator.M2DocEvaluator.caseBlock(M2DocEvaluator.java:1675)
    at org.obeonetwork.m2doc.generator.M2DocEvaluator.caseBlock(M2DocEvaluator.java:1)
    at org.obeonetwork.m2doc.template.util.TemplateSwitch.doSwitch(TemplateSwitch.java:199)
    at org.eclipse.emf.ecore.util.Switch.doSwitch(Switch.java:53)
    at org.eclipse.emf.ecore.util.Switch.doSwitch(Switch.java:69)
    at org.obeonetwork.m2doc.generator.M2DocEvaluator.doSwitch(M2DocEvaluator.java:1450)
    at org.obeonetwork.m2doc.generator.M2DocEvaluator.caseDocumentTemplate(M2DocEvaluator.java:314)
    at org.obeonetwork.m2doc.generator.M2DocEvaluator.caseDocumentTemplate(M2DocEvaluator.java:1)
    at org.obeonetwork.m2doc.template.util.TemplateSwitch.doSwitch(TemplateSwitch.java:279)
    at org.eclipse.emf.ecore.util.Switch.doSwitch(Switch.java:53)
    at org.eclipse.emf.ecore.util.Switch.doSwitch(Switch.java:69)
    at org.obeonetwork.m2doc.generator.M2DocEvaluator.doSwitch(M2DocEvaluator.java:1450)
    at org.obeonetwork.m2doc.generator.M2DocEvaluator.generate(M2DocEvaluator.java:299)
    at org.obeonetwork.m2doc.util.M2DocUtils.generate(M2DocUtils.java:853)
    at org.obeonetwork.m2doc.genconf.GenconfUtils.generate(GenconfUtils.java:507)
    at org.obeonetwork.m2doc.genconf.GenconfUtils.generate(GenconfUtils.java:432)
    at org.obeonetwork.m2doc.genconf.editor.command.GenerateHandler$GenerateJob.runInWorkspace(GenerateHandler.java:87)
    at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:42)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)

Expected behavior

Should export the description the same as without template:


{ m:for fkt | mySystemEngineering.eAllContents(pa::PhysicalFunction) }
{ m:if not fkt.description.trim().equals('') and fkt.description.trim()->size() > 0 }
{ m: fkt.description.trim().fromHTMLBodyString() }
{ m:else }
- 
{ m:endif }
{ m:endfor }

Minimal reproduction of the problem with instructions

see attached Capella 5.2 project: M2DocTableInFunctionDescriptionOutput.zip

  1. version with direct export that actually works: generate with DirectDescriptionOutput.genconf
  2. version with template that produces the error: generate with TemplateForDescriptionOutput.genconf

What is the motivation / use case for changing the behavior?

Direct export and export from template should work the same way.

Environment


M2Doc version: 3.2.1
Eclipse version: Capella 5.2
Platform version:  Windows 11
(same error with M2Doc 3.3.0/Capella 6.1)
ylussaud commented 1 year ago

I reproduce this error with M2Doc 3.3.0.