KeyInfoBuilder in OpenSAML 3
Stephen.CTR.Chappell at faa.gov
Stephen.CTR.Chappell at faa.gov
Thu Jun 11 13:49:54 EDT 2015
Brent -
Thanx for the thorough response, I appreciate it!
Stephen W. Chappell
From: dev [mailto:dev-bounces at shibboleth.net] On Behalf Of Brent Putman
Sent: Thursday, June 11, 2015 1:39 PM
To: dev at shibboleth.net
Subject: Re: KeyInfoBuilder in OpenSAML 3
Sorry if I was mis-interpreting what you are originally doing. The other thread poster was literally new()-ing a AuthnRequestBuilder() or something, which is bad because as Scott said it's an implementation class. Casting to KeyInfoBuilder is different, but still discouraged for the same reasons.
Well that makes sense I think. So, more like this then?
XMLObjectBuilder<?> kiBuilder =
builderFactory.getBuilder(KeyInfo.DEFAULT_ELEMENT_NAME);
ki = (KeyInfo) kiBuilder.buildObject(KeyInfo.DEFAULT_ELEMENT_NAME);
Yes, or cast to the SAMLObjectBuilder specialization, but same difference.
Almost, but have to be careful. The stuff in opensaml-xmlsec-impl doesn't know anything about SAML. So the builders don't implement SAMLObjectBuilder. For example, the signature-oriented ones implement XMLSignatureBuilder, the encryption ones are XMLEncryptionBuilder. What those interfaces (along with SAMLObjectBuilder) add is the no-arg buildObject() method. They're all sub-interfaces of XMLObjectBuilder, which doesn't have such a method, only methods which take element and/or type QNames (or the constituent inputs). There was a reason why Chad designed things that way, although off-hand I don't remember.
So the real answer to your original question is either:
1) cast the builder you get to XMLObjectBuilder<KeyInfo>. Then you have to call buildObject(KeyInfo.DEFAULT_ELEMENT_NAME).
2) cast the builder to XMLSignatureBuilder<KeyInfo>. Then you can just call buildObject().
But I wouldn't have thought that based on the example Brent referenced ...
// Get the assertion builder based on the assertion element name
SAMLObjectBuilder<Assertion> builder = (SAMLObjectBuilder<Assertion>)
builderFactory.getBuilder(Assertion.DEFAULT_ELEMENT_NAME);
// Create the assertion
Assertion assertion = builder.buildObject();
Yeah, I guess those examples in the wiki docs are really targeting SAMLObjects specifically. Per the above, they're not completely accurate for the non-SAML schemas. The concepts are the same, just not some of the specifics.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://shibboleth.net/pipermail/dev/attachments/20150611/54499062/attachment.html>
More information about the dev
mailing list