簡體   English   中英

圖創建時 Titan 的 IllegalArgumentException

[英]Titan's IllegalArgumentException on Graph creation

當我嘗試在藍圖中實例化我的圖形時出現初始化錯誤。 這是我用來創建新圖形的代碼:

String path = "conf/titan-cassandra-" + System.getProperty("env") + ".properties";
Graph graph = TitanFactory.open(path);

正在設置系統屬性並且文件存在。 在 TitanFactory 中拋出錯誤:

final Pattern p = Pattern.compile("(" + 
Pattern.quote(GraphDatabaseConfiguration.STORAGE_NS.getName()) + "\\..*" + "(" + 
Pattern.quote(GraphDatabaseConfiguration.STORAGE_DIRECTORY.getName()) + "|" + 
Pattern.quote(GraphDatabaseConfiguration.STORAGE_CONF_FILE.getName()) + ")" + "|" + 
Pattern.quote(GraphDatabaseConfiguration.INDEX_NS.getName()) + "\\..*" + "(" + 
Pattern.quote(GraphDatabaseConfiguration.INDEX_DIRECTORY.getName()) + "|" + 
Pattern.quote(GraphDatabaseConfiguration.INDEX_CONF_FILE.getName()) + ")" + ")");

評估表達式 GraphDatabaseConfiguration.STORAGE_NS 產生“null”。 為什么會這樣?

編輯:

我也包括堆棧跟蹤

Exception in thread "main" java.lang.NoSuchMethodError: org.apache.commons.lang.StringUtils.containsAny(Ljava/lang/String;[C)Z
    at com.thinkaurelius.titan.diskstorage.configuration.ConfigElement.<init>(ConfigElement.java:26)
    at com.thinkaurelius.titan.diskstorage.configuration.ConfigNamespace.<init>(ConfigNamespace.java:19)
    at com.thinkaurelius.titan.diskstorage.configuration.ConfigNamespace.<init>(ConfigNamespace.java:24)
    at com.thinkaurelius.titan.graphdb.configuration.GraphDatabaseConfiguration.<clinit>(GraphDatabaseConfiguration.java:81)
    at com.thinkaurelius.titan.core.TitanFactory.getLocalConfiguration(TitanFactory.java:240)
    at com.thinkaurelius.titan.core.TitanFactory.getLocalConfiguration(TitanFactory.java:170)
    at com.thinkaurelius.titan.core.TitanFactory.open(TitanFactory.java:61)
    at io.fama.api.service.GraphHolder.populateGraph(GraphHolder.java:28)
    at io.fama.api.service.GraphHolder.graph(GraphHolder.java:21)
    at io.fama.api.DebugTests.main(DebugTests.java:7)

當 maven 運行測試時,它會拋出一個不同的錯誤。 這個看起來與依賴項有關。

您沒有包括堆棧跟蹤,但它很容易從 Gremlin shell 中重現。 運行gremlin.sh ,通常最好從 $TITAN_HOME 目錄運行它,而不是 $TITAN_HOME/bin。

gremlin> graph = TitanFactory.open('conf/titan-cassandra-test.properties')
Backend shorthand unknown: conf/titan-cassandra-test.properties
Display stack trace? [yN] y
java.lang.IllegalArgumentException: Backend shorthand unknown: conf/titan-cassandra-test.properties
    at com.google.common.base.Preconditions.checkArgument(Preconditions.java:120)
    at com.thinkaurelius.titan.core.TitanFactory.getLocalConfiguration(TitanFactory.java:175)
    at com.thinkaurelius.titan.core.TitanFactory.open(TitanFactory.java:61)

您需要注意相對路徑。 很可能您正在從不同的目錄運行程序,因此無法解析到屬性文件的相對路徑。 從正確的父目錄運行程序或使用絕對路徑。

您的異常導致這行代碼:

Preconditions.checkArgument(!StringUtils.containsAny(name, ILLEGAL_CHARS),"Name contains illegal character: %s (%s)",name,ILLEGAL_CHARS);

我們可以在非法字符聲明中看到:

public static final char[] ILLEGAL_CHARS = new char[]{SEPARATOR,' ','\t','#','@','<','>','?','/',';','"','\'',':','+','(',')','*','^','`','~','$','%','|','\\','{','[',']','}'};

ConfigElement的構造函數中的這一行(第 18 行)抽象類阻止了以下任何字符出現在路徑中。

Tabs, New Line characters, # @ < > ? / ; " ' : + ( ) * ^ ` ~ $ % | \ { [ ] } and the .

所以這個問題不是絕對/相對路徑問題。

但是,您得到的錯誤與 StringUtils 上的 .containsAny 方法有關。 據我所知,它拋出了那個錯誤,因為Preconditions checkState 方法(第 172 行)沒有對給定的所有四個參數進行有效調用 (第 26 行)。 這讓我相信您會收到此錯誤,因為無法進行檢查,因為沒有可用的方法。

我發現很有幫助,因為它幫助我了解了

Ljava/lang/String;[C)Z

在您的堆棧跟蹤的第一行末尾專門表示。 此 Titan 包嘗試調用的 StringUtils 包中不存在任何方法,並且將拋出此 NoSuchMethodError 直到定義了處理所有四個參數的方法。

傳遞屬性文件的絕對路徑為我解決了這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM