我试图将包含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="{}"/>
</data>
</jcr:content>
</jcr:root>
我实体对{}
属性中的大括号(即jcr:data
)进行了编码,以避免在导入时遇到编码问题。我得到的错误是:
E /path/to/node (org.xml.sax.SAXException: unknown type:
java.lang.IllegalArgumentException: unknown type: )
答案 0 :(得分:1)
即使JCR使用HTML实体作为转义特殊字符的手段,SAX本身也会在此之前解码实体,并在尝试解析数据时遇到问题。
SAX将花括号识别为定义类型的特殊字符(无论它们是否编码为HTML实体)。
错误消息似乎为空的原因是因为JSON对象本身为空,例如如果JSON数据为{hello world}
,则返回的错误为unknown type: hello world
。
要解决此问题,即使使用HTML实体,也需要使用反斜杠转义大括号,例如:两个:
jcr:data="\{\}"
或
jcr:data="\{\}"
会正常工作。