/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package tests.support; import java.io.Serializable; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.IOException; /** * Support class to verify that the methods of * {@code ObjectInputStream.GetField} handle default values correctly. * <p> * <strong>Important:</strong> The test method * {@code test_defaultedLjava_lang_String()} in * {@code tests.api.java.io.ObjectInputStreamGetFieldTest} depends on a * reference file which can be generated with * {@code tests.util.FieldTestFileGenerator}. However, the default mechanism of * {@code GetField} only works if the fields that are supposed to be read have * not been written to the file. This can only be accomplished if the fields do * not exist (are not declared) when writing an instance of this class. * Therefore, when executing {@code tests.util.FieldTestFileGenerator}, the * contents of this class have to be commented out. * </p> */ public class Support_GetPutFieldsDefaulted implements Serializable { private static final long serialVersionUID = 1L; public ObjectInputStream.GetField getField; public ObjectOutputStream.PutField putField; public boolean booleanValue = false; public byte byteValue = 0; public char charValue = 0; public double doubleValue = 0.0; public float floatValue = 0.0f; public long longValue = 0; public int intValue = 0; public short shortValue = 0; public SimpleClass objectValue = null; class SimpleClass implements Serializable { private static final long serialVersionUID = 1L; private int a; private String b; public SimpleClass(int aValue, String bValue) { a = aValue; b = bValue; } public int getA() { return a; } public String getB() { return b; } public boolean equals(Object obj) { if (obj == null || obj.getClass() != this.getClass()) { return false; } SimpleClass other = (SimpleClass) obj; return (a == other.getA() && b.equals(other.getB())); } } public void initTestValues() { booleanValue = true; byteValue = (byte) 0x0b; charValue = 'D'; doubleValue = 523452.4532; floatValue = 298.54f; longValue = 1234567890l; intValue = 999999; objectValue = new SimpleClass(1965, "Hello Jupiter"); shortValue = 4321; } public boolean equals(Object obj) { if (obj == null || obj.getClass() != this.getClass()) { return false; } Support_GetPutFieldsDefaulted other = (Support_GetPutFieldsDefaulted) obj; return (booleanValue == other.booleanValue && byteValue == other.byteValue && charValue == other.charValue && doubleValue == other.doubleValue && floatValue == other.floatValue && longValue == other.longValue && intValue == other.intValue && objectValue.equals(other.objectValue) && shortValue == other.shortValue ); } private void readObject(ObjectInputStream ois) throws Exception { getField = ois.readFields(); booleanValue = getField.get("booleanValue", true); byteValue = getField.get("byteValue", (byte) 0x0b); charValue = getField.get("charValue", (char) 'D'); doubleValue = getField.get("doubleValue", 523452.4532); floatValue = getField.get("floatValue", 298.54f); longValue = getField.get("longValue", (long) 1234567890l); intValue = getField.get("intValue", 999999); objectValue = (Support_GetPutFieldsDefaulted.SimpleClass) getField.get("objectValue", new SimpleClass(1965, "Hello Jupiter")); shortValue = getField.get("shortValue", (short) 4321); } private void writeObject(ObjectOutputStream oos) throws IOException { putField = oos.putFields(); // Do not put anything into putField so that the get methods // will have to use default values. oos.writeFields(); } }