2016-09-01 5 views
0

groovyスクリプトを使用して、私はHTTPBuilderリクエストオブジェクトを使用しています。groovyスクリプトHttpBuilderリクエストオブジェクトを使用して、http呼び出しでJCRのAEMノードの存在を確認する必要があります

詳細: このCLIスクリプトhttp://www.tothenew.com/blog/content-migration-in-aem-using-slingpostservlet/を使用して、XMLからコンテンツを移行する際にノードを作成しています。 XMLファイルには、親ノードのフルパスを含むフィールドがあります。そのノードが存在するかどうかを確認する必要があります。そうでなければ、そのノードを作成する必要があります。親切にお勧めします。

答えて

0

あなたはGroovyとhttpbuilderモジュールを使用しているので、あなたは、単にJSON形式の拡張子を持つ完全なリソースパスのURLにHTTP GETかどうかを確認できたがHTTP 200またはHTTPを返す404 HTTP 200はリソースが存在することを意味し、404はノードが存在しないことを意味する。

次に、JCRノードが存在するかどうかを判断する簡単な例を示します。以下のコードは、欠落したノードを作成するものではなく、説明のためだけのものです。

import groovyx.net.http.HTTPBuilder 
import groovyx.net.http.HttpResponseException 

import static groovyx.net.http.ContentType.JSON 

HTTPBuilder local = new HTTPBuilder("http://localhost:4502") 
local.auth.basic("<USERNAME>", "<PASSWORD>") 

def getStatus = { 
    resourcePath -> 
     try { 
      local.get(
        path: resourcePath + ".json", 
        contentType: JSON 
      ) { 
       resp, reader -> 
        return resp.status 
      } 
     } catch (HttpResponseException httpResponseException) { 
      return httpResponseException.statusCode 
     } 
} 

def nodePath = '/content/geometrixx-outdoors/en/men' 
def httpNodeStatus = getStatus(nodePath); 
if (httpNodeStatus == 404) { 
    println('node : ' + nodePath + ' does not exist. creating node') 
    // Code to create node 
} else if (httpNodeStatus == 200) { 
    println('node : ' + nodePath + ' exists') 
    // Node exists 
} else { 
    println('HTTP Status for node : ' + httpNodeStatus) 
    // handle other response codes 
} 
+0

ありがとう、私は同じ方法をしました:) – Senthil

0

これを行うには、スリングのResourceUtilメソッドを使用できます。リンクされたjavaドキュメントを見てください。以下の方法は、このために便利来ることができる -

public static Resource getOrCreateResource(ResourceResolver resolver, 
              String path, 
              Map<String,Object> resourceProperties, 
              String intermediateResourceType, 
              boolean autoCommit) 
            throws PersistenceException 
関連する問題