2016-09-01 8 views
0

サーブレットパスが/ api/v1 /、/ api/v2 /で始まるカスタムサーブレットがあります。これらの は5.6.1で問題なく動作していました。 6.2にアップグレードした直後(6と6.1をスキップ)、これらのサーブレットは404を提供し始めました。AEM 6.2アップグレード:アップグレード後カスタムサーブレットパスが機能しない

これらのパスをfelixコンソール構成でリストすると、Apache sling servlet/scriptリゾルバとエラーハンドラが動作するはずです。私はまだ404を取得しました。

また、サーブレットリゾルバを使用してパスが評価されているかどうかを確認すると、正しいサーブレットのクラスを指しています。

6.2用に追加の設定が必要ですか?

追加最近の要求のログ:あなたへの初期調査から

Request 47301 (GET /bin/offers/list) by admin - RequestProgressTracker Info 
     0 TIMER_START{Request Processing} 
     0 COMMENT timer_end format is {<elapsed msec>,<timer name>} <optional message> 
     0 LOG Method=GET, PathInfo=/bin/offers/list 
     0 TIMER_START{ResourceResolution} 
     0 TIMER_END{0,ResourceResolution} URI=/bin/offers/list resolves to Resource=ServletResource, servlet=com.xyz.v2.servlets.OffersListServlet, path=/bin/offers/list 
     0 LOG Resource Path Info: SlingRequestPathInfo: path='/bin/offers/list', selectorString='null', extension='null', suffix='null' 
     0 TIMER_START{ServletResolution} 
     0 TIMER_START{resolveServlet(/bin/offers/list)} 
     0 TIMER_END{0,resolveServlet(/bin/offers/list)} Using servlet com.xyz.v2.servlets.OffersListServlet 
     0 TIMER_END{0,ServletResolution} URI=/bin/offers/list handled by Servlet=com.xyz.v2.servlets.OffersListServlet 

/API/V2 /ユーザー

Request 47279 (GET /api/v2/user) by admin - RequestProgressTracker Info 
     0 TIMER_START{Request Processing} 
     0 COMMENT timer_end format is {<elapsed msec>,<timer name>} <optional message> 
     0 LOG Method=GET, PathInfo=/api/v2/user 
     0 TIMER_START{ResourceResolution} 
     0 TIMER_END{0,ResourceResolution} URI=/api/v2/user resolves to Resource=ServletResource, servlet=com.xyz.servlets.UserServlet, path=/api/v2/user 
     0 LOG Resource Path Info: SlingRequestPathInfo: path='/api/v2/user', selectorString='null', extension='json', suffix='null' 
     0 TIMER_START{ServletResolution} 
     0 TIMER_START{resolveServlet(/api/v2/user)} 
     0 TIMER_END{0,resolveServlet(/api/v2/user)} Using servlet com.xyz.servlets.UserServlet 
     0 TIMER_END{0,ServletResolution} URI=/api/v2/user handled by Servlet=com.xyz.servlets.UserServlet 
     0 LOG Applying Requestfilters 
     0 LOG Calling filter: com.adobe.granite.resourceresolverhelper.impl.ResourceResolverHelperImpl 
     0 LOG Calling filter: org.apache.sling.bgservlets.impl.BackgroundServletStarterFilter 
     0 LOG Calling filter: com.adobe.granite.rest.impl.servlet.ApiResourceFilter 
     0 LOG Including resource ApiResourceWrapper, type=granite/rest/core/resource, path=/api/v2/user, resource=[ServletResource, servlet=com.xyz.servlets.UserServlet, path=/api/v2/user] (SlingRequestPathInfo: path='/api/v2/user', selectorString='null', extension='json', suffix='null') 
     0 TIMER_START{resolveServlet(/api/v2/user)} 
     0 TIMER_END{0,resolveServlet(/api/v2/user)} Using servlet com.adobe.granite.rest.impl.servlet.DefaultGETServlet 
     0 LOG Applying Forwardfilters 
+0

をログからスタックトレースを共有してください。 –

+0

そのようなログはありません。しかし、私は最近のリクエストログを共有することができます。 –

+0

エラーは発行中か、ディスパッチャを使用しているか?この場合、パブリッシュが処理中である場合は、エラーハンドラ自体を変更していない限り、ログには例外がいくつかあります。注目すべき点は、サーブレットリゾルバがサーブレットを解決することができるということです。それはサーブレットがうまく動作するようになっており、その中のコードが問題を引き起こしている可能性があります。 –

答えて

1

はresourceResolution私は/apiベースのリソースがAEM 6.2に異なる方法で処理されていると言うことができます。

フィルタcom.adobe.granite.rest.impl.servlet.ApiResourceFilterチェックリソースパスが/apiで始まる場合、これはApiEndpointResourceProviderFactoryImplに設定されているあなたはフェリックス構成で確認することができます - /system/console/configMgr/com.adobe.granite.rest.impl.ApiEndpointResourceProviderFactoryImpl

このフィルターを、その後、完全にリソースを変更ApiResourceWrappergranite/rest/core/resourceようにあなたの要求リソースをラップこれはパスベースのサーブレットへの呼び出しではなく、既存のリソースへのGET呼び出しでDefaultGETServletによって処理され、このリソースで何をするかわからないため、404を出します。

私はentiではない/ apiベースの特定の処理の目的がドキュメントにあるものではないことに頼っているので、Adobeが確認しない限り、felixの設定を変更することはお勧めしません - /system/console/configMgr/com.adobe.granite.rest.impl.ApiEndpointResourceProviderFactoryImplこの問題の支援を受けるにはDayCareに連絡する必要があります。

+0

ありがとうございました。託児所のチケットを用意してください。入力を待っています。 –

+0

/apiの代わりに/ binを試して試してみることができますか?また、上記の説明が意味をなさないと感じる場合は、これをDayCareチケットに追加し、可能な解決策を尋ねることができます。 –

+0

binに変更してください。だから問題は/ apiだけである。これらの詳細を託児所のチケットにも追加しました。 –

0

AEM 6.2以降、/apiリソースは、JCRのコンテンツを公開するために使用されるSiren + JSON API用に予約されています。

自身のために、以下のURLを試してみてください:http://localhost:4502/api/content.json

{ 
    "entities": [ 
     { 
      "links": [ 
       { 
        "rel": [ 
         "self" 
        ], 
        "href": "http://localhost:4502/api/content/sites/geometrixx-outdoors.json" 
       }, 
       { 
        "rel": [ 
         "content" 
        ], 
        "href": "http://localhost:4502/content/geometrixx-outdoors.html" 
       } 
      ], 
      "class": [ 
       "content/page" 
      ], 
      "properties": { 
       "dc:description": "Geometrixx Outdoors - fashion that doesn't sacrifice style for comfort", 
       "dc:title": "Geometrixx Outdoors Site", 
       "name": "geometrixx-outdoors", 
       "redirectTarget": "/content/geometrixx-outdoors/en" 
      } 
     } 
    ], 
    "class": [ 
     "content/page" 
    ], 
    "properties": { 
     "dc:title": "Content Root", 
     "name": "content", 
     "srn:paging": { 
      "total": 13, 
      "offset": 0, 
      "limit": 20 
     } 
    } 
} 

さらに詳しい情報: https://github.com/kevinswiber/siren

+0

@Siva Isukapalli正しい場合は私の答えを受け入れてください。他の人を助けるかもしれない.. – mickleroy

関連する問題