Faits: A. Dès le printemps de 2001, X._ SA (ci-après: X._ SA) et une société liée à Y._ SA (ci-après: Y._ SA) ont noué des relations d'affaires concernant la gestion et l'exploitation d'un hôtel à Marrakech. Un contrat a été conclu le 22 mai 2001. X._ SA s'est chargée de l'exploitation de l'établissement et elle a notamment promis, pour l'année 2002, un rendement minimum à sa cocontractante. Elle a souscrit deux lettres de change le 17 et le 18 octobre 2002. X._ SA a par la suite refusé ses versements au motif que des « cas de force majeure » avaient entravé l'exploitation de l'hôtel, que sa cocontractante n'avait pas exécuté les travaux de rénovation pourtant convenus et qu'elle n'avait pas non plus exécuté certains paiements. X._ SA a résilié le contrat conclu en mai 2001. B. Le 24 octobre 2003, Y._ SA a saisi le Tribunal de commerce de Marrakech d'une requête d'injonction de payer fondée sur les lettres de change. X._ SA devait être condamnée à payer 22'000'100 dirhams marocains. Le tribunal a donné suite à la requête le 27 octobre, sans que la partie recherchée eût reçu l'occasion de prendre position. X._ SA s'est pourvue devant la Cour d'appel de commerce. Elle a fait valoir qu'elle n'avait pas de domicile commercial au Maroc, que les lettres de change étaient des documents de complaisance, qu'elles n'avaient pas été signées par un représentant autorisé et que Y._ SA n'avait pas qualité pour agir. La Cour a rejeté ces moyens et confirmé le prononcé du Tribunal de commerce par arrêt du 6 juillet 2004. Le 17 mai 2006, la Cour suprême de Rabat a rejeté le pourvoi en cassation de X._ SA. C. A Genève, celle-ci a reçu notification d'un commandement de payer au montant de 3'094'247 fr., contre-valeur de 22'000'100 dirhams, avec intérêts au taux de 6% par an dès le 18 octobre 2002. Elle a fait opposition. Par jugement du 29 juin 2006, sur requête de Y._ SA, le Tribunal de première instance du canton de Genève a reconnu et déclaré exécutoire l'arrêt de la Cour d'appel de commerce du 6 juillet 2004, et il a donné mainlevée définitive de l'opposition au commandement de payer. La Cour de justice a rejeté l'appel de l'adverse partie le 28 septembre 2006; le Tribunal fédéral a rejeté son recours de droit public le 17 janvier 2007 (arrêt 5P.460/2006). Menacée de faillite, X._ SA a versé à l'office des poursuites 3'945'068 fr.85 le 3 mai 2007; elle a aussitôt obtenu, semble-t-il, le séquestre de ce montant. D. Le 2 mai 2007, soit la veille, X._ SA avait intenté à Y._ SA une action en répétition de l'indu devant le Tribunal de première instance. La défenderesse devait être condamnée à rembourser 3'945'068 fr.85 avec intérêts au taux de 5% par an dès ce même jour. Préalablement à toute autre défense, Y._ SA a excipé de l'autorité de chose jugée et conclu à l'irrecevabilité de la demande; elle soutenait que la Cour d'appel de commerce avait résolu le litige à l'origine de la poursuite pour dettes. La demanderesse a conclu au rejet de l'exception; elle a produit un avis de droit concernant l'objet et la portée de la décision prise par la Cour d'appel de commerce. Par un premier jugement, le tribunal a rejeté l'exception et accueilli l'action. La Cour de justice a annulé cette décision le 24 septembre 2009; elle a renvoyé la cause au tribunal pour poursuivre l'instruction et établir la teneur du droit étranger. Contre son arrêt, X._ SA a introduit un recours en matière civile que le Tribunal fédéral a déclaré irrecevable le 8 janvier 2010 (arrêt 4A_533/2009). X._ SA a produit un deuxième avis de droit; Y._ SA a elle aussi produit une documentation juridique. Le tribunal a chargé l'Institut suisse de droit comparé d'établir une expertise. Le rapport de l'Institut est daté du 2 novembre 2010. La demanderesse a produit encore deux autres avis de droit tendant à invalider les conclusions du rapport. Elle a requis une expertise supplémentaire qui devrait être confiée à un « spécialiste indépendant en matière de procédure civile marocaine ». Le tribunal a rejeté cette réquisition de preuve par une ordonnance du 11 février 2011 contre laquelle X._ SA a introduit un recours. Le tribunal a rendu un deuxième jugement le 1er juin 2011; il a accueilli l'exception de chose jugée et déclaré la demande irrecevable. X._ SA a appelé à la Cour de justice, laquelle a statué le 9 mars 2012. Elle a constaté que le recours dirigé contre l'ordonnance du 11 février 2011 n'avait plus d'objet et elle a confirmé le jugement déclarant la demande irrecevable. E. Agissant par la voie du recours en matière civile, X._ SA requiert le Tribunal fédéral de réformer l'arrêt de la Cour de justice en ce sens que l'exception de chose jugée soit rejetée et que la demande en répétition de l'indu soit déclarée recevable. Des conclusions subsidiaires tendent au renvoi de la cause à la Cour de justice pour recueillir une expertise complémentaire, à confier à un « spécialiste indépendant en matière de procédure civile marocaine » et destinée à « clarifier » le rapport de l'Institut suisse de droit comparé, puis statuer à nouveau. Y._ SA conclut au rejet du recours. 