diff --git a/pom.xml b/pom.xml
index f8d66cf..7992271 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
io.digitalstate.stix
stix
- v0.5.3
+ v0.5.4
jar
STIX 2
diff --git a/src/main/java/io/digitalstate/stix/bundle/BundleObject.java b/src/main/java/io/digitalstate/stix/bundle/BundleObject.java
index 9214e17..f1e9234 100644
--- a/src/main/java/io/digitalstate/stix/bundle/BundleObject.java
+++ b/src/main/java/io/digitalstate/stix/bundle/BundleObject.java
@@ -28,8 +28,7 @@
@DefaultTypeValue(value = "bundle", groups = {DefaultValuesProcessor.class})
@JsonTypeName("bundle")
@Value.Style(typeImmutable = "Bundle", validationMethod = Value.Style.ValidationMethod.NONE, additionalJsonAnnotations = {JsonTypeName.class})
-@JsonSerialize(as = Bundle.class)
-@JsonDeserialize(builder = Bundle.Builder.class)
+@JsonSerialize(as = Bundle.class) @JsonDeserialize(builder = Bundle.Builder.class)
@JsonPropertyOrder({"type", "id", "spec_version", "objects"})
public interface BundleObject extends GenericValidation, Serializable {
diff --git a/src/main/java/io/digitalstate/stix/common/StixCommonProperties.java b/src/main/java/io/digitalstate/stix/common/StixCommonProperties.java
index aaf5f12..4093955 100644
--- a/src/main/java/io/digitalstate/stix/common/StixCommonProperties.java
+++ b/src/main/java/io/digitalstate/stix/common/StixCommonProperties.java
@@ -72,7 +72,6 @@ default boolean getHydrated(){
Optional getCreatedByRef();
@NotNull
- @JsonSerialize(using = InstantSerializer.class)
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern = StixDataFormats.TIMESTAMP_PATTERN, timezone = "UTC")
@JsonProperty("created")
@Value.Default
diff --git a/src/main/java/io/digitalstate/stix/common/StixModified.java b/src/main/java/io/digitalstate/stix/common/StixModified.java
index 7c8da0b..d925d8b 100644
--- a/src/main/java/io/digitalstate/stix/common/StixModified.java
+++ b/src/main/java/io/digitalstate/stix/common/StixModified.java
@@ -19,7 +19,6 @@ public interface StixModified {
@NotNull
@JsonProperty("modified")
- @JsonSerialize(using = InstantSerializer.class)
@JsonFormat(pattern = StixDataFormats.TIMESTAMP_PATTERN, timezone = "UTC")
@Value.Default
@Redactable
diff --git a/src/main/java/io/digitalstate/stix/sdo/objects/CampaignSdo.java b/src/main/java/io/digitalstate/stix/sdo/objects/CampaignSdo.java
index dd40ebe..3b09b37 100644
--- a/src/main/java/io/digitalstate/stix/sdo/objects/CampaignSdo.java
+++ b/src/main/java/io/digitalstate/stix/sdo/objects/CampaignSdo.java
@@ -46,13 +46,11 @@ public interface CampaignSdo extends DomainObject {
@Redactable
Set getAliases();
- @JsonSerialize(using = InstantSerializer.class)
@JsonFormat(pattern = StixDataFormats.TIMESTAMP_PATTERN, timezone = "UTC")
@JsonProperty("first_seen") @JsonInclude(value = NON_EMPTY, content= NON_EMPTY)
@Redactable
Optional getFirstSeen();
- @JsonSerialize(using = InstantSerializer.class)
@JsonFormat(pattern = StixDataFormats.TIMESTAMP_PATTERN, timezone = "UTC")
@JsonProperty("last_seen") @JsonInclude(value = NON_EMPTY, content= NON_EMPTY)
@Redactable
diff --git a/src/main/java/io/digitalstate/stix/sdo/objects/IndicatorSdo.java b/src/main/java/io/digitalstate/stix/sdo/objects/IndicatorSdo.java
index e3daacb..bd28d2c 100644
--- a/src/main/java/io/digitalstate/stix/sdo/objects/IndicatorSdo.java
+++ b/src/main/java/io/digitalstate/stix/sdo/objects/IndicatorSdo.java
@@ -65,7 +65,6 @@ public interface IndicatorSdo extends DomainObject {
Instant getValidFrom();
@JsonProperty("valid_until") @JsonInclude(value = NON_EMPTY, content= NON_EMPTY)
- @JsonSerialize(using = InstantSerializer.class)
@JsonFormat(pattern = StixDataFormats.TIMESTAMP_PATTERN, timezone = "UTC")
@Redactable
Optional getValidUntil();
diff --git a/src/main/java/io/digitalstate/stix/sdo/objects/IntrusionSetSdo.java b/src/main/java/io/digitalstate/stix/sdo/objects/IntrusionSetSdo.java
index 80fd907..724bc9c 100644
--- a/src/main/java/io/digitalstate/stix/sdo/objects/IntrusionSetSdo.java
+++ b/src/main/java/io/digitalstate/stix/sdo/objects/IntrusionSetSdo.java
@@ -51,13 +51,11 @@ public interface IntrusionSetSdo extends DomainObject {
Set getAliases();
@JsonProperty("first_seen") @JsonInclude(value = NON_EMPTY, content= NON_EMPTY)
- @JsonSerialize(using = InstantSerializer.class)
@JsonFormat(pattern = StixDataFormats.TIMESTAMP_PATTERN, timezone = "UTC")
@Redactable
Optional getFirstSeen();
@JsonProperty("last_seen") @JsonInclude(value = NON_EMPTY, content= NON_EMPTY)
- @JsonSerialize(using = InstantSerializer.class)
@JsonFormat(pattern = StixDataFormats.TIMESTAMP_PATTERN, timezone = "UTC")
@Redactable
Optional getLastSeen();
diff --git a/src/main/java/io/digitalstate/stix/sdo/objects/ObservedDataSdo.java b/src/main/java/io/digitalstate/stix/sdo/objects/ObservedDataSdo.java
index bd0be43..c7d6dcc 100644
--- a/src/main/java/io/digitalstate/stix/sdo/objects/ObservedDataSdo.java
+++ b/src/main/java/io/digitalstate/stix/sdo/objects/ObservedDataSdo.java
@@ -32,14 +32,12 @@ public interface ObservedDataSdo extends DomainObject {
@NotNull
@JsonProperty("first_observed")
- @JsonSerialize(using = InstantSerializer.class)
@JsonFormat(pattern = StixDataFormats.TIMESTAMP_PATTERN, timezone = "UTC")
@Redactable(useMask = true)
Instant getFirstObserved();
@NotNull
@JsonProperty("last_observed")
- @JsonSerialize(using = InstantSerializer.class)
@JsonFormat(pattern = StixDataFormats.TIMESTAMP_PATTERN, timezone = "UTC")
@Redactable(useMask = true)
Instant getLastObserved();
diff --git a/src/main/java/io/digitalstate/stix/sdo/objects/ReportSdo.java b/src/main/java/io/digitalstate/stix/sdo/objects/ReportSdo.java
index f479a2e..a82b21b 100644
--- a/src/main/java/io/digitalstate/stix/sdo/objects/ReportSdo.java
+++ b/src/main/java/io/digitalstate/stix/sdo/objects/ReportSdo.java
@@ -55,7 +55,6 @@ public interface ReportSdo extends DomainObject {
@NotNull
@JsonProperty("published")
- @JsonSerialize(using = InstantSerializer.class)
@JsonFormat(pattern = StixDataFormats.TIMESTAMP_PATTERN, timezone = "UTC")
@Redactable(useMask = true)
Instant getPublished();
diff --git a/src/main/java/io/digitalstate/stix/sro/objects/SightingSro.java b/src/main/java/io/digitalstate/stix/sro/objects/SightingSro.java
index 9a5d9ba..21e4a23 100644
--- a/src/main/java/io/digitalstate/stix/sro/objects/SightingSro.java
+++ b/src/main/java/io/digitalstate/stix/sro/objects/SightingSro.java
@@ -35,13 +35,11 @@
@Redactable
public interface SightingSro extends RelationshipObject {
- @JsonSerialize(using = InstantSerializer.class)
@JsonFormat(pattern = StixDataFormats.TIMESTAMP_PATTERN, timezone = "UTC")
@JsonProperty("first_seen") @JsonInclude(value = NON_EMPTY, content= NON_EMPTY)
@Redactable
Optional getFirstSeen();
- @JsonSerialize(using = InstantSerializer.class)
@JsonFormat(pattern = StixDataFormats.TIMESTAMP_PATTERN, timezone = "UTC")
@JsonProperty("last_seen") @JsonInclude(value = NON_EMPTY, content= NON_EMPTY)
@Redactable
diff --git a/src/test/groovy/stix/end2end/IndicatorSdoSpec.groovy b/src/test/groovy/stix/end2end/IndicatorSdoSpec.groovy
new file mode 100644
index 0000000..4312686
--- /dev/null
+++ b/src/test/groovy/stix/end2end/IndicatorSdoSpec.groovy
@@ -0,0 +1,47 @@
+package stix.end2end
+
+import com.fasterxml.jackson.databind.ObjectMapper
+import io.digitalstate.stix.bundle.Bundle
+import io.digitalstate.stix.json.StixParsers
+import io.digitalstate.stix.sdo.objects.AttackPattern
+import io.digitalstate.stix.sdo.objects.Indicator
+import io.digitalstate.stix.sdo.objects.IndicatorSdo
+import io.digitalstate.stix.sdo.objects.Report
+import spock.lang.Shared
+import spock.lang.Specification
+
+import java.time.Instant
+
+class IndicatorSdoSpec extends Specification {
+
+ @Shared ObjectMapper mapper = new ObjectMapper()
+
+ def "Create Indicator SDO and cycle from object to Json back to object"() {
+
+ when: "a objects are created,"
+ IndicatorSdo indicator1 = Indicator.builder()
+ .addLabels("malicious-activity")
+ .name("some name")
+ .validFrom(Instant.now())
+ .pattern("some pattern")
+ .build()
+
+ then: "Create a Report and Add Attack Patterns as Report Objects"
+
+ println indicator1.toJsonString()
+ String indicator1Json = indicator1.toJsonString()
+
+ println StixParsers.parseObject(indicator1Json).inspect()
+
+ and: "Create a bundle with the indicator"
+ Bundle bundle = Bundle.builder()
+ .addObjects(indicator1)
+ .build()
+
+ println bundle.toJsonString()
+
+ println StixParsers.parseBundle(bundle.toJsonString()).inspect()
+
+ }
+
+}
\ No newline at end of file