NullPointerException в net .sf.saxon.event.ReceivingContentHandler.startPrefixMapping (ReceivingContentHandler. java: 291) - PullRequest
0 голосов
/ 06 февраля 2020

Получение ошибки

java.lang.NullPointerException: null
at net.sf.saxon.event.ReceivingContentHandler.startPrefixMapping(ReceivingContentHandler.java:291)

в проекте Camel Java DSL при попытке преобразования xml с помощью xslt. Этот xslt отлично работает в кислородном редакторе с saxon, но когда я использую тот же xslt в apache верблюде с java проектом для трансформации, полученной выше исключения. Есть ли способ, которым я могу решить это с java и верблюжьим проектом. В качестве зависимости я также использовал saxon HE 9.

XML ::::

 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Lowdtl xmlns="http://domain/crd/bdr/services/get">
    <PreDtl>
        <LowestDtl>
            <Otpxyz abc="000" xyz="NPS" yahoo="0" temp="" />
            <Otpxyz abc="001" xyz="NPS" yahoo="0" temp="" />      
        </LowestDtl>
        <HighDtl>
            <linkDtl>
                <Otpxyz abc="000" xyz="NPS" yahoo="0" temp="" />
                <Otpxyz abc="001" xyz="NPS" yahoo="0" temp="" />
              </linkDtl>
            <HighDtl>
                <BinDtl>
                    <RestLin abc="003" xyz="NPS" yahoo="0" temp=""  />
                </BinDtl>
                <DatDtl>
                    <DatCd abc="003" xyz="NPS" yahoo="0" temp=""  />
                </DatDtl>
            </HighDtl>
        </HighDtl>
    </PreDtl>
    <RemoveDtl abc="003" xyz="NPS" yahoo="0" temp=""  >
        <Ts SysTs="2019-10-29 07:54:43.520" />
        <RemoveMsg>
            <rmv abc="003" xyz="NPS" yahoo="0" temp="" />
        </RemoveMsg>
    </RemoveDtl>
</Lowdtl>

XSLT ::

<xsl:stylesheet version="2.0"  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xpath-default-namespace="http://domain/crd/bdr/services/get">
    <xsl:output method="xml" indent="yes" />
    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="RemoveDtl" />
</xsl:stylesheet>

1 Ответ

1 голос
/ 07 февраля 2020

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

Номер строки предполагает, что это, вероятно, наиболее недавняя версия (9.9), в этом случае происходит сбой, поскольку для префикса при вызове метода startPrefixMapping(prefix, uri) указано нулевое значение. Этот метод реализует интерфейс SAX org.xml.sax.ContentHandler, и хотя spe c для этого метода [1] явно не говорит, что произойдет, если вы передадите null, он не определит никакого значения для null и, следовательно, выбрасывает NPE. это разумно.

Поэтому нам нужно выяснить, почему вызывающая сторона предоставила нулевой префикс, и первым шагом для этого является получение трассировки стека и выяснение, кто является вызывающей стороной. Обычно этот метод вызывается синтаксическим анализатором XML (реализация XMLReader), и они, как правило, довольно надежны и надежны; однако иногда пользовательский код появляется в конвейере обработки как прокси для XMLReader, и это может быть более ошибочным c.

== LATER ==

Симптомы выглядят одинаково как эта известная ошибка Camel:

https://issues.apache.org/jira/browse/CAMEL-10704

Убедитесь, что вы используете версию Camel, содержащую исправление.

[1] https://docs.oracle.com/javase/7/docs/api/org/xml/sax/ContentHandler.html#startPrefixMapping (java .lang.String,% 20 java .lang.String)

...