X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=saml%2Fsaml2%2Fcore%2FProtocols.h;h=42dc4631ad8d3dbdf04a54764f75ac93e2390120;hb=be7d27b794875ca21dfa0f0c0a02750b61f5f127;hp=029bb8ae1325feae4b50a105ed69b41a442bca1e;hpb=780b2228aa2d172f2055f49047c34a810a1a5877;p=shibboleth%2Fopensaml2.git diff --git a/saml/saml2/core/Protocols.h b/saml/saml2/core/Protocols.h index 029bb8a..42dc463 100644 --- a/saml/saml2/core/Protocols.h +++ b/saml/saml2/core/Protocols.h @@ -37,6 +37,8 @@ namespace opensaml { */ namespace saml2p { + //TODO sync C++ and Java class/interface names, e.g. -Type or no -Type, etc + DECL_XMLOBJECT_SIMPLE(SAML_API,Artifact,Artifact,SAML 2.0 Artifact element); DECL_XMLOBJECT_SIMPLE(SAML_API,GetComplete,GetComplete,SAML 2.0 GetComplete element); DECL_XMLOBJECT_SIMPLE(SAML_API,NewID,NewID,SAML 2.0 NewID element); @@ -90,10 +92,12 @@ namespace opensaml { DECL_DATETIME_ATTRIB(IssueInstant,ISSUEINSTANT); DECL_STRING_ATTRIB(Destination,DESTINATION); DECL_STRING_ATTRIB(Consent,CONSENT); + DECL_TYPED_FOREIGN_CHILD(Issuer,saml2); DECL_TYPED_FOREIGN_CHILD(Signature,xmlsignature); DECL_TYPED_CHILD(Extensions); DECL_TYPED_CHILD(Status); + /** StatusResponseType local name */ static const XMLCh TYPE_NAME[]; END_XMLOBJECT; @@ -165,7 +169,7 @@ namespace opensaml { END_XMLOBJECT; BEGIN_XMLOBJECT(SAML_API,IDPList,xmltooling::XMLObject,SAML 2.0 IDPList element); - DECL_TYPED_CHILD(IDPEntry); + DECL_TYPED_CHILDREN(IDPEntry); DECL_TYPED_CHILD(GetComplete); /** IDPListType local name */ static const XMLCh TYPE_NAME[]; @@ -177,6 +181,8 @@ namespace opensaml { DECL_TYPED_CHILDREN(RequesterID); /** ScopingType local name */ static const XMLCh TYPE_NAME[]; + /** ProxyCount value to express no restriction*/ + static const int NO_PROXY_COUNT; END_XMLOBJECT; BEGIN_XMLOBJECT(SAML_API,AuthnRequest,Request,SAML 2.0 AuthnRequest element); @@ -211,6 +217,7 @@ namespace opensaml { END_XMLOBJECT; BEGIN_XMLOBJECT(SAML_API,ArtifactResponse,StatusResponse,SAML 2.0 ArtifactResponse element); + DECL_XMLOBJECT_CHILD(Payload); /** ArtifiactResponseType local name */ static const XMLCh TYPE_NAME[]; END_XMLOBJECT; @@ -220,7 +227,7 @@ namespace opensaml { static const XMLCh TYPE_NAME[]; END_XMLOBJECT; - BEGIN_XMLOBJECT(SAML_API,NewEncryptedID,saml2::EncryptedElementType,SAML 2.0 EncryptedNewID element); + BEGIN_XMLOBJECT(SAML_API,NewEncryptedID,saml2::EncryptedElementType,SAML 2.0 NewEncryptedID element); END_XMLOBJECT; BEGIN_XMLOBJECT(SAML_API,ManageNameIDRequest,Request,SAML 2.0 ManageNameIDRequest element); @@ -266,8 +273,6 @@ namespace opensaml { static const XMLCh TYPE_NAME[]; END_XMLOBJECT; - //TODO custom builders, if any - // Builders DECL_SAML2POBJECTBUILDER(Artifact); DECL_SAML2POBJECTBUILDER(ArtifactResolve); @@ -301,11 +306,46 @@ namespace opensaml { DECL_SAML2POBJECTBUILDER(StatusMessage); DECL_SAML2POBJECTBUILDER(Terminate); + // + // Custom builders + // + + /** + * Builder for StatusResponse objects. + * + * This is customized to force the element name to be specified. + */ + class SAML_API StatusResponseBuilder : public xmltooling::XMLObjectBuilder { + public: + virtual ~StatusResponseBuilder() {} + /** Builder that allows element/type override. */ + virtual StatusResponse* buildObject( + const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL, const xmltooling::QName* schemaType=NULL + ) const; + + /** Singleton builder. */ + static StatusResponse* buildStatusResponse(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL) { + const StatusResponseBuilder* b = dynamic_cast( + XMLObjectBuilder::getBuilder(xmltooling::QName(SAMLConstants::SAML20P_NS,StatusResponse::TYPE_NAME)) + ); + if (b) { + xmltooling::QName schemaType(SAMLConstants::SAML20P_NS,StatusResponse::TYPE_NAME,SAMLConstants::SAML20P_PREFIX); + return b->buildObject(nsURI, localName, prefix, &schemaType); + } + throw xmltooling::XMLObjectException("Unable to obtain typed builder for StatusResponse."); + } + }; + /** - * Registers builders and validators for Protocol classes into the runtime. + * Registers builders and validators for SAML 2.0 Protocol classes into the runtime. */ void SAML_API registerProtocolClasses(); + + /** + * Validator suite for SAML 2.0 Protocol schema validation. + */ + extern SAML_API xmltooling::ValidatorSuite ProtocolSchemaValidators; }; };