"Error on unmarshalling content" on OrientGraph.removeVertex() using custom type

28 views
Skip to first unread message

FP

unread,
Feb 25, 2015, 3:45:30 AM2/25/15
to orient-...@googlegroups.com

  • I'm using OrientDB version 1.7.6.
  • I have a java.awt.Color as an attribute for an Entity, so I created OSerializableColor which simply extends Color and implements OSerializableStream (code is attached below).
  • There doesn't seem to be any problem storing and retrieving the entities that have this attribute (using entityVertex.setProperty("colour", new OSerializableColor(entity.getColour())); and OSerializableColor color = vertex.getProperty("colour"); etc.). I tested this by creating the entities in the DB and then by retrieving and using them.
  • However, when I retrieve only the vertex that corresponds to such an entity from the DB and then request to delete it like this:
    protected OrientGraph db;

    ...

    @Override
    public void delete(T entity) {
        Vertex v = getVertexForEntity(entity);
        if (v != null) {
            db.removeVertex(v);
            db.commit();
        }
    }

    ...

    
protected Vertex getVertexForEntity(T entity) {
        
if (entity == null || entity.getID() == null)
            
return null;
        
Iterator<Vertex> iter = db.getVertices(dbClassName + ".ID",
                entity
.getID()).iterator();
        
if (!iter.hasNext())
            
return null;
        
return iter.next();
    
}


then db.removeVertex(v); throws:
 
SEVERE: Error on unmarshalling content. Class: com.github.bfour.fpliteraturecollector.service.database.DAO.OSerializableColor
java.lang.InstantiationException: com.github.bfour.fpliteraturecollector.service.database.DAO.OSerializableColor
    at java.lang.Class.newInstance0(Class.java:357)
    at java.lang.Class.newInstance(Class.java:325)
    at com.orientechnologies.orient.core.serialization.serializer.string.OStringSerializerAnyStreamable.fromStream(OStringSerializerAnyStreamable.java:48)
    at com.orientechnologies.orient.core.serialization.serializer.record.string.ORecordSerializerStringAbstract.fieldTypeFromStream(ORecordSerializerStringAbstract.java:87)
    at com.orientechnologies.orient.core.serialization.serializer.record.string.ORecordSerializerCSVAbstract.fieldFromStream(ORecordSerializerCSVAbstract.java:249)
    at com.orientechnologies.orient.core.serialization.serializer.record.string.ORecordSerializerSchemaAware2CSV.fromString(ORecordSerializerSchemaAware2CSV.java:242)
    at com.orientechnologies.orient.core.serialization.serializer.record.string.ORecordSerializerStringAbstract.fromStream(ORecordSerializerStringAbstract.java:661)
    at com.orientechnologies.orient.core.record.ORecordSchemaAwareAbstract.deserializeFields(ORecordSchemaAwareAbstract.java:436)
    at com.orientechnologies.orient.core.record.impl.ODocument.deserializeFields(ODocument.java:1510)
    at com.tinkerpop.blueprints.impls.orient.OrientElement.checkClass(OrientElement.java:427)
    at com.tinkerpop.blueprints.impls.orient.OrientVertex.remove(OrientVertex.java:532)
    at com.tinkerpop.blueprints.impls.orient.OrientBaseGraph.removeVertex(OrientBaseGraph.java:574)
    at com.github.bfour.fpliteraturecollector.service.database.OrientDBGraphService.deleteAllDataInCurrentDB(OrientDBGraphService.java:145)
    at com.github.bfour.fpliteraturecollector.service.ServiceManager.resetAllData(ServiceManager.java:111)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:33)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)


Code of custom java.awt.Color implementation:

import java.awt.Color;
import java.awt.color.ColorSpace;
import java.nio.ByteBuffer;


import com.orientechnologies.orient.core.exception.OSerializationException;
import com.orientechnologies.orient.core.serialization.OSerializableStream;


public class OSerializableColor extends Color implements OSerializableStream {


   
private static final long serialVersionUID = -4948645118483624549L;


   
public OSerializableColor(ColorSpace instance, float[] components,
           
int alpha) {
       
super(instance, components, alpha/255);
   
}


   
public OSerializableColor(Color color) {
       
this(color.getColorSpace(), color.getComponents(null),
                color
.getAlpha());
   
}


   
@Override
   
public byte[] toStream() throws OSerializationException {
       
int colorSpace = getColorSpace().getType();
       
float[] components = getComponents(null);
       
int alpha = getAlpha();
       
ByteBuffer buffer = ByteBuffer.allocate(4 + components.length * 4 + 4);
        buffer
.putInt(colorSpace);
        buffer
.putInt(alpha);
       
for (float component : components) {
            buffer
.putFloat(component);
       
}
       
return buffer.array();
   
}


   
@Override
   
public OSerializableStream fromStream(byte[] bytes)
           
throws OSerializationException {
       
ByteBuffer buffer = ByteBuffer.wrap(bytes);
       
int colorSpace = buffer.getInt();
       
int alpha = buffer.getInt();
       
ByteBuffer componentsBuffer = buffer.slice();
       
float[] components = new float[componentsBuffer.remaining()];
       
int counter = 0;
       
while (componentsBuffer.hasRemaining()) {
            components
[counter] = componentsBuffer.getFloat();
            counter
++;
       
}
       
return new OSerializableColor(ColorSpace.getInstance(colorSpace),
                components
, alpha);
   
}


}


Emanuel

unread,
Mar 20, 2015, 1:29:17 PM3/20/15
to orient-...@googlegroups.com
O think you need the default constructor.

bye
--

---
You received this message because you are subscribed to the Google Groups "OrientDB" group.
To unsubscribe from this group and stop receiving emails from it, send an email to orient-databa...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply all
Reply to author
Forward
0 new messages