blob: 3e5fa9c7fd21db2c92f086b21b517aa8e7a41736 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc -->
<title>PdxSerializer (Apache Geode 1.15.1)</title>
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="PdxSerializer (Apache Geode 1.15.1)";
}
}
catch(err) {
}
//-->
var methods = {"i0":6,"i1":6};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../org/apache/geode/pdx/PdxSerializationException.html" title="class in org.apache.geode.pdx"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../org/apache/geode/pdx/PdxUnreadFields.html" title="interface in org.apache.geode.pdx"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../index.html?org/apache/geode/pdx/PdxSerializer.html" target="_top">Frames</a></li>
<li><a href="PdxSerializer.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">org.apache.geode.pdx</div>
<h2 title="Interface PdxSerializer" class="title">Interface PdxSerializer</h2>
</div>
<div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Known Implementing Classes:</dt>
<dd><a href="../../../../org/apache/geode/pdx/ReflectionBasedAutoSerializer.html" title="class in org.apache.geode.pdx">ReflectionBasedAutoSerializer</a></dd>
</dl>
<hr>
<br>
<pre>public interface <span class="typeNameLabel">PdxSerializer</span></pre>
<div class="block">The PdxSerializer interface allows domain classes to be serialized and deserialized as PDXs
without modification of the domain class. It only requires that the domain class have a public
zero-arg constructor and that it provides read and write access to the PDX serialized fields.
<p>
GemFire allows a single PdxSerializer to be configured on a cache using
<a href="../../../../org/apache/geode/cache/CacheFactory.html#setPdxSerializer-org.apache.geode.pdx.PdxSerializer-"><code>setPdxSerializer</code></a> or
<a href="../../../../org/apache/geode/cache/client/ClientCacheFactory.html#setPdxSerializer-org.apache.geode.pdx.PdxSerializer-"><code>client
setPdxSerializer</code></a>. It can also be configured in <code>cache.xml</code> using the
<code>pdx-serializer</code> element. The same PdxSerializer should be configured on each member
of a distributed system that can serialize or deserialize PDX data.
<p>
The <a href="../../../../org/apache/geode/pdx/PdxSerializer.html#toData-java.lang.Object-org.apache.geode.pdx.PdxWriter-"><code>toData</code></a> method is used for serialization; <a href="../../../../org/apache/geode/pdx/PdxSerializer.html#fromData-java.lang.Class-org.apache.geode.pdx.PdxReader-"><code>fromData</code></a> is used
for deserialization. The order in which fields are serialized and deserialized in these methods
for the same class must match. For the same class toData and fromData must write the same fields
each time they are called.
<p>
If you can modify your domain class then use <a href="../../../../org/apache/geode/pdx/PdxSerializable.html" title="interface in org.apache.geode.pdx"><code>PdxSerializable</code></a> instead.
<p>
Simple example:
<PRE>
public class User {
public final String name;
public final int userId;
public User(String name, int userId) {
this.name = name;
this.userId = userId;
}
}
public class MyPdxSerializer implements PdxSerializer {
public boolean toData(Object o, PdxWriter out) {
if (o instanceof User) {
User u = (User) o;
out.writeString("name", u.name);
out.writeInt("userId", u.userId);
return true;
} else {
return false;
}
}
public Object fromData(Class&lt;?&gt; clazz, PdxReader in) {
if (User.class.isAssignableFrom(clazz)) {
return new User(in.readString("name"), in.readInt("userId"));
} else {
return null;
}
}
}
</PRE></div>
<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>GemFire 6.6</dd>
</dl>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/geode/pdx/PdxSerializer.html#fromData-java.lang.Class-org.apache.geode.pdx.PdxReader-">fromData</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;clazz,
<a href="../../../../org/apache/geode/pdx/PdxReader.html" title="interface in org.apache.geode.pdx">PdxReader</a>&nbsp;in)</code>
<div class="block">This method is given an class that should be instantiated and deserialized using the given
reader.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/geode/pdx/PdxSerializer.html#toData-java.lang.Object-org.apache.geode.pdx.PdxWriter-">toData</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;o,
<a href="../../../../org/apache/geode/pdx/PdxWriter.html" title="interface in org.apache.geode.pdx">PdxWriter</a>&nbsp;out)</code>
<div class="block">This method is given an object to serialize as a PDX using the given writer.</div>
</td>
</tr>
</table>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="toData-java.lang.Object-org.apache.geode.pdx.PdxWriter-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>toData</h4>
<pre>boolean&nbsp;toData(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;o,
<a href="../../../../org/apache/geode/pdx/PdxWriter.html" title="interface in org.apache.geode.pdx">PdxWriter</a>&nbsp;out)</pre>
<div class="block">This method is given an object to serialize as a PDX using the given writer. If it chooses to
do the serialization then it must return <code>true</code>; otherwise it must return
<code>false</code> in which case it will be serialized using standard serialization.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>o</code> - the object to consider serializing as a PDX</dd>
<dd><code>out</code> - the <a href="../../../../org/apache/geode/pdx/PdxWriter.html" title="interface in org.apache.geode.pdx"><code>PdxWriter</code></a> to use to serialize the object</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd><code>true</code> if the method serialized the object; otherwise <code>false</code></dd>
</dl>
</li>
</ul>
<a name="fromData-java.lang.Class-org.apache.geode.pdx.PdxReader-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>fromData</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;fromData(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;clazz,
<a href="../../../../org/apache/geode/pdx/PdxReader.html" title="interface in org.apache.geode.pdx">PdxReader</a>&nbsp;in)</pre>
<div class="block">This method is given an class that should be instantiated and deserialized using the given
reader.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>clazz</code> - the Class of the object that should be deserialized</dd>
<dd><code>in</code> - the reader to use to obtain the field data</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the deserialized object. <code>null</code> indicates that this PdxSerializer does not
know how to deserialize the given class.</dd>
</dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../org/apache/geode/pdx/PdxSerializationException.html" title="class in org.apache.geode.pdx"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../org/apache/geode/pdx/PdxUnreadFields.html" title="interface in org.apache.geode.pdx"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../index.html?org/apache/geode/pdx/PdxSerializer.html" target="_top">Frames</a></li>
<li><a href="PdxSerializer.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</body>
</html>