Hallo zusammen,
im Zuge einer Migration müssen Inhalte von einem CMS_INPUT_TEXT in ein CMS_INPUT_DOM übertragen werden. Hierfür verwenden wir diese Methode:
private void copyForLanguage(FormData formData, SectionImpl section, String sourceFieldName, String targetFieldName, Language language) {
FormField<?> sourceFormField = formData.get(language, sourceFieldName);
if (!sourceFormField.isEmpty()) {
FormField<?> targetFormField = formData.get(language, targetFieldName);
targetFormField.set(sourceFormField.get());
section.setFormData(formData);
}
}
Sobald jedoch ein "&" Zeichen in dem String ist, welcher übertragen werden soll gibt es eine InappropriateValueException:
Exception in thread "main" de.espirit.firstspirit.forms.InappropriateValueException: In 'st_title_dom': Invalid value for 'st_title_dom' (de.espirit.firstspirit.access.store.templatestore.gom.GomDom).
at de.espirit.firstspirit.store.access.DataWrappingFormData$EditorValueWrappingFormField.set(DataWrappingFormData.java:233)
at com.nord.fs.migration.ContentCopy.copyForLanguage(ContentCopy.java:197)
at com.nord.fs.migration.ContentCopy.copyFieldsFromCardToCard(ContentCopy.java:90)
at com.nord.fs.migration.section.teaser.AllTeaserToTeaser.migrate(AllTeaserToTeaser.java:63)
at com.nord.fs.migration.StartSectionMigration.main(StartSectionMigration.java:74)
Caused by: de.espirit.firstspirit.access.editor.value.InvalidValueException: Invalid value for 'st_title_dom' (de.espirit.firstspirit.access.store.templatestore.gom.GomDom).
at de.espirit.firstspirit.store.access.DataUtil.setValueToEditor(DataUtil.java:230)
at de.espirit.firstspirit.store.access.DataWrappingFormData$EditorValueWrappingFormField.set(DataWrappingFormData.java:227)
... 4 more
Caused by: java.lang.IllegalArgumentException: Could not parse as DOM: unexpected character ' ' -> MMY>Intralogistik & Flughäfen</DUMMY>
at de.espirit.firstspirit.access.editor.value.DomElementImpl.set(DomElementImpl.java:268)
Aktuell habe ich unsere Methode etwas angepasst und benutzte für diesen speziellen Fall die escapeHtml Methode von StringEscapeUtils. Dies sieht so aus:
private void copyForLanguage(FormData formData, SectionImpl section, String sourceFieldName, String targetFieldName, Language language) {
FormField<?> sourceFormField = formData.get(language, sourceFieldName);
if (!sourceFormField.isEmpty()) {
FormField<?> targetFormField = formData.get(language, targetFieldName);
if(sourceFormField.getType().equals(String.class) && targetFormField.getType().equals(DomElement.class)) {
targetFormField.set(StringEscapeUtils.escapeHtml(sourceFormField.get().toString()));
} else {
targetFormField.set(sourceFormField.get());
}
section.setFormData(formData);
}
}
Irgendwie bin ich mir jedoch etwas unsicher ob dies der richtige Weg ist. Denkt ihr ich könnte meine Methode so verwenden oder gibt es einen besseren Weg?
Lieben Gruß,
Sebastian