2

ブループリントでグラフをインスタンス化しようとすると、初期化エラーが発生します。新しいグラフを作成するために使用しているコードは次のとおりです。

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 がテストを実行すると、別のエラーがスローされます。これは依存関係に関連しているようです。

4

3 に答える 3

0

あなたの例外は、次のコード行につながります。

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

Illegal Characters 宣言で確認できます。

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

ConfigElement抽象クラスのコンストラクターのこの行(行 18) は、次の文字がパスに含まれないようにします。

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

したがって、この問題は絶対/相対パスの問題ではありません。

ただし、取得しているエラーは、StringUtils の .containsAny メソッドに関連しています。私が収集できることから、Preconditions checkState メソッド(172 行目)には、指定された 4 つのパラメーターすべてに対する有効な呼び出しがないため、そのエラーが発生しています。(26 行目)。これにより、使用できるメソッドがないためチェックを実行できないため、このエラーが発生すると思われます。

私はこれが役に立ちました。

Ljava/lang/String;[C)Z

具体的には、スタック トレースの最初の行の最後に意味があります。この Titan パッケージが呼び出そうとしている StringUtils パッケージにはメソッドが存在せず、4 つのパラメーターすべてを処理するメソッドが定義されるまで、この NoSuchMethodError がスローされます。

于 2015-08-10T18:07:35.727 に答える