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:
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.
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.

Ich habe das ganze auch mal mit JSON probiert, auch hier muss ich die Klasse konkret angeben:
Hat hier jemand eine Idee?
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.

Ich habe das ganze auch mal mit JSON probiert, auch hier muss ich die Klasse konkret angeben:
Cannot construct instance ofmy.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?