Given that there is a DSA public key, declared as follows, and that it is an instance of DSAPublicKeyImpl, we can derive and calculate the DSA private key.

PublicKey pubKey...

DSAPublicKeyImpl dsakey = (DSAPublicKeyImpl) pubKey;
DSAParams dsaparams = dsakey.getParams();
BigInteger G = dsaparams.getG();
BigInteger P = dsaparams.getP();
BigInteger Q = dsaparams.getQ();

And after calculating X, where X is declared as BigInteger X...

Thus, we can calculate the DSA private key as follows:

DSAPrivateKey dsapriv = new DSAPrivateKey(X, P, Q, G);