/*
- * Copyright 2001-2007 Internet2
+ * Copyright 2001-2009 Internet2
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
#include <xmltooling/io/HTTPRequest.h>
#include <xmltooling/soap/SOAP.h>
#include <xmltooling/util/NDC.h>
+#include <xmltooling/util/Predicates.h>
#include <xmltooling/validation/ValidatorSuite.h>
using namespace opensaml::saml2p;
const char* data = genericRequest.getRequestBody();
if (!data)
throw BindingException("PAOS message had an empty request body.");
+ log.debug("received message:\n%s", data);
istringstream is(data);
// Parse and bind the document into an XMLObject.
if (!env)
throw BindingException("Decoded message was not a SOAP 1.1 Envelope.");
- if (!policy.getValidating())
- SchemaValidators.validate(env);
+ SchemaValidators.validate(env);
Body* body = env->getBody();
if (body && body->hasChildren()) {
// Check for RelayState header.
if (env->getHeader()) {
+ static const XMLCh RelayState[] = UNICODE_LITERAL_10(R,e,l,a,y,S,t,a,t,e);
const vector<XMLObject*>& blocks = const_cast<const Header*>(env->getHeader())->getUnknownXMLObjects();
- for (vector<XMLObject*>::const_iterator h = blocks.begin(); h != blocks.end(); ++h) {
- static const XMLCh RelayState[] = UNICODE_LITERAL_10(R,e,l,a,y,S,t,a,t,e);
- if (XMLString::equals((*h)->getElementQName().getLocalPart(), RelayState) &&
- XMLString::equals((*h)->getElementQName().getNamespaceURI(), samlconstants::SAML20ECP_NS)) {
- const ElementProxy* ep = dynamic_cast<const ElementProxy*>(*h);
- if (ep) {
- auto_ptr_char rs(ep->getTextContent());
- if (rs.get()) {
- relayState = rs.get();
- break;
- }
- }
- }
+ vector<XMLObject*>::const_iterator h =
+ find_if(blocks.begin(), blocks.end(), hasQName(xmltooling::QName(samlconstants::SAML20ECP_NS, RelayState)));
+ const ElementProxy* ep = dynamic_cast<const ElementProxy*>(h != blocks.end() ? *h : NULL);
+ if (ep) {
+ auto_ptr_char rs(ep->getTextContent());
+ if (rs.get())
+ relayState = rs.get();
}
}