1 package com.fasterxml.jackson.databind.objectid; 2 3 import java.util.ArrayList; 4 5 import com.fasterxml.jackson.annotation.*; 6 import com.fasterxml.jackson.databind.*; 7 import com.fasterxml.jackson.databind.testutil.NoCheckSubTypeValidator; 8 9 @SuppressWarnings("serial") 10 public class ObjectId825BTest extends BaseMapTest 11 { 12 static abstract class AbstractAct extends AbstractEntity { 13 protected java.util.ArrayList<Tr> outTr; 14 getOutTr()15 public java.util.ArrayList<Tr> getOutTr() { 16 return this.outTr; 17 } setOutTr(java.util.ArrayList<Tr> outTr)18 public void setOutTr(java.util.ArrayList<Tr> outTr) { 19 this.outTr = outTr; 20 } 21 } 22 23 static abstract class AbstractCond extends AbstractAct { } 24 25 static abstract class AbstractData extends AbstractSym { } 26 27 static abstract class AbstractDec extends AbstractAct { 28 protected java.util.ArrayList<Dec> dec; 29 getDec()30 public java.util.ArrayList<Dec> getDec() { 31 return this.dec; 32 } setDec(java.util.ArrayList<Dec> dec)33 public void setDec(java.util.ArrayList<Dec> dec) { 34 this.dec = dec; 35 } 36 } 37 38 @JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="oidString") 39 @JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.PROPERTY, property="@class") 40 static abstract class AbstractEntity implements java.io.Serializable { 41 public String oidString; 42 AbstractEntity()43 protected AbstractEntity() { } 44 getOidString()45 public String getOidString() { 46 return oidString; 47 } 48 setOidString(String oidString)49 public void setOidString(String oidString) { 50 this.oidString = oidString; 51 } 52 } 53 54 static abstract class AbstractSym extends AbstractEntity { } 55 56 static class Ch extends AbstractEntity { 57 protected java.util.ArrayList<? extends AbstractAct> act; 58 getAct()59 public java.util.ArrayList<? extends AbstractAct> getAct() { 60 return this.act; 61 } 62 setAct(java.util.ArrayList<? extends AbstractAct> act)63 public void setAct(java.util.ArrayList<? extends AbstractAct> act) { 64 this.act = act; 65 } 66 } 67 68 static class CTC extends AbstractEntity { 69 protected java.util.ArrayList<CTV> var; 70 CTC()71 public CTC() { } 72 getVar()73 public java.util.ArrayList<CTV> getVar() { 74 if (var == null) { 75 var = new ArrayList<CTV>(); 76 } 77 return new ArrayList<CTV>(var); 78 } 79 setVar(java.util.ArrayList<CTV> var)80 public void setVar(java.util.ArrayList<CTV> var) { 81 this.var = var; 82 } 83 } 84 85 static class CTD extends AbstractDec { } 86 87 static class CTV extends AbstractEntity { 88 protected Ch ch; 89 protected java.util.ArrayList<? extends AbstractData> locV; 90 getCh()91 public Ch getCh() { 92 return this.ch; 93 } 94 setCh(Ch ch)95 public void setCh(Ch ch) { 96 this.ch = ch; 97 } 98 99 getLocV()100 public java.util.ArrayList<? extends AbstractData> getLocV() { 101 return this.locV; 102 } 103 setLocV(java.util.ArrayList<? extends AbstractData> locV)104 public void setLocV(java.util.ArrayList<? extends AbstractData> locV) { 105 this.locV = locV; 106 } 107 } 108 109 static class Dec extends AbstractCond { } 110 111 static class Ti extends AbstractAct { 112 protected AbstractData timer; 113 getTimer()114 public AbstractData getTimer() { 115 return this.timer; 116 } 117 setTimer(AbstractData timer)118 public void setTimer(AbstractData timer) { 119 this.timer = timer; 120 } 121 } 122 123 static class Tr extends AbstractEntity { 124 protected AbstractAct target; 125 getTarget()126 public AbstractAct getTarget() { 127 return this.target; 128 } 129 setTarget(AbstractAct target)130 public void setTarget(AbstractAct target) { 131 this.target = target; 132 } 133 } 134 135 static class V extends AbstractData { 136 private static final long serialVersionUID = 1L; 137 } 138 139 /* 140 /***************************************************** 141 /* Test methods 142 /***************************************************** 143 */ 144 testFull825()145 public void testFull825() throws Exception 146 { 147 final ObjectMapper mapper = jsonMapperBuilder() 148 .activateDefaultTyping(NoCheckSubTypeValidator.instance, 149 ObjectMapper.DefaultTyping.OBJECT_AND_NON_CONCRETE) 150 .build(); 151 152 String INPUT = aposToQuotes( 153 "{\n"+ 154 " '@class': '_PKG_CTC',\n"+ 155 " 'var': [{\n"+ 156 " 'ch': {\n"+ 157 " '@class': '_PKG_Ch',\n"+ 158 " 'act': [{\n"+ 159 " '@class': '_PKG_CTD',\n"+ 160 " 'oidString': 'oid1',\n"+ 161 " 'dec': [{\n"+ 162 " '@class': '_PKG_Dec',\n"+ 163 " 'oidString': 'oid2',\n"+ 164 " 'outTr': [{\n"+ 165 " '@class': '_PKG_Tr',\n"+ 166 " 'target': {\n"+ 167 " '@class': '_PKG_Ti',\n"+ 168 " 'oidString': 'oid3',\n"+ 169 " 'timer': 'problemoid',\n"+ 170 " 'outTr': [{\n"+ 171 " '@class': '_PKG_Tr',\n"+ 172 " 'target': {\n"+ 173 " '@class': '_PKG_Ti',\n"+ 174 " 'oidString': 'oid4',\n"+ 175 " 'timer': {\n"+ 176 " '@class': '_PKG_V',\n"+ 177 " 'oidString': 'problemoid'\n"+ 178 " }\n"+ 179 " }\n"+ 180 " }]\n"+ 181 " }\n"+ 182 " }]\n"+ 183 " }]\n"+ 184 " }],\n"+ 185 " 'oidString': 'oid5'\n"+ 186 " },\n"+ 187 " '@class': '_PKG_CTV',\n"+ 188 " 'oidString': 'oid6',\n"+ 189 " 'locV': ['problemoid']\n"+ 190 " }],\n"+ 191 " 'oidString': 'oid7'\n"+ 192 "}\n" 193 ); 194 195 // also replace package 196 final String newPkg = getClass().getName() + "\\$"; 197 INPUT = INPUT.replaceAll("_PKG_", newPkg); 198 199 CTC result = mapper.readValue(INPUT, CTC.class); 200 assertNotNull(result); 201 } 202 } 203