【问题标题】:SAML getUnmarshaller(element) returns nullSAML getUnmarshaller(element) 返回 null
【发布时间】:2018-08-13 11:18:02
【问题描述】:

我正在尝试从 XmlString 构造 XML 对象,但 getUnmarshaller(element) 返回 null:

这是代码:

     try {
        InitializationService.initialize();
        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = documentBuilderFactory.newDocumentBuilder();
        Document document = docBuilder.parse(new ByteArrayInputStream(xmlString.trim().getBytes()));
        Element element = document.getDocumentElement();
        UnmarshallerFactory unmarshallerFactory = XMLObjectProviderRegistrySupport.getUnmarshallerFactory();
        org.opensaml.core.xml.io.Unmarshaller unmarshaller = unmarshallerFactory
              .getUnmarshaller(element); //This is coming out be null
        System.out.println(unmarshaller);
     } catch (Exception e) {
        e.printStackTrace();
     }

这是 XMLString

static String xmlString ="<?xml version=\"1.0\"?>" +
          "  <!DOCTYPE address" +
          "  [" +
          "     <!ELEMENT address (buildingnumber, street, city, state, zip)>" +
          "     <!ATTLIST address xmlns CDATA #IMPLIED>" +
          "     <!ELEMENT buildingnumber (#PCDATA)>" +
          "     <!ELEMENT street (#PCDATA)>" +
          "     <!ELEMENT city (#PCDATA)>" +
          "     <!ELEMENT state (#PCDATA)>" +
          "     <!ELEMENT zip (#PCDATA)>" +
          "  ]>" +
          "" +
          "  <address>" +
          "    <buildingnumber> 29 </buildingnumber>" +
          "    <street> South Street</street>" +
          "    <city>Vancouver</city>" +
          "" +
          "    <state>BC</state>" +
          "    <zip>V6V 4U7</zip>" +
          "  </address>";

任何帮助将不胜感激。

【问题讨论】:

  • 检查element是否为空
  • 嘿,元素不为空。
  • 你能给encodedSAMLResp的值吗
  • 你好,我更新了代码,请看一下。
  • 嘿 Nicholas 当我尝试使用 System.out.println(element); 打印元素时它在控制台中显示 [address: null]。但我可以访问所有这些。

标签: java single-sign-on opensaml


【解决方案1】:

OpenSAML3 的初始化过程很可能存在问题。我的猜测是 unmarshallerFactory 为空。首先检查你是否有以下依赖:

<dependency>
    <groupId>org.opensaml</groupId>
    <artifactId>opensaml-saml-impl</artifactId>
    <version>3.0.x</version>
</dependency>

如果存在,则尝试手动初始化 OpenSAML 库,就像 https://github.com/wso2-extensions/carbon-identity-saml-common/blob/931e6164ee64350b15c6aa6ae080a0c5fb280828/components/org.wso2.carbon.identity.saml.common.util/src/main/java/org/wso2/carbon/identity/saml/common/util/SAMLInitializer.java#L41-L85 一样,然后您将获得正确的解组器。

【讨论】:

    【解决方案2】:

    我不知道它是否仍然需要,但是

    DefaultBootstrap.bootstrap();
    

    一开始就为我解决了问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-31
      • 2021-07-14
      • 1970-01-01
      • 2016-03-01
      • 2020-06-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多