warthds
I'm new here

toXml() auf Dataset?

Hallo,

früher war es möglich mit getData.toXml() das XML des StoreElements zu bekommen. Jedoch ist Data bekanntlich deprected.

Im FormData gibt es das toXML nicht und im EditorValue ist es mir zu spät.

Auf dem StoreElement wird ebenfalls toXml angeboten. und bei einer Page geht es auch:

bsh % context.getStoreElement();

<<PAGE editor="913244" id="884541" name="test_topicpage_content" pagetemplate="4" pp="Content" releaseRevision="205429" releasedby="1" revision="205429" translated="EN">

    <LANG displayname="test_topicpage_content" language="EN"/>

</PAGE>

>

bsh % context.getStoreElement().toXml();

<<PAGE editor="913244" id="884541" name="test_topicpage_content" pagetemplate="4" pp="Content" releaseRevision="205429" releasedby="1" revision="205429" translated="EN"><LANG......

Ich brauch es aber auf einem Dataset. Dataset erbt von StoreElement und in der API wird mir auch das toXml() angeboten. Wenn ich das toXML aufrufe erhalte ich einen NullPointer:

bsh % context.getStoreElement().getDataset(context.getSelectedRow()).toXml();

// Error: // Uncaught Exception: Method Invocation toXml : at Line: 1 : in file: <unknown file> : .toXml ( )

Target exception: java.lang.NullPointerException

bsh % java.lang.NullPointerException

    at de.espirit.firstspirit.store.access.contentstore.DatasetImpl._toXml(DatasetImpl.java:1049)

    at de.espirit.firstspirit.store.access.contentstore.DatasetImpl.toXml(DatasetImpl.java:1029)

    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

    at java.lang.reflect.Method.invoke(Unknown Source)

    at bsh.Reflect.invokeMethod(Unknown Source)

    at bsh.Reflect.invokeObjectMethod(Unknown Source)

    at bsh.BSHPrimarySuffix.doName(Unknown Source)

    at bsh.BSHPrimarySuffix.doSuffix(Unknown Source)

    at bsh.BSHPrimaryExpression.eval(Unknown Source)

    at bsh.BSHPrimaryExpression.eval(Unknown Source)

    at bsh.Interpreter.run(Unknown Source)

    at java.lang.Thread.run(Unknown Source)

bsh %

Ist das ein Fehler oder wird das toXml nicht mehr angeboten oder was wäre denn der Ersatz?

p.s. Server-Version: 4.2.488.56504

Viele Grüße

Dennis

0 Kudos
4 Replies
StefanSchulz
I'm new here

Hi Dennis,

der Fehler sieht mir eher danach aus, dass keine Zeile ausgewählt ist und ein Dataset mit Entity null erzeugt wird. Laut API ist ein null-Wert nicht erlaubt. Bitte unbedingt vorher den Rückgabewert von getSelectedRow() im Skript auf null prüfen, bevor getDataset(..) aufgerufen wird.

Gruß

Stefan

0 Kudos

Hallo,

ich habe die Beanshell auf der Entity ausgeführt und damit ist diese nicht null:

bsh % show();

Content2 nicht null:

bsh % context.getStoreElement();

<<CONTENT2 editor="1" id="862325" name="products__input_" perm="859412:2047,859417:159,859415:23,859413:3,859416:279" pp="Template" revision="227305" tabletemplate="51">

    <LANG displayname="Produkte" language="DE"/>

    <LANG displayname="Products" language="EN"/>

    <CONTENTPARAMETER source="Products" templateid="51"/>

</CONTENT2>

>

Entity nicht null:

bsh % context.getSelectedRow();

<de.espirit.or.impl.EntityImpl@9fa824d0{Products,PERSISTENT,FS_ID=40005,FS_VALID_FROM=1376917210801,FS_VALID_TO=9223372036854775807,FS_RELEASE_TO=0}>

Dataset nicht null:

bsh % context.getStoreElement().getDataset(context.getSelectedRow());

<de.espirit.firstspirit.store.access.contentstore.DatasetImpl@38c07b0d>

NullPointer trotzdem:

bsh % context.getStoreElement().getDataset(context.getSelectedRow()).toXml();

// Error: // Uncaught Exception: Method Invocation toXml : at Line: 1 : in file: <unknown file> : .toXml ( )

Target exception: java.lang.NullPointerException

bsh % java.lang.NullPointerException

    at de.espirit.firstspirit.store.access.contentstore.DatasetImpl._toXml(DatasetImpl.java:1049)

    at de.espirit.firstspirit.store.access.contentstore.DatasetImpl.toXml(DatasetImpl.java:1029)

    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

    at java.lang.reflect.Method.invoke(Unknown Source)

    at bsh.Reflect.invokeMethod(Unknown Source)

    at bsh.Reflect.invokeObjectMethod(Unknown Source)

    at bsh.BSHPrimarySuffix.doName(Unknown Source)

    at bsh.BSHPrimarySuffix.doSuffix(Unknown Source)

    at bsh.BSHPrimaryExpression.eval(Unknown Source)

    at bsh.BSHPrimaryExpression.eval(Unknown Source)

    at bsh.Interpreter.run(Unknown Source)

    at java.lang.Thread.run(Unknown Source)

Viele Grüße

Dennis

0 Kudos

Argl, ja. Bitte als Bug melden.

Bleibt aktuell (und vermutlich zukünftig in 4.2) nur der Weg über getData(). Das ist zwar veraltet, wird in 5.0 jedoch noch nicht entfernt.

Gruß

Stefan

warthds
I'm new here

Vielen Dank!

0 Kudos