0

Titan データベースで基本的なオブジェクトをシリアル化します。しかし、うまくいきません。オブジェクトをシリアライズして、タイタンデータベースに登録したいと思います。しかし、なぜこの問題があるのか​​ わかりません。私はソース コードを投稿します。ドキュメントがあれば、喜んで受け入れます。

通常、私は自分のオブジェクトを作成します:

public class Attribute implements KryoSerializable {

    private String typeunit;

    private Object value;

    private String valueS;


    public Attribute() {
        this.typeunit = "";
        this.value = null;
        this.valueS = "";
    }


    public void setValue(String type, Object value) {
        this.typeunit = type;
        this.value = value;

        try {
            if(value instanceof java.lang.String) {
                this.valueS = (String) value;
            }
        } catch(Exception e) {

        }
    }

    public Object getValue() {
        return value;
    }

    public String getValueS() {
        return valueS;
    }

    public String getTypeunit() {
        return typeunit;
    }

    @Override
    public boolean equals(Object obj) {
        // TODO Auto-generated method stub
        return super.equals(obj);
    }

    public void read(Kryo kryo, Input input) {
        this.typeunit = input.readString();
        this.value = kryo.readObject(input, Object.class);
        this.valueS = input.readString();
    }

    public void write(Kryo kryo, Output output) {
        kryo.register(Object.class);

        output.writeString(this.typeunit);
        kryo.writeObject(output, this.value);
        output.writeString(this.valueS);
    }

}

そして、私がこれを試した後:

Vertex r = this.model.addVertex(null);
r.setProperty("uuid", UUID.randomUUID().toString());
r.setProperty("object", attr);

this.model.commit();

for(Vertex vertex : this.model.query().vertices()) { 
     Attribute test = vertex.getProperty("object");
     System.out.println(test.getTypeunit());
}

しかし、私には例外があります:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -2
    at java.util.ArrayList.elementData(ArrayList.java:400)
    at java.util.ArrayList.get(ArrayList.java:413)
    at com.esotericsoftware.kryo.util.MapReferenceResolver.getReadObject(MapReferenceResolver.java:42)
    at com.esotericsoftware.kryo.Kryo.readReferenceOrNull(Kryo.java:773)
    at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:624)
    at XXXX.XXXXXX.Attribute.read(Attribute.java:140)
    at com.esotericsoftware.kryo.serializers.DefaultSerializers$KryoSerializableSerializer.read(DefaultSerializers.java:363)
    at com.esotericsoftware.kryo.serializers.DefaultSerializers$KryoSerializableSerializer.read(DefaultSerializers.java:355)
    at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:729)
    at com.thinkaurelius.titan.graphdb.database.serialize.kryo.KryoSerializer.readClassAndObject(KryoSerializer.java:119)
    at com.thinkaurelius.titan.graphdb.database.EdgeSerializer.parseRelation(EdgeSerializer.java:211)
    at com.thinkaurelius.titan.graphdb.database.EdgeSerializer.readRelation(EdgeSerializer.java:119)
    at com.thinkaurelius.titan.graphdb.database.EdgeSerializer.readRelation(EdgeSerializer.java:59)
    at com.thinkaurelius.titan.graphdb.transaction.StandardTitanTx$4$3.apply(StandardTitanTx.java:780)
    at com.thinkaurelius.titan.graphdb.transaction.StandardTitanTx$4$3.apply(StandardTitanTx.java:777)
    at com.google.common.collect.Iterators$8.transform(Iterators.java:860)
    at com.google.common.collect.TransformedIterator.next(TransformedIterator.java:48)
    at com.thinkaurelius.titan.graphdb.query.LimitAdjustingIterator.next(LimitAdjustingIterator.java:55)
    at com.thinkaurelius.titan.graphdb.query.QueryProcessor$OuterIterator.nextInternal(QueryProcessor.java:76)
    at com.thinkaurelius.titan.graphdb.query.QueryProcessor$OuterIterator.<init>(QueryProcessor.java:65)
    at com.thinkaurelius.titan.graphdb.query.QueryProcessor.iterator(QueryProcessor.java:46)
    at com.thinkaurelius.titan.graphdb.vertices.AbstractVertex.getProperty(AbstractVertex.java:105)
    at com.thinkaurelius.titan.graphdb.vertices.AbstractVertex.getProperty(AbstractVertex.java:121)

私を助けてくれませんか?

ありがとうございます。

4

2 に答える 2

1

カスタムシリアライザーを定義する方法については、ドキュメントを参照してください。

https://github.com/thinkaurelius/titan/wiki/Datatype-and-Attribute-Serializer-Configuration

これが機能するために必要な構成オプションと、シリアライザーの要件があります。現時点では、その多くが整っているようには思えません。

于 2014-07-10T16:26:10.807 に答える
0

@stephen malletteによる回答への追加として:

Titan は多数の独自のカスタム シリアライザーを使用するため、構成で十分に大きな数値を指定する必要がありattributes.attribute20 = ...ますNumberFormatException

于 2014-07-25T11:22:57.497 に答える