AEM内容包导入提供" SAXException:未知类型"错误

时间:2016-06-15 09:14:21

标签: json aem sax jackrabbit

我试图将包含JSON数据的CRX内容包上传到AEM,但是我遇到了错误。

目前,我只是想在页面下创建一个空的JSON对象,以证明我的XML文件的结构。

我的包中.content.xml文件的结构如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<jcr:root jcr:primaryType="cq:Page">
    <jcr:content jcr:primaryType="cq:PageContent">
        <data jcr:primaryType="nt:file">
            <jcr:content 
                    jcr:primaryType="nt:resource"
                    jcr:mimeType="application/json"
                    jcr:data="&#123;&#125;"/>
        </data>
    </jcr:content>
</jcr:root>

我实体对{}属性中的大括号(即jcr:data)进行了编码,以避免在导入时遇到编码问题。我得到的错误是:

E /path/to/node (org.xml.sax.SAXException: unknown type: 
java.lang.IllegalArgumentException: unknown type: )

1 个答案:

答案 0 :(得分:1)

即使JCR使用HTML实体作为转义特殊字符的手段,SAX本身也会在此之前解码实体,并在尝试解析数据时遇到问题。

SAX将花括号识别为定义类型的特殊字符(无论它们是否编码为HTML实体)。

错误消息似乎为空的原因是因为JSON对象本身为空,例如如果JSON数据为&#123;hello world&#125;,则返回的错误为unknown type: hello world

要解决此问题,即使使用HTML实体,也需要使用反斜杠转义大括号,例如:两个:

jcr:data="\{\}"

jcr:data="\&#123;\&#125;"

会正常工作。