sebbec
I'm new here

Migration CMS_INPUT_TEXT zu CMS_INPUT_DOM - Problem mit "&" Zeichen

Jump to solution

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

0 Kudos
1 Solution

Accepted Solutions
StefanSchulz
I'm new here

Hallo Sebastian,

auf dem Weg, der DOM-Komponente eine einfache Zeichenkette als Wert zu setzen, wird der Text eingefasst und als XML interpretiert. Das Problem ist dann, dass ein einfaches Kaufmanns-Und in XML eine Ausnahme repräsentiert. Prosatext vorher HTML-konform zu transformieren ist sicherlich ein sinnvoller Schritt.

Ich weiß leider nicht, von wo du die StringEscapeUtils beziehst. Die in FirstSpirit enthaltene Version ist zumindest keine API und könnte in kommenden Versionen potentiell entfallen. Wenn die Migration ein einmaliger Akt ist, wirst du damit vermutlich leben können.

Beste Grüße

Stefan

View solution in original post

0 Kudos
2 Replies
StefanSchulz
I'm new here

Hallo Sebastian,

auf dem Weg, der DOM-Komponente eine einfache Zeichenkette als Wert zu setzen, wird der Text eingefasst und als XML interpretiert. Das Problem ist dann, dass ein einfaches Kaufmanns-Und in XML eine Ausnahme repräsentiert. Prosatext vorher HTML-konform zu transformieren ist sicherlich ein sinnvoller Schritt.

Ich weiß leider nicht, von wo du die StringEscapeUtils beziehst. Die in FirstSpirit enthaltene Version ist zumindest keine API und könnte in kommenden Versionen potentiell entfallen. Wenn die Migration ein einmaliger Akt ist, wirst du damit vermutlich leben können.

Beste Grüße

Stefan

0 Kudos

Super, danke für die schnelle Antwort. Ich beziehe StringEscapeUtils von org.apache.commons. Ist aber auch nur eine einmalige Sache.

0 Kudos