4

SAML レスポンスを作成しようとしています。アサーションを構成する属性の 1 つはアドレスと呼ばれ、属性値は XSD で定義されたカスタム タイプである必要があります。カスタム属性値タイプを応答に追加するにはどうすればよいですか?

4

2 に答える 2

5

属性値 XML が文字列形式の場合:


String yourXMLFragment = "...";

AttributeStatementBuilder attributeStatementBuilder = 
   (AttributeStatementBuilder) builderFactory.getBuilder(AttributeStatement.DEFAULT_ELEMENT_NAME);
AttributeStatement attributeStatement = attributeStatementBuilder.buildObject();

AttributeBuilder attributeBuilder = 
   (AttributeBuilder) builderFactory.getBuilder(Attribute.DEFAULT_ELEMENT_NAME);
Attribute attr = attributeBuilder.buildObject();
attr.setName("yourAttributeName");

XSAnyBuilder sb2 = (XSAnyBuilder) builderFactory.getBuilder(XSAny.TYPE_NAME);
XSAny attrAny = sb2.buildObject(AttributeValue.DEFAULT_ELEMENT_NAME, XSAny.TYPE_NAME);
attrAny.setTextContent(yourXMLFragment.trim());

attr.getAttributeValues().add(attrAny);
attributeStatement.getAttributes().add(attr);
于 2011-08-02T20:11:57.910 に答える
0

実際、これは正しい結果をもたらしません。上記の例は、xml コンテンツではなくテキスト コンテンツを含む xsany を作成する場合にのみ使用できます (xml コンテンツはエスケープされます)。

そのため、opensaml ソースを掘り下げた後、必要に応じて以下が機能しました。

public XSAny createXSAny(Element dom)
{
XSAnyBuilder anyBuilder = (XSAnyBuilder) Configuration.getBuilderFactory().getBuilder(XSAny.TYPE_NAME);
    XSAny any = anyBuilder.buildObject(AttributeValue.DEFAULT_ELEMENT_NAME, XSAny.TYPE_NAME);
    // this builds only the root element not the whole dom
    XSAny xo=anyBuilder.buildObject(dom);
    // set/populate dom so whole dom gets into picture
    xo.setDOM(dom);
    any.getUnknownXMLObjects().add(xo);

  return any; 
}
于 2013-03-26T08:18:16.790 に答える