Your code is good. Although setDefaultComponents() call may be omitted.
The reason why you do not see default value in encoding is that a component marked DEFAULT may not be necessarily encoded, even if the sending application provided the same value for this component as the default value is (it is a sender’s option according to X.208).
Actually, there is no difference on the receiving end whether you include the defaulted value in encoding or just omit it. In the later case receiving end would plug-in its default. On the bright side, the amount of traffic is reduced.