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