![](/img/trans.png)
[英]java.lang.NoSuchMethodError when running SoapUIMockServiceRunner
[英]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.