Ya, just two months back i have worked on Bouncy castle to decode CDRS which of 3GPP stranded encoded file. Currently i am good in decoding and if any issues on decoding i can give more example and i can solve it easily solve it.
But for your question i can suggest some points and if you have any question pleas add comment. It not only help for you it can help for new bees who start with encode / decode process.
a) You did right API choice (Bouncy Castle) for encoding CDRS files
b) You can go for paid version of encode / decode APIs but it is too expansive
c) I have found 3 paid APIs which gives good and expected results, those are
1) [OSS Nokalva][1]
2) Obj-Sys
3) unigone
d) For me Bouncy castle gave 100% result then paid APIs even though they work well and good. If you want to use Bouncy castle then you need to put some more effort to work on encoding, So Bouncy castle is an API which support basic and some advanced parser, to do any encoding / decoding you need to write the java classes as per your ASN.1 syntax specification and so on.. I can write the steps but it will be too long so end of this answer i am giving you a link which explain it better. click on this link and download bcprov-jdk15on-154.tar.gz
file.
e) Unzip the package you downloaded and go to bcprov-jdk15on-154\bcprov-jdk15on-154\src\org\bouncycastle\asn1\test
you will find N number of examples to encode/decode CDRs according to the ASN.1 syntax specification
f) If you want to understand with very simple example then go through this link you can easily do your job
Still if you find difficult to understand then write a comment i will try to help my best.