我有一个webservice操作,其中请求正文的一部分是SAML Assertion。 我有以下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
的类。
我很难为此创建一个单元测试(这是一个带有UI的独立应用程序)。
我的请求需要在请求正文中包含一个SAML AssertionType元素。
因此,我不能使用OpenSaml来生成它,因为它会给我一个SAML Assertion对象而不是AssertionType。
我尝试手动生成AssertionType对象,但我很难做到这一点。
有没有办法使用OpenSaml来生成这个对象呢?
因为我看到的XML将与我只使用OpenSaml生成Assertion对象时得到的XML相同。
有没有简化这个过程的方法?
编辑:添加了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对象。
<Assertion>
元素的类型是AssertionType
。您应该能够直接在<CreateRequest>
元素中使用由OpenSAML生成的<Assertion>
。 - Anders Abel