code: public final Object getObject(Key key, String provider)
          throws IOException, ClassNotFoundException, NoSuchAlgorithmException,
              NoSuchProviderException, InvalidKeyException
      {
          if (key == null) {
              throw new NullPointerException("key is null");
          }
          if (provider == null || provider.length() == 0) {
              throw new IllegalArgumentException("missing provider");
          }
  
          try {
              return unseal(key, provider);
          } catch (IllegalBlockSizeException | BadPaddingException ex) {
              throw new InvalidKeyException(ex.getMessage());
          }
      }
docs: Retrieves the original (encapsulated) object.
  
  <p>This method creates a cipher for the algorithm that had been used in
  the sealing operation, using an implementation of that algorithm from
  the given <code>provider</code>.
  The Cipher object is initialized for decryption, using the given
  <code>key</code> and the parameters (if any) that had been used in the
  sealing operation.
  
  <p>The encapsulated object is unsealed and de-serialized, before it is
  returned.
  
  @param key the key used to unseal the object.
  @param provider the name of the provider of the algorithm to unseal
  the object.
  
  @return the original object.
  
  @exception IllegalArgumentException if the given provider is null
  or empty.
  @exception IOException if an error occurs during de-serialiazation.
  @exception ClassNotFoundException if an error occurs during
  de-serialiazation.
  @exception NoSuchAlgorithmException if the algorithm to unseal the
  object is not available.
  @exception NoSuchProviderException if the given provider is not
  configured.
  @exception InvalidKeyException if the given key cannot be used to unseal
  the object (e.g., it has the wrong algorithm).
  @exception NullPointerException if <code>key</code> is null.