-
Bug
-
Resolution: Fixed
-
P3
-
1.4.0
Name: agR10216 Date: 06/03/2002
###@###.###
I reproduced this bug with build 1.4.1-beta-b12.
I want to transfer an object wrapped in a transferable with
DataFlavor.javaJVMLocalObjectMimeType data flavor
via Windows system clipboard within the same JVM.
In javadoc for DataFlavor.javaJVMLocalObjectMimeType there
are no specified constraints on a locally transferring object
with this data flavor.
But NotSerializableExeption is thrown when contents of
system clipboard are set and following test case demonstrates it.
---------- BEGIN SOURCE ----------
import java.awt.datatransfer.*;
import java.awt.*;
import java.io.*;
class NotSerializableLocalTransferable implements Transferable {
public final DataFlavor flavor;
private final DataFlavor[] flavors;
private final Object data;
public NotSerializableLocalTransferable(Object data) throws Exception {
this.data = data;
flavor = new DataFlavor(
DataFlavor.javaJVMLocalObjectMimeType +
";class=" + "\"" + data.getClass().getName() + "\"");
this.flavors = new DataFlavor[] { flavor };
}
public DataFlavor[] getTransferDataFlavors() {
return (DataFlavor[])flavors.clone();
}
public boolean isDataFlavorSupported(DataFlavor flavor) {
return this.flavor.equals(flavor);
}
public Object getTransferData(DataFlavor flavor)
throws UnsupportedFlavorException
{
if (this.flavor.equals(flavor)) {
return (Object)data;
}
throw new UnsupportedFlavorException(flavor);
}
public static void main (String [] args) throws Exception {
NotSerializableLocalTransferable t = new NotSerializableLocalTransferable(new NotSer());
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(t, null);
}
}
class NotSer implements Serializable {
private Object field = new Object(); // not serializable field
}
---------- END SOURCE ----------
Here is the output of the given test case.
---------- BEGIN OUTPUT ----------
java.io.NotSerializableException: java.lang.Object
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1054)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1330)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1302)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1245)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1052)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:278)
at sun.awt.datatransfer.DataTransferer.translateTransferable(DataTransferer.java:1225)
at sun.awt.windows.WDataTransferer.translateTransferable(WDataTransferer.java:151)
at sun.awt.windows.WClipboard.setContents(WClipboard.java:79)
at NotSerializableLocalTransferable.main(NotSerializableLocalTransferable.java:42)
---------- END OUTPUT ----------
###@###.### 2002-06-03
======================================================================
###@###.###
I reproduced this bug with build 1.4.1-beta-b12.
I want to transfer an object wrapped in a transferable with
DataFlavor.javaJVMLocalObjectMimeType data flavor
via Windows system clipboard within the same JVM.
In javadoc for DataFlavor.javaJVMLocalObjectMimeType there
are no specified constraints on a locally transferring object
with this data flavor.
But NotSerializableExeption is thrown when contents of
system clipboard are set and following test case demonstrates it.
---------- BEGIN SOURCE ----------
import java.awt.datatransfer.*;
import java.awt.*;
import java.io.*;
class NotSerializableLocalTransferable implements Transferable {
public final DataFlavor flavor;
private final DataFlavor[] flavors;
private final Object data;
public NotSerializableLocalTransferable(Object data) throws Exception {
this.data = data;
flavor = new DataFlavor(
DataFlavor.javaJVMLocalObjectMimeType +
";class=" + "\"" + data.getClass().getName() + "\"");
this.flavors = new DataFlavor[] { flavor };
}
public DataFlavor[] getTransferDataFlavors() {
return (DataFlavor[])flavors.clone();
}
public boolean isDataFlavorSupported(DataFlavor flavor) {
return this.flavor.equals(flavor);
}
public Object getTransferData(DataFlavor flavor)
throws UnsupportedFlavorException
{
if (this.flavor.equals(flavor)) {
return (Object)data;
}
throw new UnsupportedFlavorException(flavor);
}
public static void main (String [] args) throws Exception {
NotSerializableLocalTransferable t = new NotSerializableLocalTransferable(new NotSer());
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(t, null);
}
}
class NotSer implements Serializable {
private Object field = new Object(); // not serializable field
}
---------- END SOURCE ----------
Here is the output of the given test case.
---------- BEGIN OUTPUT ----------
java.io.NotSerializableException: java.lang.Object
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1054)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1330)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1302)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1245)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1052)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:278)
at sun.awt.datatransfer.DataTransferer.translateTransferable(DataTransferer.java:1225)
at sun.awt.windows.WDataTransferer.translateTransferable(WDataTransferer.java:151)
at sun.awt.windows.WClipboard.setContents(WClipboard.java:79)
at NotSerializableLocalTransferable.main(NotSerializableLocalTransferable.java:42)
---------- END OUTPUT ----------
###@###.### 2002-06-03
======================================================================
- relates to
-
JDK-4475722 java.io.NotSerializableException is displayed by using jdk1.3.1 on WindowsNT4.0
-
- Open
-