code: public void updateKeys(XMPPConnection connection) throws InterruptedException, SmackException.NotConnectedException,
              SmackException.NoResponseException, XMPPException.XMPPErrorException, PubSubException.NotALeafNodeException,
              PubSubException.NotAPubSubNodeException, IOException {
          PublicKeysListElement metadata = OpenPgpPubSubUtil.fetchPubkeysList(connection, getJid());
          if (metadata == null) {
              return;
          }
  
          updateKeys(connection, metadata);
      }
docs: Update the contacts keys by consulting the users PubSub nodes.
  This method fetches the users metadata node and then tries to fetch any announced keys.
  
  @param connection our {@link XMPPConnection}.
  
  @throws InterruptedException In case the thread gets interrupted.
  @throws SmackException.NotConnectedException in case the connection is not connected.
  @throws SmackException.NoResponseException in case the server doesn't respond.
  @throws XMPPException.XMPPErrorException in case of an XMPP protocol error.
  @throws PubSubException.NotALeafNodeException in case the metadata node is not a {@link LeafNode}.
  @throws PubSubException.NotAPubSubNodeException in case the metadata node is not a PubSub node.
  @throws IOException IO is brittle.