trying to persist byte[] field fails

4 views
Skip to first unread message

ms

unread,
Nov 4, 2010, 7:01:30 AM11/4/10
to OrientDB
hi,

i am new to orientdb and have run some successful tests.
what i am trying to achieve is to persist classes that were generated
by jaxb2.
persisting jaxb2 generated classes seem to work well unless they
contain fields of the following kind:

protected byte[] uniqueid;

saving a class that contains such a field results in the following
exception:

java.lang.IllegalArgumentException: Type LINK must be a collection
at
com.orientechnologies.orient.core.serialization.serializer.object.OObjectSerializerHelper.multiValueToStream(OObjectSerializerHelper.java:
407)
at
com.orientechnologies.orient.core.serialization.serializer.object.OObjectSerializerHelper.typeToStream(OObjectSerializerHelper.java:
337)
at
com.orientechnologies.orient.core.serialization.serializer.object.OObjectSerializerHelper.multiValueToStream(OObjectSerializerHelper.java:
418)
at
com.orientechnologies.orient.core.serialization.serializer.object.OObjectSerializerHelper.typeToStream(OObjectSerializerHelper.java:
337)
at
com.orientechnologies.orient.core.serialization.serializer.object.OObjectSerializerHelper.toStream(OObjectSerializerHelper.java:
311)
at
com.orientechnologies.orient.core.db.object.ODatabaseObjectTx.pojo2Stream(ODatabaseObjectTx.java:
250)
at
com.orientechnologies.orient.core.db.object.ODatabaseObjectTx.save(ODatabaseObjectTx.java:
174)
at
com.orientechnologies.orient.core.db.object.ODatabaseObjectTx.save(ODatabaseObjectTx.java:
151)

any idea what i do wrong?

thanks,
markus

Luca Garulli

unread,
Nov 4, 2010, 8:24:52 AM11/4/10
to orient-database
Hi,
the reason is a old bug on auto-discovery of type when you're working in schema-less mode. To fix:
- create a schema for that class with a property of type "binary"
- checkout latest SVN trunk

What version are you using?

bye,
Lvc@

ms

unread,
Nov 4, 2010, 9:56:37 AM11/4/10
to OrientDB
i used latest svn trunk (1703)

for test purposes i modified the InheritanceTest's create() method and
ran InheritanceTest only:

@Test
public void create() {

database.open( "admin", "admin" );

OClass account = database.getMetadata().getSchema()
.createClass( "Account",
database.getStorage().addCluster( "account",
OStorage.CLUSTER_TYPE.PHYSICAL ) );

OClass c =
database.getMetadata().getSchema().createClass( "Company" ).setSuperClass( account );
c.createProperty( "ucpTuniqueId", OType.BINARY );

OClass profile = database.getMetadata().getSchema()
.createClass( "Profile",
database.getStorage().addCluster( "profile",
OStorage.CLUSTER_TYPE.PHYSICAL ) );

startRecordNumber = database.countClusterElements("Company");

Company company;

for (long i = startRecordNumber; i < startRecordNumber +
TOT_RECORDS; ++i) {
company = new Company( (int) i, "Microsoft" + i );
company.setEmployees( (int) (100000 + i) );
company.getAddresses().add( new Address( "Headquarter", redmond,
"WA 98073-9717" ) );
company.setUCPTuniqueId( new byte[] { 0x03, 0x00, 00, 0x1A, 0x7B,
0x62 } );
database.save( company );
}

database.close();
}


and received:

FAILED: create
java.lang.IllegalArgumentException: Type BINARY must be a collection
at
com.orientechnologies.orient.core.serialization.serializer.object.OObjectSerializerHelper.multiValueToStream(OObjectSerializerHelper.java:
407)
at
com.orientechnologies.orient.core.serialization.serializer.object.OObjectSerializerHelper.typeToStream(OObjectSerializerHelper.java:
337)
at
com.orientechnologies.orient.core.serialization.serializer.object.OObjectSerializerHelper.toStream(OObjectSerializerHelper.java:
311)
at
com.orientechnologies.orient.core.db.object.ODatabaseObjectTx.pojo2Stream(ODatabaseObjectTx.java:
250)
at
com.orientechnologies.orient.core.db.object.ODatabaseObjectTx.save(ODatabaseObjectTx.java:
174)
at
com.orientechnologies.orient.core.db.object.ODatabaseObjectTx.save(ODatabaseObjectTx.java:
151)
at
com.echelon.es.common.db.orient.InheritanceTest.create(InheritanceTest.java:
71)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)


On 4 Nov., 13:24, Luca Garulli <l.garu...@gmail.com> wrote:
> Hi,
> the reason is a old bug on auto-discovery of type when you're working in
> schema-less mode. To fix:
> - create a schema for that class with a property of type "binary"
> - checkout latest SVN trunk
>
> What version are you using?
>
> bye,
> Lvc@
>

Luca Garulli

unread,
Nov 4, 2010, 10:34:02 AM11/4/10
to orient-database
Hi,
the problem was of Object Database wrapper. Can you try now with last SVN?

bye,
Lvc@

ms

unread,
Nov 4, 2010, 11:26:52 AM11/4/10
to OrientDB
great! it works.

thanks for the quick fix.

regards,
markus
On 4 Nov., 15:34, Luca Garulli <l.garu...@gmail.com> wrote:
> Hi,
> the problem was of Object Database wrapper. Can you try now with last SVN?
>
> bye,
> Lvc@
>
> > com.orientechnologies.orient.core.serialization.serializer.object.OObjectSe rializerHelper.multiValueToStream(OObjectSerializerHelper.java:
> > 407)
> >        at
>
> > com.orientechnologies.orient.core.serialization.serializer.object.OObjectSe rializerHelper.typeToStream(OObjectSerializerHelper.java:
> > 337)
> >        at
>
Reply all
Reply to author
Forward
0 new messages