Использование 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?

Другие вопросы по тегам