簡體   English   中英

運行Logstash插件時出現java.lang.NoSuchMethodError

[英]java.lang.NoSuchMethodError when running Logstash plugin

我有一個Java程序,可將數據轉換為JSON格式。 我能夠將程序成功構建到jar文件中,並可以在獨立程序中成功使用jar的功能。

我為Logstash創建了一個jruby插件,將其稱為jar。 運行Logstash時:

gem build logstash-filter-example.gemspec &&
../../logstash-5.6.7.freshinstall/bin/logstash-plugin install logstash-filter-example-0.1.1.gem &&
../../logstash-5.6.7.freshinstall/bin/logstash -e 'input { stdin{} } filter { example {} } output {stdout { codec => rubydebug }}'

我收到以下錯誤:

/dataservice/DataServiceClient.java:156:in `parseQueryRowEntry': java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.node.JsonNodeFactory.numberNode(Ljava/math/BigDecimal;)Lcom/fasterxml/jackson/databind/node/NumericNode;
    from com/mike/dataservice/DataServiceClient.java:93:in `toJsonObject'
    from com/mike/dataservice/DataServiceClient.java:66:in `getData'
    from java/lang/reflect/Method.java:498:in `invoke'
    from /Users/michael.dobrin/compilationsFromSource/logstash-5.6.7/logstash-5.6.7.freshinstall/vendor/local_gems/ecdbfdf7/logstash-filter-example-0.1.1/lib/logstash/filters/example.rb:49:in `filter'
    from /Users/michael.dobrin/compilationsFromSource/logstash-5.6.7/logstash-5.6.7.freshinstall/logstash-core/lib/logstash/filters/base.rb:145:in `do_filter'
    from /Users/michael.dobrin/compilationsFromSource/logstash-5.6.7/logstash-5.6.7.freshinstall/logstash-core/lib/logstash/filters/base.rb:164:in `multi_filter'
    from /Users/michael.dobrin/compilationsFromSource/logstash-5.6.7/logstash-5.6.7.freshinstall/logstash-core/lib/logstash/filters/base.rb:164:in `multi_filter'
    from org/jruby/RubyArray.java:1613:in `each'
    from /Users/michael.dobrin/compilationsFromSource/logstash-5.6.7/logstash-5.6.7.freshinstall/logstash-core/lib/logstash/filters/base.rb:161:in `multi_filter'
    from /Users/michael.dobrin/compilationsFromSource/logstash-5.6.7/logstash-5.6.7.freshinstall/logstash-core/lib/logstash/filters/base.rb:161:in `multi_filter'
    from /Users/michael.dobrin/compilationsFromSource/logstash-5.6.7/logstash-5.6.7.freshinstall/logstash-core/lib/logstash/filter_delegator.rb:46:in `multi_filter'
    from /Users/michael.dobrin/compilationsFromSource/logstash-5.6.7/logstash-5.6.7.freshinstall/logstash-core/lib/logstash/filter_delegator.rb:46:in `multi_filter'
    from (eval):42:in `filter_func'
    from /Users/michael.dobrin/compilationsFromSource/logstash-5.6.7/logstash-5.6.7.freshinstall/logstash-core/lib/logstash/pipeline.rb:398:in `filter_batch'
    from /Users/michael.dobrin/compilationsFromSource/logstash-5.6.7/logstash-5.6.7.freshinstall/logstash-core/lib/logstash/pipeline.rb:398:in `filter_batch'
    from /Users/michael.dobrin/compilationsFromSource/logstash-5.6.7/logstash-5.6.7.freshinstall/logstash-core/lib/logstash/pipeline.rb:379:in `worker_loop'
    from /Users/michael.dobrin/compilationsFromSource/logstash-5.6.7/logstash-5.6.7.freshinstall/logstash-core/lib/logstash/pipeline.rb:342:in `start_workers'
    from java/lang/Thread.java:748:in `run'

由於某些原因,無法識別numberNode()方法。 但是,即使使用Logstash在本地安裝的jruby實例,使用獨立的jruby程序運行jar時,我也沒有問題。 此外,該程序成功使用了我的jar文件中的某些方法... numberNode(Ljava / math / BigDecimal;)是唯一無法識別的方法。 為什么Logstash看不到這個?

最有可能的Logstash增加JsonNodeFactory到類路徑是與您的應用程序需要的版本不兼容。 該方法在jackson-databind-2.10附近重構。

您可以通過檢查從何處加載類來進行驗證。 例如System.out.println(JsonNodeFactory.class.getProtectionDomain().getCodeSource().getLocation());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM