Использование SAML Assertion в XSD
У меня есть операция веб-службы, где я получу подтверждение 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>
Самл: утверждение относится к:<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 Assertion, а не 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.
2 ответа
Утверждения SAML имеют сложный тип "AssertionType", но имя элемента - "Assertion". <Assertion>
элемент, сгенерированный OpenSaml, должен быть просто в порядке.
Элемент определен в разделе 2.3.3 основной спецификации SAML.
Попробуйте использовать внешний файл привязки при создании классов из XSD с помощью JAXB. См. Эту тему (я думаю, что второй ответ - это то, что вы ищете): JAXB: Как изменить имена классов, сгенерированных XJC, когда тип attr указан в XSD?