2014-03-26 63 views
0

我想加載TinkerGraph.FileType.GRAPHML類型保存的tinkerpop數據庫。Tinkerpop藍圖GraphFactory.open()異常

這是我的代碼:

public Graph getDatabase(String path) { 
    org.apache.commons.configuration.Configuration conf = new BaseConfiguration(); 
    conf.setProperty("blueprints.tg.directory", path); 
    conf.setProperty("blueprints.tg.file-type", "GRAPHML"); 
    conf.setProperty("blueprints.graph", "com.tinkerpop.blueprints.impls.tg.TinkerGraph"); 
    return GraphFactory.open(conf); 
} 

此代碼給我了java.lang.RuntimeException:GraphFactory無法實例化這個圖實現[com.tinkerpop.blueprints.impls.tg.TinkerGraph。

的原因是數字格式例外

Caused by: java.lang.NumberFormatException: For input string: "2306416072" 
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
at java.lang.Integer.parseInt(Integer.java:495) 
at java.lang.Integer.valueOf(Integer.java:582) 
at com.tinkerpop.blueprints.util.io.graphml.GraphMLReader.typeCastValue(GraphMLReader.java:313) 
at com.tinkerpop.blueprints.util.io.graphml.GraphMLReader.inputGraph(GraphMLReader.java:252) 
at com.tinkerpop.blueprints.util.io.graphml.GraphMLReader.inputGraph(GraphMLReader.java:116) 
at com.tinkerpop.blueprints.impls.tg.TinkerStorageFactory$GraphMLTinkerStorage.loadGraphData(TinkerStorageFactory.java:187) 
at com.tinkerpop.blueprints.impls.tg.TinkerStorageFactory$AbstractSeparateTinkerStorage.load(TinkerStorageFactory.java:94) 
at com.tinkerpop.blueprints.impls.tg.TinkerGraph.init(TinkerGraph.java:134) 
... 51 more 

我搜索XML文件中的 「2306416072」(數據庫)。 這是一個物業編號< -data鍵=「USER_ID」 - > 2306416072 < - /數據 - >

不知道爲什麼我得到的數字格式例外。我在導航類GraphMLReader,這是方法

private static Object typeCastValue(String key, String value, Map<String, String> keyTypes) { 
    String type = keyTypes.get(key); 
    if (null == type || type.equals(GraphMLTokens.STRING)) 
     return value; 
    else if (type.equals(GraphMLTokens.FLOAT)) 
     return Float.valueOf(value); 
    else if (type.equals(GraphMLTokens.INT)) 
     return Integer.valueOf(value); 
    else if (type.equals(GraphMLTokens.DOUBLE)) 
     return Double.valueOf(value); 
    else if (type.equals(GraphMLTokens.BOOLEAN)) 
     return Boolean.valueOf(value); 
    else if (type.equals(GraphMLTokens.LONG)) 
     return Long.valueOf(value); 
    else 
     return value; 
} 

回答

0

Integer.MAX_VALUE 2147483647(這顯然是小於2306416072)。我認爲讀者不是問題;無論是寫錯了,還是手動爲XML文件添加了一些新元素,並忘記更新類型定義。我認爲後者是這樣,因爲我只是嘗試了以下內容:

gremlin> g = new TinkerGraph() 
==>tinkergraph[vertices:0 edges:0] 
gremlin> g.addVertex(["num":123]) 
==>v[0] 
gremlin> g.addVertex(["num":2306416072]) 
==>v[1] 
gremlin> g.v(0).num.getClass() 
==>class java.lang.Integer 
gremlin> g.v(1).num.getClass() 
==>class java.lang.Long 
gremlin> g.saveGraphML("/tmp/numtest.xml") 
==>null 

gremlin> h = new TinkerGraph() 
==>tinkergraph[vertices:0 edges:0] 
gremlin> h.loadGraphML("/tmp/numtest.xml") 
==>null 
gremlin> h.V().map() 
==>{num=2306416072} 
==>{num=123} 
gremlin> h.v(0).num.getClass() 
==>class java.lang.Long 
gremlin> h.v(1).num.getClass() 
==>class java.lang.Long 

XML的開頭的類型定義是怎樣的?對於它上面創建的numtest.xml是:

<key id="num" for="node" attr.name="num" attr.type="long"></key> 

乾杯, 丹尼爾

+0

謝謝你牛!也許我找到了問題。類型定義! 剛將int更改爲long,我得到另一個異常,但是由於其他原因!在com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:598) \t com.sun.org.apache.xerces.internal處解析字符「&#。 – 0pipe0

+0

」的問題。 impl.XMLStreamReaderImpl.getElementText(XMLStreamReaderImpl.java:862) \t在com.tinkerpop.blueprints.util.io.graphml.GraphMLReader.inputGraph(GraphMLReader.java:243) \t ... 55多個 Unicode的問題?& #xd83d; – 0pipe0