当我尝试在蓝图中实例化我的图形时,我收到了初始化错误。这是我用来创建新图表的代码:
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运行测试时,会抛出不同的错误。这个看起来与依赖关系有关。
答案 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)
传递属性文件的绝对路径对我来说解决了这个问题。