У меня есть операция веб-службы, при которой я буду получать утверждение SAML как часть тела запроса. У меня следующий XSD:
<xsd:element name="CreateRequest">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="info" type="SomeRequestObj"/>
<xsd:element ref="saml:Assertion" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
Утверждение saml: относится к: <xsd:import namespace="urn:oasis:names:tc:SAML:2.0:assertion"schemaLocation="../samlv2_0/saml-schema-assertion-2.0.xsd"/>
Эта схема SAML скопирована из SAML 2.0. Это генерирует классы с именем * Type.java
. И мне сложно создать для этого модульный тест (который представляет собой отдельное приложение с пользовательским интерфейсом).
Для моего запроса требуется элемент SAML AssertionType в теле запроса. Итак, я не могу использовать OpneSaml для его генерации, поскольку он дает мне объект утверждения SAML, а не AssertionType.
Я попытался создать объект AssertionType вручную, но мне это трудно сделать.
Есть ли способ использовать OpenSaml для создания этого?
Как я вижу, xml будет таким же, как и я, если я просто использую OpenSaml для создания объекта Assertion. Есть ли способ упростить это?
РЕДАКТИРОВАТЬ: добавлен XSD-фрагмент утверждения
<element name="Assertion" type="saml:AssertionType"/>
<complexType name="AssertionType">
<sequence>
<element ref="saml:Issuer"/>
<element ref="ds:Signature" minOccurs="0"/>
<element ref="saml:Subject" minOccurs="0"/>
<element ref="saml:Conditions" minOccurs="0"/>
<element ref="saml:Advice" minOccurs="0"/>
<choice minOccurs="0" maxOccurs="unbounded">
<element ref="saml:Statement"/>
<element ref="saml:AuthnStatement"/>
<element ref="saml:AuthzDecisionStatement"/>
<element ref="saml:AttributeStatement"/>
</choice>
</sequence>
<attribute name="Version" type="string" use="required"/>
<attribute name="ID" type="ID" use="required"/>
<attribute name="IssueInstant" type="dateTime" use="required"/>
</complexType>
Это создает объект AssertionType.