[英]Unable to start titan with cassandra - 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.