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
>
>
>

Reply via email to