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 行)摘要 class 的构造函数中的这一行阻止了以下任何字符出现在路径中。
Tabs, New Line characters, # @ < > ? / ; " ' : + ( ) * ^ ` ~ $ % | \ { [ ] } and the .
所以问题不是 absolute/relative 路径问题。
但是,您遇到的错误与 StringUtils 上的 .containsAny 方法有关。据我所知,它抛出了那个错误,因为 Preconditions checkState methods(Line 172) do not have a valid call for all four of the parameters given.(第 26 行)。这使我相信您会收到此错误,因为无法进行检查,因为没有可用的方法。
我发现 this 很有帮助,因为它帮助我理解了
Ljava/lang/String;[C)Z
在你的stack-trace第一行的末尾有明确的意思。
此 Titan 包尝试调用的 StringUtils 包中不存在任何方法,并且将抛出此 NoSuchMethodError 直到定义了处理所有四个参数的方法。
传递属性文件的绝对路径为我解决了这个问题。
当我尝试在蓝图中实例化我的图形时遇到初始化错误。这是我用来创建新图表的代码:
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 行)摘要 class 的构造函数中的这一行阻止了以下任何字符出现在路径中。
Tabs, New Line characters, # @ < > ? / ; " ' : + ( ) * ^ ` ~ $ % | \ { [ ] } and the .
所以问题不是 absolute/relative 路径问题。
但是,您遇到的错误与 StringUtils 上的 .containsAny 方法有关。据我所知,它抛出了那个错误,因为 Preconditions checkState methods(Line 172) do not have a valid call for all four of the parameters given.(第 26 行)。这使我相信您会收到此错误,因为无法进行检查,因为没有可用的方法。
我发现 this 很有帮助,因为它帮助我理解了
Ljava/lang/String;[C)Z
在你的stack-trace第一行的末尾有明确的意思。 此 Titan 包尝试调用的 StringUtils 包中不存在任何方法,并且将抛出此 NoSuchMethodError 直到定义了处理所有四个参数的方法。
传递属性文件的绝对路径为我解决了这个问题。