Тест JUnit: невозможно разобрать элемент - PullRequest
0 голосов
/ 04 ноября 2019

Я столкнулся со следующей трудностью почти неделю после того, как попробовал бесчисленное количество решений в сети. Конкретная проблема связана с тем, что NullPointerException выдается после вызова метода Configuration.getUnmarshallerFactory().getUnmarshaller(Element) в моем тесте JUnit.

Ниже приведена информация о зависимостях для библиотеки opensaml, импортированной в мой проект:

<dependency>
    <groupId>org.opensaml</groupId>
    <artifactId>opensaml</artifactId>
    <version>2.6.4</version>
</dependency>

Ниже приведена реализация. Во время обычного выполнения программы / проекта он может успешно выполнить и вернуть объект Response.

private Response a(String text) throws ConfigurationException, SAXException  {

        DefaultBootstrap.bootstrap();

        Schema s = SAMLSchemaBuilder.getSAML11Schema();

        BasicParserPool bpp = new BasicParserPool();
        bpp.setNamespaceAware(true);
        bpp.setIgnoreElementContentWhitespace(true);
        bpp.setSchema(schema);

        InputStream is= new ByteArrayInputStream(Base64.decode(samlContent).getBytes());
        Response res= null;

        try {
            Document doc = bpp.parse(is);
            Element elmt= doc.getDocumentElement();
            try {

                QName qn = new QName(elmt.getNamespaceURI(), elmt.getLocalName(), elmt.getPrefix());
                Unmarshaller um = Configuration.getUnmarshallerFactory().getUnmarshaller(qn);        <== NullPointerException thrown at this line during JUnit Test**
                samlResponse = (Response) unmarshaller.unmarshall(elmt);
            } catch (XMLParserException e) {
                  logger.debug(e.getMessage());
        } catch (UnmarshallingException e) {
            logger.debug(e.getMessage());
        }

        return res;
    }

Ниже приведен тест JUnit: (Я получил образец строки ответа samlp: из следующеговеб-сайт: https://www.samltool.com/generic_sso_res.php)

@Test
public void test() throws Exception {
    PowerMockito.mockStatic(DefaultBootstrap.class);       
    PowerMockito.doNothing().when(DefaultBootstrap.class, "bootstrap");


    Response result = classInstance.a(Base64.encode(responseStringFromWebsite));

    assertNotNull(result);
}

Буду очень признателен за любую помощь или обмен знаниями, если кто-либо из вас уже сталкивался с подобными ошибками.

1 Ответ

0 голосов
/ 04 ноября 2019

Путем насмешливого метода DefaultBootstrap # bootstrap, я думаю, вы пропустили инициализацию обязательных полей. Проверьте исходный код DefaultBootstrap.bootstrap (), он выяснит причину NPE.

...