Troubleshooting common AEM development errors and step-by-step solutions.
Problems & Solutions (AEM 6.5)
Tài liệu tổng hợp các vấn đề thường gặp và hướng giải quyết trong AEM 6.5.
Kiểm tra chung khi gặp lỗi:
- Kiểm tra tất cả log:
error.log,stdout.log,request.log(đúng instance author/publish) - Restart/reload/update bundle trong OSGi Console
- Restart instance nếu cần
- Xóa
/var/classesvà/var/clientlibsđể force recompile - Kiểm tra bundle status tại
/system/console/bundles
Component không hiển thị nút Edit trong edit mode (editor.html)
Giải pháp:
- Component thiếu
cq:dialoghoặccq:editConfig(cần ít nhất 1 trong 2), hoặc file XML bị malformed - Component bị đánh dấu
.hidden - Component không được phép cho page/parsys hiện tại (kiểm tra
cq:allowedComponents) - Sai
cq:designPathtrên root page của site (Static Template) - Với Editable Template: kiểm tra policy có cho phép component không (Template Editor > Structure > Policy)
- Thử clear browser cache và local storage
Maven build lỗi MojoExecutionException
Lỗi này có nhiều nguyên nhân:
"Installation on http://localhost:4502/apps/abc/install failed"→ Folder/apps/abc/installchưa tồn tại. Tạo thủ công trong CRXDE Lite."Connection refused"→ Instance chưa chạy hoặc sai port."401 Unauthorized"→ Sai credentials trong Maven settings hoặc pom.xml.- SSL error trên AMS/self-signed cert → Thêm
-Dvault.relaxedSSLCheck=truevào lệnhmvn.
Maven build lỗi SSL với self-signed certificate (AMS/Cloud)
Giải pháp: Thêm -Dvault.relaxedSSLCheck=true vào lệnh mvn:
Component không xuất hiện trong component list
Giải pháp:
- Thiếu
cq:dialoghoặccq:editConfig, hoặc XML bị lỗi (kiểm tra bằng CRXDE) - Component bị đánh dấu
.hidden(componentGrouptrống hoặc bắt đầu bằng.) - Component chưa được cho phép trong page template / policy
cq:designPaththiếu hoặc sai trên root page (cho Static Template)- Với Editable Template: component chưa được enable trong Template Editor
404 trong console cho component đã bị xóa
Giải pháp:
- Clear local storage trên browser (component cũ có thể vẫn được cache)
- Reload page với
Ctrl+Shift+R
Thay đổi không xuất hiện trong JCR/CRXDE
- Vault (
vlt) hoặc Maven chưa push thay đổi → Kiểm tra có lỗi XML không (ví dụ:&phải viết là&) - File
.content.xmlbị sai cú pháp → Dùng CRXDE để validate - Package filter không bao gồm path bị thay đổi
Lỗi No renderer for extension html / cannot render resource SyntheticResource
Resource/Component không tồn tại. Kiểm tra:
- Resource path có đúng không
- Resource type (
sling:resourceType) trỏ đến component có thực không - Bundle chứa component có Active không
Lỗi import: Only a type can be imported ... resolves to a package
Giải pháp:
- Kiểm tra bundle có Active không trong
/system/console/bundles - Bundle có export package chứa class đó không (OSGi > Packages)
- Xóa
/var/classesđể force recompile (xóa trực tiếp trong CRXDE hoặc restart bundle)
⚠️
/system/console/slingjspđã bị xóa khỏi AEM 6.5. Dùng cách xóa/var/classestrực tiếp trong CRXDE hoặc restart bundle.
Ảnh không hiển thị trên Dispatcher
- Kiểm tra ảnh có hiển thị trên Author/Publish không
- Kiểm tra Dispatcher cache rules (
dispatcher.any) có flush đúng path không - Kiểm tra có redirect rule nào trên Dispatcher chặn request không
- Kiểm tra header
X-Dispatcher-Infođể xác nhận cache behavior - Invalidate cache thủ công: gửi POST đến
http://dispatcher/dispatcher/invalidate.cache
ClassNotFoundException khi chạy bundle
- Thiếu dependency trong
pom.xml - Dependency không được export bởi bundle cung cấp nó
- Thêm vào
pom.xmlvới scopeprovidednếu đã có trong AEM container - Kiểm tra package export tại
/system/console/bundles> click vào bundle > xem Packages
POST servlet trả về 403 Forbidden (từ Postman / API call)
- Thiếu authentication header
- Sling Referrer Filter block request → Vào
/system/console/configMgr>Apache Sling Referrer Filter> bật Allow Empty hoặc thêm allowed host - Đối với CSRF: thêm header
CSRF-Tokenlấy từ/libs/granite/csrf/token.json
AntiSamy warning trong log
- Xác định attribute nào bị filter
- Nếu attribute hợp lệ (ví dụ:
target="_blank"), thêm vào AntiSamy config: overlay/libs/cq/xssprotection/config.xmlvào/apps/cq/xssprotection/config.xml
editor.html trả về 404
- Kiểm tra node
/libs/wcm/core/content/editorcó tồn tại và đúng type không - Kiểm tra bundle
com.adobe.granite.ui.contentcó Active không - Xóa browser cache/localStorage
Taglib không resolve trong JSP
- Bundle cung cấp taglib có Active không?
- JSP (legacy) trong AEM 6.5 ít dùng — cân nhắc chuyển sang HTL
Ajax POST servlet trả về 302 Found
- Sling Form Post servlet (
SlingPostServlet) có thể redirect sau khi POST nếu có:redirectparameter - Kiểm tra request có chứa
:formidhoặc:formstartkhông — bỏ chúng đi nếu không cần
Unresolved constraint: osgi.wiring.package (version conflict)
- Dependency chưa tồn tại trong OSGi container → thử embed vào bundle
- Conflict version → dùng
<Import-Package>với version range trongbnd.bndhoặcmaven-bundle-plugin - Kiểm tra dependency graph tại
/system/console/depfinder
j_security_check trả về 403 / User login không hoạt động
- 301 redirect có thể làm mất auth header → Kiểm tra redirect config trên Dispatcher/CDN
- Kiểm tra
/system/console/slingauthđể xem thứ tự Authentication Handler - Đảm bảo
Login Token Expirationchưa hết hạn
SAML Authentication trả về 403
- Kiểm tra tất cả config value có đúng type không:
{Boolean},{Long},[] service.rankingcủa SAML handler phải cao hơn Token Authentication Handler- Kiểm tra
/system/console/slingauthđể xem thứ tự handler - Theo dõi
/system/console/eventsđể xemLOGINevent và handler nào được dùng - Config deploy qua
config.authorfolder phải khớp hoàn toàn với giá trị manual trong configMgr
XML parsing error: GenericArtifactHandler Error while parsing ...xml
- Thường do thiếu
jcr:primaryType="nt:unstructured"trên một node trong dialog XML - Kiểm tra từng field để đảm bảo XML hợp lệ
- Dùng CRXDE để validate cú pháp XML
Cookie không xuất hiện dù response header trả về đúng
- Thêm tên Cookie vào danh sách exclude trong
Adobe Granite Opt-Out Service(OSGi config) - Không set
Domainattribute trên cookie (để browser tự handle) - Nếu dùng
setSecure(true)nhưng request là HTTP → cookie sẽ không được set
Không thể thêm trang vào Translation Project / project tạo với 0 trang
- Kiểm tra
/etc/workflow/models/translation/translation_rules.xmlcó comment ở đầu file không → AEM không parse được, phải đặt comment bên trong<nodelist> - Trong AEM 6.5: kiểm tra Translation Configuration tại
Tools > Cloud Services > Translation Cloud Services
EventHandler không được gọi
- Kiểm tra event có thực sự xảy ra không:
/system/console/events - EventHandler đã được register chưa:
/system/console/components - EventHandler có thể bị blacklist: kiểm tra OSGi config
org.apache.felix.eventadmin.impl.EventAdmin→ thuộc tínhevent.ignore.timeout - Với Sling Job, kiểm tra queue tại
/system/console/slingevent
RTE config không hoạt động cho author
- Group
contributorsbị deny read trênrep:glob=apps/*/config/*theo mặc định của AEM → author không đọc đượcconfignode củacq:inplaceEditing - Giải pháp: Thêm ACL allow cho group contributor tại
/apps/<project>/components/**hoặc set ACL cụ thể cho path config - Đây là security feature của AEM — cân nhắc kỹ trước khi override
Lỗi khi publish: Failed to retrieve references for the selected page
- Có
cq:policyproperty trỏ đến policy không tồn tại - Kiểm tra trong CRXDE: tìm các
cq:policyreference dưới/content/<site>và đảm bảo policy tương ứng tồn tại trong/conf/<site>/settings/wcm/policies
Java process có I/O wait cao do MSM rollout
- Kiểm tra
topcommand: nếuwa(io wait) liên tục > 30% - Kiểm tra
/system/console/eventstìm Replication hoặc MSM event bất thường - Kiểm tra
/system/console/slingevent(Sling Job Queue) xem có job nào bị stuck không - Tạm dừng MSM rollout scheduled task trong Maintenance Console
i18n dictionary cache lỗi thời / string mới không được dịch
- Giải pháp 1: Deploy một thay đổi nhỏ vào dictionary để trigger reindex
- Giải pháp 2: Restart bundle
Apache Sling Internationalization Support (org.apache.sling.i18n) - Giải pháp 3: Xóa
/var/eventing/slingi18ntrong CRXDE rồi restart bundle
SlingException: Cannot get DefaultSlingScript: null
- Root resource
/content/<site>chưa được replicate lên Publish - Kiểm tra replication queue tại
/etc/replication.html - Đảm bảo root page và các config node (jcr:content) đã được activated
IntelliJ IDEA không resolve import từ AEM / Maven
- Chạy
mvn eclipse:eclipserồi reimport - IDE > Maven > Reload All Maven Projects
- File > Invalidate Caches / Restart
- Đảm bảo
<scope>provided</scope>đúng với các AEM API dependency
Tạo OSGi Service đọc cấu hình (OSGi Config)
Cần tạo:
- Config Interface (
@ObjectClassDefinition) — định nghĩa các field config - Service Interface — define contract
- Service Implementation —
@Component,@Designate(ocd = MyConfig.class)
Lưu ý:
- Nếu key config có dấu
.(ví dụhost.ip), dùng_trong tên method:host_ip() - Dùng annotation từ
org.osgi.service.component.annotations(DS Annotations), không dùng Felix annotation cũ - Deploy config bằng file
.cfg.json(ưu tiên trong AEM 6.5+) hoặc.configfile
Tham khảo:
Workflow không trigger / Workflow Launcher không hoạt động
- Kiểm tra Launcher đã enable chưa:
Tools > Workflow > Launchers - Kiểm tra điều kiện path và event type (Node Created / Node Modified / ...)
- Kiểm tra Workflow Model có valid không:
Tools > Workflow > Models - Xem Workflow history:
/libs/cq/workflow/content/console.html> Instances
Bundle ở trạng thái Installed thay vì Active
- Bundle đang chờ dependency → Kiểm tra tab Imported Packages của bundle tại
/system/console/bundles - Dùng
/system/console/depfinderđể tìm package nào đang thiếu - Có thể cần embed dependency hoặc thêm vào
pom.xml
Replication Queue bị stuck (Publish không nhận content)
- Kiểm tra queue tại
/etc/replication/agents.author/publish.html - Kiểm tra Publish instance có đang chạy không
- Thử Retry hoặc Clear queue
- Kiểm tra Replication Agent config: URL, credentials, transport URI
Slow query / Trang load chậm do thiếu Oak index
- Kiểm tra Query Performance Tool:
/libs/granite/operations/content/diagnosistools/queryPerformance.html - Tạo Oak Index phù hợp (lucene hoặc property index)
- Dùng
EXPLAINtrong Query Debugger để phân tích query plan:/libs/cq/search/content/querydebug.html - Tránh query trên property không có index, đặc biệt
jcr:content/jcr:lastModified
ContextHub không hoạt động
ℹ️ Client Context đã bị deprecated từ AEM 6.4. AEM 6.5 sử dụng ContextHub.
- Kiểm tra ContextHub config tại
Tools > Sites > ContextHub - Kiểm tra ContextHub store đã được load chưa trong browser DevTools > Application > localStorage
- Kiểm tra bundle
com.adobe.granite.contexthubcó Active không