JSON / XML Struktur mit Vererbung / Interfaces

internet

Top Contributor
Hallo,

ich möchte mir gerade ein Projekt aufbauen, welches ich in anderen Projekten weiterverwenden kann, sodass ich nicht zig mal den gleichen Code implementieren muss ("Shared Project").

Nun habe ich folgendes Problem:
  • Ich habe verschiedene Aktionen pro Projekt (SendWebhook, DeleteUser, SendNotification)...
  • Aktionen, die ich in jedem Projekt haben kann, sind in SharedProject enthalten, zum Beispiel (SendEmail).

Für alle Aktionen habe ich ein Interface entsprechend implementiert, sodass die Aktionen davon abgeleitet werden.
Das ganze wird in einer Klasse gespeichert (ActionComponent). Es gibt noch weitere Elternklassen von "ActionComponent", das habe ich aber nun aus Übersichtlichtkeit weggelassen.

Mein Problem ist nun aber innerhalb JSON oder XML und das Interface.
Denn wie es scheint, muss ich explizit die Klasse angeben. Hier ist aber das Problem, dass ich im "SharedProject" teilweise Klassen von Aktionen gar nicht kenne.

Code:
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class ActionComponent {

    @XmlElements({
        @XmlElement(name = "ActionSendEmail", type = ActionSendEmail.class),
        @XmlElement(name = "ActionSendWebhook", type = ActionSendWebhook.class),
    })
    private ActionComponentInterface actionComponentInterface;

Vielleicht sehe ich hier einfach gerade nicht, wie ich das mit Vererbung und Interfaces lösen kann?
Auch das Implementieren von der Klasse "ActionComponent" und den expliziten Klassen wird nicht gehen, da SharedProject diese Klasse ja dann auch nicht kennt.

Hier habe das ganze mal aufgemalt.
1671722376259.png
Ich habe das ganze auch mal mit JSON probiert, auch hier muss ich die Klasse konkret angeben:
Cannot construct instance of my.package.ActionComponentInterface (no Creators, like default constructor, exist): abstract types either need to be mapped to concrete types, have custom deserializer, or contain additional type information

Hat hier jemand eine Idee?
 

Neue Themen


Zurück
Oben