Использование утверждения SAML в 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>

Утверждение 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.


person avinash chavan    schedule 28.12.2015    source источник


Ответы (2)


Утверждения SAML имеют сложный тип «AssertionType», но имя элемента - «Assertion». Элемент <Assertion>, созданный OpenSaml, должен быть в порядке.

Элемент определен в разделе 2.3.3 в спецификация ядра SAML.

person Anders Abel    schedule 28.12.2015
comment
Поскольку я использую элемент saml: Assertion в своем XSD, мой запрос требует, чтобы я установил объект AssertionType. Я попытался найти способ преобразовать объект утверждения в AssetionType. Или это позволяет мне установить объект утверждения там, где он ожидает AssertionType? - person avinash chavan; 29.12.2015
comment
Да, вы должны иметь возможность установить объект утверждения (с утверждением имени элемента), так как типом этого является AssertionType. Имя элемента не обязательно должно совпадать с типом элемента. - person Anders Abel; 06.01.2016
comment
Я не нашел способа установить Assertion внутри AssertionType и наоборот. Не могли бы вы уточнить или привести пример, если можно для большей ясности? - person avinash chavan; 06.01.2016
comment
Элемент <Assertion> относится к типу AssertionType. Вы должны иметь возможность просто использовать сгенерированный OpenSAML <Assertion> непосредственно в элементе <CreateRequest>. - person Anders Abel; 06.01.2016
comment
Мой сгенерированный класс из XSD требует объекта типа AssertionType для установщика утверждения. поэтому я получаю сообщение об ошибке с просьбой либо изменить установщик на тип AssertionType, либо привести утверждение к AssertionType. - person avinash chavan; 06.01.2016
comment
Похоже, у вас проблема с классом типа AssertionType, созданным из XSD, и OpenSAML, создающим другой класс с тем же именем. Вам нужно будет немного поработать, чтобы соединить эти двое. - person Anders Abel; 06.01.2016
comment
есть ли способ иметь утверждение SAML внутри тела запроса (SOAP)? Если да, то как мне это сделать? - person avinash chavan; 06.01.2016

Попробуйте использовать внешний файл привязки при создании классов из XSD с помощью JAXB. См. Эту тему (я думаю, второй ответ - это то, что вы ищете): JAXB: Как изменить имена классов, сгенерированных XJC, если тип attr указан в XSD?

person Baderous    schedule 06.01.2016
comment
Есть ли способ преобразовать (неупорядочить) XML в сгенерированные классы Java? Я использую плагин wsdl2code для Axis2. - person avinash chavan; 13.01.2016
comment
Я попытался сгенерировать классы Java из saml-schema-assertion-2.0.xsd, используя xjc (JAXB) с настраиваемой привязкой для каждого отдельного класса, и на самом деле я смог сгенерировать классы без суффикса Type. Затем я попытался использовать OpenSAML 2.6.4 для создания утверждения с использованием этих классов, но оказалось, что это невозможно, потому что, хотя и имеют одно и то же имя, они принадлежат к разным типам. Думаю, вам нужно составить карту. - person Baderous; 15.01.2016