package org.oasis.names.tc.saml.assertion; import gov.nih.nci.cagrid.opensaml.SAMLAssertion; import javax.xml.bind.annotation.adapters.XmlAdapter; import org.cagrid.core.common.JAXBUtils; import org.cagrid.gaards.saml.encoding.SAMLUtils; import org.w3c.dom.Element; public class AssertionTypeAdapter extends XmlAdapter<Object, AssertionType> { public AssertionTypeAdapter() { super(); System.setProperty(SAMLUtils.XMLSEC_IGNORE_LINE_BREAK, Boolean.FALSE.toString()); } @Override public Element marshal(AssertionType assertion) throws Exception { SAMLAssertion saml = assertion.getSamlAssertion(); Element samlAssertionToDOM = (Element) saml.toDOM(); // System.out.println("FROM DOM:" + XMLUtils.toString(samlAssertionToDOM)); // System.out.println("FROM String:" + saml.toString()); return samlAssertionToDOM; } @Override public AssertionType unmarshal(Object assertionElement) throws Exception { SAMLUtils.canonicalizeAssertion((Element) assertionElement); // Element assertionElement = JAXBUtils.marshalToElement(assertion, SAMLUtils.ASSERTION_QNAME); // SAMLUtils.canonicalizeAssertion(assertionElement); SAMLAssertion samlAssertion = new SAMLAssertion((Element) assertionElement); // Must regenerate internal DOM! samlAssertion.toString(); // SAMLAssertion domToSAMLAssertion = SAMLUtils.domToSAMLAssertion((Element) assertionElement); AssertionType assertion = JAXBUtils.unmarshal(AssertionType.class, samlAssertion.toString()); assertion.setSamlAssertion(samlAssertion); return assertion; } }