private void setupSerializer(String... classPatterns) { setupSerializer(new ReflectionBasedAutoSerializer(classPatterns), true); } private void setupSerializer(boolean checkPortability, String... classPatterns) {
public void testGetConfig() throws Exception { setupSerializer(); Properties props = new Properties(); props.put("classes", "Pdx#exclude=string.*#exclude=badField, Pdx#identity=id.*, PdxAuto#exclude=long.*#identity=id.*"); serializer.init(props); Properties result = serializer.getConfig(); assertEquals("Pdx, PdxAuto, Pdx#identity=id.*, PdxAuto#identity=id.*, Pdx#exclude=string.*, Pdx#exclude=badField, PdxAuto#exclude=long.*", result.getProperty("classes")); manager.resetCaches(); serializer.init(result); result = serializer.getConfig(); assertEquals("Pdx, PdxAuto, Pdx#identity=id.*, PdxAuto#identity=id.*, Pdx#exclude=string.*, Pdx#exclude=badField, PdxAuto#exclude=long.*", result.getProperty("classes")); }
@Override public String getFieldName(Field f, Class<?> clazz) { if (f.getName().equals("long_0")) { return "_long_0"; } else { return super.getFieldName(f, clazz); } } }
Field[] fields = tmpClass.getDeclaredFields(); for (Field f : fields) { if (getOwner().isFieldIncluded(f, clazz)) { FieldType ft = getOwner().getFieldType(f, clazz); PdxFieldWrapper fw = PdxFieldWrapper.create(this, f, ft, getOwner().getFieldName(f, clazz), getOwner().transformFieldValue(f, clazz), getOwner().isIdentityField(f, clazz)); if (ft.isFixedWidth()) { fieldList.add(fw);
@Override public Object readTransform(Field f, Class<?> clazz, Object serializedValue) { if (f.getType().equals(BigInteger.class)) { BigInteger result = null; if (serializedValue != null) { result = new BigInteger((byte[])serializedValue); } return result; } else if (f.getType().equals(BigDecimal.class)) { BigDecimal result = null; if (serializedValue != null) { result = new BigDecimal((String)serializedValue); } return result; } else { return super.readTransform(f, clazz, serializedValue); } }
@Override public Object writeTransform(Field f, Class<?> clazz, Object originalValue) { if (f.getType().equals(BigInteger.class)) { byte[] result = null; if (originalValue != null) { BigInteger bi = (BigInteger)originalValue; result = bi.toByteArray(); } return result; } else if (f.getType().equals(BigDecimal.class)) { Object result = null; if (originalValue != null) { BigDecimal bd = (BigDecimal)originalValue; result = bd.toString(); } return result; } else { return super.writeTransform(f, clazz, originalValue); } }
/** * Generates XML for a <code>CacheCallback</code> */ private void generate(String kind, Object callback) throws SAXException { if (callback == null) { return; } handler.startElement("", kind, kind, EMPTY); String className = callback.getClass().getName(); handler.startElement("", CLASS_NAME, CLASS_NAME, EMPTY); handler.characters(className.toCharArray(), 0, className.length()); handler.endElement("", CLASS_NAME, CLASS_NAME); Properties props = null; if (callback instanceof Declarable2) { props = ((Declarable2) callback).getConfig(); } else if (callback instanceof ReflectionBasedAutoSerializer) { props = ((ReflectionBasedAutoSerializer) callback).getConfig(); } else if (callback instanceof Declarable && cache instanceof GemFireCacheImpl) { props = ((GemFireCacheImpl) cache).getDeclarableProperties((Declarable) callback); } generate(props, null); handler.endElement("", kind, kind); }
@Override public FieldType getFieldType(Field f, Class<?> clazz) { if (f.getType().equals(BigInteger.class)) { return FieldType.BYTE_ARRAY; } else if (f.getType().equals(BigDecimal.class)) { return FieldType.STRING; } else { return super.getFieldType(f, clazz); } }
@Override public boolean transformFieldValue(Field f, Class<?> clazz) { if (f.getType().equals(BigInteger.class)) { return true; } else if (f.getType().equals(BigDecimal.class)) { return true; } else { return super.transformFieldValue(f, clazz); } }
private boolean isRelevant(Class<?> clazz) { String className = clazz.getName(); // Do some short-circuiting if possible if (cachedIncludedClasses.contains(className)) { return true; } else if (cachedExcludedClasses.contains(className)) { return false; } boolean result = getOwner().isClassAutoSerialized(clazz); if (result) { cachedIncludedClasses.add(className); } else { cachedExcludedClasses.add(className); } return result; }
Field[] fields = tmpClass.getDeclaredFields(); for (Field f : fields) { if (getOwner().isFieldIncluded(f, clazz)) { FieldType ft = getOwner().getFieldType(f, clazz); PdxFieldWrapper fw = PdxFieldWrapper.create(this, f, ft, getOwner().getFieldName(f, clazz), getOwner().transformFieldValue(f, clazz), getOwner().isIdentityField(f, clazz)); if (ft.isFixedWidth()) { fieldList.add(fw);
protected final Object readTransform(Object o, Object serializedValue) throws IllegalArgumentException, IllegalAccessException { return this.owner.getOwner().readTransform(getField(), o.getClass(), serializedValue); } protected void handleException(boolean serialization, Object obj, Exception ex) {
Object newValue = getOwner().writeTransform(f.getField(), obj.getClass(), f.getObject(obj)); f.serializeValue(w, newValue, optimizeFieldWrites); } catch (Exception ex) {
/** * Generates XML for a <code>CacheCallback</code> */ private void generate(String kind, Object callback) throws SAXException { if (callback == null) { return; } handler.startElement("", kind, kind, EMPTY); String className = callback.getClass().getName(); handler.startElement("", CLASS_NAME, CLASS_NAME, EMPTY); handler.characters(className.toCharArray(), 0, className.length()); handler.endElement("", CLASS_NAME, CLASS_NAME); Properties props = null; if (callback instanceof Declarable2) { props = ((Declarable2) callback).getConfig(); } else if (callback instanceof BridgeWriter) { props = ((BridgeWriter) callback).getProperties(); } else if (callback instanceof BridgeLoader) { props = ((BridgeLoader) callback).getProperties(); } else if (callback instanceof ReflectionBasedAutoSerializer) { props = ((ReflectionBasedAutoSerializer) callback).getConfig(); } else if (callback instanceof Declarable && cache instanceof GemFireCacheImpl) { props = ((GemFireCacheImpl) cache).getDeclarableProperties((Declarable) callback); } generate(props, null); handler.endElement("", kind, kind); }
private boolean isRelevant(Class<?> clazz) { String className = clazz.getName(); // Do some short-circuiting if possible if (cachedIncludedClasses.contains(className)) { return true; } else if (cachedExcludedClasses.contains(className)) { return false; } boolean result = getOwner().isClassAutoSerialized(clazz); if (result) { cachedIncludedClasses.add(className); } else { cachedExcludedClasses.add(className); } return result; }
private void setupSerializer(boolean checkPortability, String... classPatterns) { setupSerializer(new ReflectionBasedAutoSerializer(checkPortability, classPatterns), true); } private void setupSerializer(boolean checkPortability, boolean readSerialized, String... classPatterns) {
protected final Object readTransform(Object o, Object serializedValue) throws IllegalArgumentException, IllegalAccessException { return this.owner.getOwner().readTransform(getField(), o.getClass(), serializedValue); } protected void handleException(boolean serialization, Object obj, Exception ex) {
Object newValue = getOwner().writeTransform(f.getField(), obj.getClass(), f.getObject(obj)); f.serializeValue(w, newValue, optimizeFieldWrites); } catch (Exception ex) {
private void setupSerializer(boolean checkPortability, boolean readSerialized, String... classPatterns) { setupSerializer(new ReflectionBasedAutoSerializer(checkPortability, classPatterns), readSerialized); }
public static PdxSerializer instantiatePdxSerializer() { List<String> l = new ArrayList(); l.add("objects.PdxObject#identity=timestamp#identity=field1#identity=field2"); ReflectionBasedAutoSerializer pdx = new ReflectionBasedAutoSerializer(l); Log.getLogWriter().info("Created PDX serializer " + pdx.getClass().getName() + " with args: " + l); return pdx; } }