@Override protected void javaToNative(Object data, TransferData transferData) { if (!(data instanceof ArtifactData)) { return; } ArtifactData artData = (ArtifactData) data; /** * The resource serialization format is: (int) number of artifacts Then, the following for each * resource: (int) artID (int) tagID Then the following (int) urlLength (int) sourceLength * (chars) url (chars) source */ try { ByteArrayOutputStream out = new ByteArrayOutputStream(); DataOutputStream dataOut = new DataOutputStream(out); // write the number of resources dataOut.writeInt(artData.getArtifacts().length); for (Artifact artifact : artData.getArtifacts()) { writeArtifact(dataOut, artifact); } dataOut.writeInt(artData.getUrl().length()); dataOut.writeInt(artData.getSource().length()); dataOut.writeChars(artData.getUrl()); dataOut.writeChars(artData.getSource()); // cleanup dataOut.close(); out.close(); byte[] bytes = out.toByteArray(); super.javaToNative(bytes, transferData); } catch (Exception e) { // it's best to send nothing if there were problems } }