View Javadoc
1   /*
2    * Copyright 2018 the original author or authors.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *         http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package org.openehealth.ipf.commons.ihe.xua;
17  
18  import org.opensaml.core.xml.XMLObject;
19  import org.opensaml.core.xml.io.UnmarshallingException;
20  import org.opensaml.saml.saml2.core.AttributeStatement;
21  import org.opensaml.saml.saml2.core.SubjectConfirmation;
22  import org.opensaml.saml.saml2.core.impl.AttributeStatementBuilder;
23  import org.opensaml.saml.saml2.core.impl.AttributeStatementUnmarshaller;
24  
25  import java.util.List;
26  
27  /**
28   * A dirty workaround to convert an "unknown XML object" contained in a
29   * {@link SubjectConfirmation} into a proper {@link AttributeStatement} instance.
30   *
31   * @author Dmytro Rud
32   */
33  public class AttributeStatementExtractor extends AttributeStatementUnmarshaller {
34  
35      public AttributeStatement extractAttributeStatement(SubjectConfirmation subjectConfirmation) {
36          AttributeStatement attributeStatement = new AttributeStatementBuilder().buildObject();
37          List<XMLObject> xmlObjectList = subjectConfirmation.getSubjectConfirmationData().getUnknownXMLObjects(AttributeStatement.DEFAULT_ELEMENT_NAME);
38          for (XMLObject xmlObject : xmlObjectList) {
39              for (XMLObject child : xmlObject.getOrderedChildren()) {
40                  try {
41                      child.detach();
42                      processChildElement(attributeStatement, child);
43                  } catch (UnmarshallingException e) {
44                      // do nothing
45                  }
46              }
47          }
48          return attributeStatement;
49      }
50  
51  }