blob: 87d706663d5689770dc56e3ceccdc12c25990d29 [file] [log] [blame]
/*
* 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 org.apache.geode.pdx;
/**
* When a domain class implements PdxSerializable it marks itself as a PDX. The implementation of
* {@link #toData toData} provides the serialization code and {@link #fromData fromData} provides
* the deserialization code. These methods also define each field name and field type of the PDX.
* Domain classes should serialize and deserialize all its member fields in the same order in toData
* and fromData method. Also fromData and toData must read and write the same fields each time they
* are called. A domain class that implements this interface must also have a public zero-arg
* constructor which is used during deserialization.
*
*
* <p>
* Simple example:
*
* <PRE>
* public class User implements PdxSerializable {
* private String name;
* private int userId;
*
* public User() {}
*
* public void toData(PdxWriter out) {
* out.writeString("name", this.name);
* out.writeInt("userId", this.userId);
* }
*
* public void fromData(PdxReader in) {
* this.name = in.readString("name");
* this.userId = in.readInt("userId");
* }
* }
* </PRE>
*
* @since GemFire 6.6
*/
public interface PdxSerializable {
/**
* Serializes the PDX fields using the given writer.
*
* @param writer the {@link PdxWriter} to use to write the PDX fields.
*/
void toData(PdxWriter writer);
/**
* Deserializes the PDX fields using the given reader.
*
* @param reader the {@link PdxReader} to use to read the PDX fields.
*/
void fromData(PdxReader reader);
}