Questions & Answers

SOLVED
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

Type a product name