2017-06-05 18 views
0

crxで利用可能なすべてのタグを出力するコンポーネントを作成しようとしていますが、nullポインタ例外が発生しています。aemに利用可能なすべてのタグを表示

<%@include file="/libs/foundation/global.jsp"%> 
 
<%@page import="java.util.*, com.day.cq.tagging.* " %> 
 
<%@page import="com.aem.community.core.services.*" %> 
 
<%@page import="com.aem.community.core.services.Impl.*" %> 
 
<% 
 
try { 
 
    
 
com.aem.community.core.services.ListTags taglist = sling.getService(com.aem.community.core.services.ListTags.class); 
 

 
Map tagnames = taglist.ListAllTags(); 
 
out.print(tagnames); 
 
    } catch(Exception e){ 
 
    out.print(e); } 
 

 
%>
を次のように私は、次のインターフェイス

package com.aem.community.core.services; 
 

 
import java.util.ArrayList; 
 
import java.util.HashMap; 
 
import java.util.Map; 
 

 

 
public interface ListTags { 
 
\t public Map ListAllTags(); 
 
}
とimplemenataion

package com.aem.community.core.services.Impl; 
 

 

 
import java.util.Iterator; 
 

 
import javax.jcr.Node; 
 
import javax.jcr.NodeIterator; 
 
import javax.jcr.Session; 
 

 
import org.apache.felix.scr.annotations.Component; 
 
import org.apache.felix.scr.annotations.Reference; 
 
import org.apache.felix.scr.annotations.Service; 
 
import org.apache.sling.api.resource.Resource; 
 
import org.apache.sling.api.resource.ResourceResolver; 
 
import org.apache.sling.api.resource.ResourceResolverFactory; 
 

 
import org.slf4j.Logger; 
 
import org.slf4j.LoggerFactory; 
 

 
import com.aem.community.core.services.ListTags; 
 
import com.aem.community.core.services.SearchService; 
 
import com.day.cq.tagging.Tag; 
 
import java.util.HashMap; 
 
import java.util.Map; 
 
@Component 
 
@Service 
 
    
 
public class ListTagsImpl implements ListTags { 
 
\t protected final Logger log = LoggerFactory.getLogger(this.getClass()); 
 
\t private Session session; 
 
\t @Reference 
 
\t private ResourceResolver resourceResolver; 
 
\t 
 
\t @Override 
 
\t public Map ListAllTags() { 
 
\t 
 
\t \t try { 
 
\t \t \t Map<String, String> myHashMap = null; 
 
\t \t  Resource tagResource = resourceResolver.getResource("/etc/tags"); 
 

 
\t \t  if (tagResource!= null) { 
 
\t \t  \t 
 
\t \t   final Iterable<Resource> children = tagResource.getChildren(); 
 
\t \t   final Iterator<Resource> itr = children.iterator(); 
 
\t \t   while (itr.hasNext()) { 
 
\t \t    final Resource item = itr.next(); 
 
\t \t    final Tag tag = item.adaptTo(Tag.class); 
 
\t \t    if (tag != null) { 
 
\t \t    \t 
 
\t \t      Iterator<Tag> childitr = tag.listAllSubTags(); 
 
\t \t     while (childitr.hasNext()) { 
 
\t \t     final Tag childitem = childitr.next(); 
 
\t \t     myHashMap.put((String)tag.getName(),(String)childitem.getName()); 
 
\t \t     } 
 
\t \t    } 
 

 
\t \t   } 
 
\t \t  } 
 
\t  session.logout(); 
 
\t  return myHashMap; 
 
\t \t 
 
\t  
 
\t \t 
 
\t \t 
 
\t \t } 
 
\t \t catch(Exception e){ 
 
\t \t  log.info(e.getMessage()); 
 
\t \t  
 
\t \t 
 

 
} 
 
\t \t return null; 
 
\t }}

そしてCRXのコードを作成しました しかし、サービスによってマップに返された値をコンポーネントのjspにフェッチできません。 java.lang.NullPointerExceptionが発生しています

+1

を参照することができます。APIを学ぶ練習として、またはいくつかのビジネス要件を満たそうとしていますか?後者が当てはまる場合は、おそらくタグのリストを取得するより良い方法があります。率直に言って、私はあなたがなぜそれをやるのかは分かりません。 – toniedzwiedz

+1

また、NullPointerExceptionのスタックトレースを共有してもよろしいですか? – Jens

+2

カップルの指針:1)TagManager APIを使用する。2)JSPスクリプトレットを避ける。詳細:https://docs.adobe.com/docs/en/aem/6-2/develop/ref/javadoc/com/day/cq/tagging/TagManager.html – mickleroy

答えて

0

これは、ResourceResolverをOSGIサービスにインジェクトしようとしているためです。

@Reference 
private ResourceResolver resourceResolver; 

おそらく、リソースリゾルバを使用するNullPointerExceptionが発生している可能性があります。 OSGIサービスでリソースリゾルバを取得するにはいくつかの方法がありますが、http://www.one-inside.com/aem6-1-resourceresolver-access-in-services/またはhttp://scrupulo.com/posts/blog/view/5-tips-on-the-sling-resource-resolver

関連する問題