2011-01-12 12 views
9

Bir süredir başımı dayak yedim ve ilerlemeye başlıyorum. Ancak, bir Assertion nesnesine bir SAML 2 Assertion (XML) dizgesel gösterimini dönüştürmede bazı sıkıntılarla karşılaştım.Java'da verilen XML'den OpenSAML Assertion Oluşturma

Ben uygun verilerle geçerli org.w3c.dom.Document alıyorum gibi görünüyor ve ben oluşturucu fabrikadan geçerli SAMLObjectBuilder<Assertion> almak gibi görünmektedir, ama bir araya getirdim denediğimde olsun tüm boş Onaylama olduğu; Konu, ihraççı, yayınlanma süresi vb., XML'de açıkça ayarlanmış olmasına rağmen, null.

Yanlış yaptığım şeyi gören var mı, bir çözüm önerebilir mi? İfade kalan başarısız NameID atama de

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(); 

, assertion.getSubject() döner null.

kullanıyorum örnek SSTC-saml teknoloji-bakış-2,0-taslak-03, sayfa 10.

yukarıdaki fonksiyon loadXMLFromString() çoğunlukla durumda In Java, how do I parse XML as a String instead of a file?

+0

Soru adını burada '[SOLVED]' ile düzenlemiyoruz. Cevabınızı aldıysanız, lütfen solundaki yeşil işaretle işaretleyin - sorunuz yalnızca "çözüldü" olarak işaretlenecektir. – marcog

+0

@marcog Bunu ilk başta denedim, ancak 48 saatlik ödemesiz sürenin bitiminden önce kabul edilen kendi cevabımı işaretleyemedim ve bir çözüm için yaptığım tüm aramalarla ilgili soruyu bırakacak kadar alakalı olduğunu düşündüm onu silmek yerine. –

+1

Kendi yanıtınızı gönderebilmeniz harika. Çok fazla insan sadece yürüyüp gidiyor. Bunu yapmak için hem soru sormak hem de cevaplamak için +1! – marcog

cevap

9

ödünç tam XML Bir başkası aynı problemle karşı karşıyadır ve bunun karşısında çalışır, işte cevaptır.

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

Sadece unmarshalling örneği inceleyelim:
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); 

Ardından inCommonMDDoc için Belge örneği yerine ve son unmarshall() çağrısının sonucu bak. unmarshall()'un uygun türde yayınlamanız gereken bir Object döndürdüğünü unutmayın. İpucu: ne tür olduğundan emin değilseniz, typeof kullanın, ancak mirasa dikkat edin.

+0

Aynı kesin sorun, ancak noktaları birleştirmiyorum. Unshashall sonucu bir EntitiesDescriptor. Bunun dışında bir saml nesnesi nasıl kurabilirim? – stu

+1

@stu: Ummarshall sonucu kök belge öğenizle aynı türde bir nesnedir. Örnekte bir EntitiesDescriptor'dur, ancak sizin durumunuzda bir Assertion gibi başka bir SAML Nesnesi olacaktır. –

+0

yea teşekkürler, sonunda, doğru nesne ve voila için döküm, bu çözdüm. Her şeyin işe yaradığını hayrete düşürmüştüm. – stu