Frage

Ich habe meinen Kopf gegen diesen für eine Weile zu schlagen, und fange an, Fortschritte zu machen. Allerdings habe ich in einige Schwierigkeiten lief eine String-Darstellung eines SAML 2 Assertion (in XML) zu einem Assertion-Objekt umgewandelt wird.

Es sieht aus wie ich eine gültige org.w3c.dom.Document mit entsprechenden Daten zu erhalten, und ich scheine eine gültige SAMLObjectBuilder<Assertion> vom Erbauer Fabrik zu bekommen, aber wenn ich versuche, sie zusammen zu stellen, sehe ich nur eine leere Assertion; Betreff, Aussteller, Ausgabezeit und so weiter sind alle null trotz ihnen klar Satz in XML zu sein.

Hat jemand sehen, was ich tue, falsch, und kann eine Lösung vorschlagen?

Document doc = loadXMLFromString(saml);

XMLObjectBuilderFactory builderFactory = Configuration.getBuilderFactory();

SAMLObjectBuilder<Assertion> assertionBuilder =
  (SAMLObjectBuilder<Assertion>)
  builderFactory.getBuilder(Assertion.DEFAULT_ELEMENT_NAME);

Assertion assertion = assertionBuilder.buildObject(doc.getDocumentElement());

String nameID = assertion.getSubject().getNameID().getValue();

Am NameID Zuordnung assertion.getSubject() kehrt null, den Rest des Ausdrucks versagen.

Das Beispiel verwende ich die volle XML aus SWTR-saml-Tech-Überblick-2.0-draft-03, Seite 10.

Die Funktion loadXMLFromString() oben ist vor allem von In Java, wie kann ich Parsen von XML als String?

War es hilfreich?

Lösung

Falls jemand anderes das gleiche Problem konfrontiert, und läuft über diese, hier ist die Antwort.

https://wiki.shibboleth.net/confluence/display/OpenSAML/OSTwoUsrManJavaCreateFromXML

Nehmen Sie einfach das unmarshalling Beispiel:

String inCommonMDFile = "/data/org/opensaml/saml2/metadata/InCommon-metadata.xml";

// Initialize the library
DefaultBootstrap.bootstrap(); 

// Get parser pool manager
BasicParserPool ppMgr = new BasicParserPool();
ppMgr.setNamespaceAware(true);

// Parse metadata file
InputStream in = MetadataTest.class.getResourceAsStream(inCommonMDFile);
Document inCommonMDDoc = ppMgr.parse(in);
Element metadataRoot = inCommonMDDoc.getDocumentElement();

// Get apropriate unmarshaller
UnmarshallerFactory unmarshallerFactory = Configuration.getUnmarshallerFactory();
Unmarshaller unmarshaller = unmarshallerFactory.getUnmarshaller(metadataRoot);

// Unmarshall using the document root element, an EntitiesDescriptor in this case
EntitiesDescriptor inCommonMD = (EntitiesDescriptor) unmarshaller.unmarshall(metadataRoot);

ersetzen Sie dann Ihre Dokumentinstanz für inCommonMDDoc und Blick auf das Ergebnis des letzten unmarshall() Anruf. Beachten Sie, dass unmarshall() kehrt ein Object, die Sie Guss in den entsprechenden Typ benötigen. . Hinweis: Sie können die Verwendung typeof verwenden, wenn Sie nicht sicher sind, welche Art es ist, aber achten Sie auf Vererbung

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top