Can't you do something like this ala mockito: @InjectMocks private KinesisInsertBolt underTest = new KinesisInsertBolt();
@Mock private AmazonKinesisClient amazonKinesisClient; On Wed, Aug 31, 2016 at 9:50 PM, Noppanit Charassinvichai < [email protected]> wrote: > I'm writing a Bolt where a bolt will send data to Kinesis. The library is > AmazonClient. If I initialize AmazonClient outside of prepare() method I > will get this error > > *16:53:32.561* [stderr]Exception in thread "main" java.lang.RuntimeException: > java.io.NotSerializableException: > com.amazonaws.services.kinesis.AmazonKinesisClient*16:53:32.561* [stderr] > at backtype.storm.utils.Utils.javaSerialize(Utils.java:109)*16:53:32.561* > [stderr] at > backtype.storm.topology.TopologyBuilder.createTopology(TopologyBuilder.java:107)*16:53:32.561* > [stderr] at > io.conde.data.SparrowFirehoseTopology.main(SparrowFirehoseTopology.java:93)*16:53:32.561* > [stderr]Caused by: java.io.NotSerializableException: > com.amazonaws.services.kinesis.AmazonKinesisClient*16:53:32.561* [stderr] > at > java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)*16:53:32.561* > [stderr] at > java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)*16:53:32.562* > [stderr] at > java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)*16:53:32.562* > [stderr] at > java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)*16:53:32.562* > [stderr] at > java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)*16:53:32.562* > [stderr] at > java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)*16:53:32.562* > [stderr] at backtype.storm.utils.Utils.javaSerialize(Utils.java:105) > > > > So I have to do it like this to not get the Exception > > @Override > public void prepare(Map map, TopologyContext topologyContext, OutputCollector > outputCollector) { > this.amazonKinesisClient = new AmazonKinesisClient(new > CustomCredentialsProviderChain(), new ClientConfiguration()); > this.random = new Random(); > this.outputCollector = outputCollector; > this.decoder = Charset.forName("UTF-8").newDecoder(); > } > > But then I won't be able to inject that and unit test that properly. How > do I overcome this? I'm using Storm 0.10 > > >
