Titan的关于图创建的IllegalArgumentException

时间:2015-08-10 15:46:21

标签: java configuration titan tinkerpop-blueprint

当我尝试在蓝图中实例化我的图形时,我收到了初始化错误。这是我用来创建新图表的代码:

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运行测试时,会抛出不同的错误。这个看起来与依赖关系有关。

3 个答案:

答案 0 :(得分:2)

您没有包含堆栈跟踪,但它很容易从Gremlin shell中重现。运行value时,通常最好从$ TITAN_HOME目录运行它,而不是$ TITAN_HOME / bin。

r.Field<string>("ColumnName")

您需要注意相对路径。您很可能从不同的目录运行该程序,以便无法解析属性文件的相对路径。从正确的父目录运行程序或使用绝对路径。

答案 1 :(得分:0)

您的例外导致了这行代码:

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 methods(第172行)没有对all four of the parameters given.(第26行)的有效调用,因此我可以收集错误,因此会抛出该错误。这使我相信您会收到此错误,因为无法进行检查,因为没有可用的方法。

我发现this很有帮助,因为它帮助我了解

Ljava/lang/String;[C)Z

在堆栈跟踪的第一行末尾具体表示。 此Titan包试图调用的StringUtils包中不存在任何方法,并且将抛出此NoSuchMethodError,直到定义了处理所有四个参数的方法。

答案 2 :(得分:0)

传递属性文件的绝对路径对我来说解决了这个问题。