Небольшое число вызывает java.lang.ClassCastException, когда десериализованный объект snakeyaml передается фидеру Gatling. - PullRequest
1 голос
/ 16 марта 2019

Я запускаю симуляцию Гатлинга, которая использует числовой ввод из файла yml для подачи сценария.Все работает, когда мои числовые входы достаточно велики, чтобы их нельзя было проанализировать как экземпляры java.lang.Integer, но небольшие числовые значения, по-видимому, анализируются в целые числа и приводят к ClassCastException.

import java.io.FileInputStream
import io.gatling.core.Predef.{Feeder, Simulation}
import org.yaml.snakeyaml.Yaml
import org.yaml.snakeyaml.constructor.Constructor
import io.gatling.core.Predef.{scenario, _}
import scala.collection.JavaConversions

class TestClass extends Simulation {

    val yaml = new Yaml(new Constructor(classOf[Holder]))
    val holder = yaml.load(new FileInputStream("src/test/resources/data.yml")).asInstanceOf[Holder]
    scenario("sim").feed(getUserEmulationFeeder(holder))

    def getUserEmulationFeeder(holder:Holder) : Feeder[Long] = {
        val iterable = JavaConversions.iterableAsScalaIterable(holder.numbers)
        iterable.map(l => Map("userToEmulate" -> l)).iterator
    }

}

data.yml имеет следующие данные:

numbers:
  - 30687965369
  - 31415388869
  - 2

и десериализуется в:

import scala.beans.BeanProperty

class Holder {
    @BeanProperty var numbers = new java.util.ArrayList[Long]()
}

Удаление 2 исправляет ClassCastException.

Полная трассировка стека:

java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at io.gatling.mojo.MainWithArgsInFile.runMain(MainWithArgsInFile.java:50)
    at io.gatling.mojo.MainWithArgsInFile.main(MainWithArgsInFile.java:33)
Caused by: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
    at scala.runtime.BoxesRunTime.unboxToLong(BoxesRunTime.java:105)
    at com.mercurygate.TestClass$$anonfun$getUserEmulationFeeder$1.apply(TestClass.scala:25)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
    at scala.collection.Iterator$class.foreach(Iterator.scala:893)
    at scala.collection.AbstractIterator.foreach(Iterator.scala:1336)
    at scala.collection.IterableLike$class.foreach(IterableLike.scala:72)
    at scala.collection.AbstractIterable.foreach(Iterable.scala:54)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:234)
    at scala.collection.AbstractTraversable.map(Traversable.scala:104)
    at com.mercurygate.TestClass.getUserEmulationFeeder(TestClass.scala:25)
    at com.mercurygate.TestClass.<init>(TestClass.scala:21)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at java.lang.Class.newInstance(Class.java:442)
    at io.gatling.app.Gatling$.io$gatling$app$Gatling$$$anonfun$1(Gatling.scala:41)
    at io.gatling.app.Gatling$lambda$1.apply(Gatling.scala:41)
    at io.gatling.app.Gatling$lambda$1.apply(Gatling.scala:41)
    at io.gatling.app.Gatling.run(Gatling.scala:92)
    at io.gatling.app.Gatling.runIfNecessary(Gatling.scala:75)
    at io.gatling.app.Gatling.start(Gatling.scala:65)
    at io.gatling.app.Gatling$.start(Gatling.scala:57)
    at io.gatling.app.Gatling$.fromArgs(Gatling.scala:49)
    at io.gatling.app.Gatling$.main(Gatling.scala:43)
    at io.gatling.app.Gatling.main(Gatling.scala)
    ... 6 more

PS Извините за сложность примера.Только когда я комбинирую snakeyaml, gatling и небольшой ввод, я получаю ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...