-------------------------------------------------------------------------------
Test set: TestSuite
-------------------------------------------------------------------------------
Tests run: 144, Failures: 92, Errors: 0, Skipped: 5, Time elapsed: 3,251.799 sec <<< FAILURE!
testTemplateBuilderWithImageIdSpecified(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 9.186 sec  <<< FAILURE!
org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.003 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.007 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.003 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.003 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.001 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.001 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.001 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.001 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.001 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.005 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.009 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.001 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.001 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.001 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.001 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.001 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.001 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.003 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.001 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.001 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.001 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.001 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.001 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.001 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.001 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.001 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.003 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.001 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.001 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCannotFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1459)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:740)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	... 13 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testDefaultTemplateBuilder(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.001 sec  <<< FAILURE!
org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testCompareSizes(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCanUseImageId(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testFromTemplate(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCanFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCanFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCanFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCanFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.003 sec  <<< FAILURE!
org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCanFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.047 sec  <<< FAILURE!
org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCanFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.001 sec  <<< FAILURE!
org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCanFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0 sec  <<< FAILURE!
org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCanFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.001 sec  <<< FAILURE!
org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCanFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0 sec  <<< FAILURE!
org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCanFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0 sec  <<< FAILURE!
org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCanFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0 sec  <<< FAILURE!
org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCanFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0 sec  <<< FAILURE!
org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCanFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.001 sec  <<< FAILURE!
org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCanFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0 sec  <<< FAILURE!
org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCanFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0 sec  <<< FAILURE!
org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCanFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0 sec  <<< FAILURE!
org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCanFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0 sec  <<< FAILURE!
org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCanFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.001 sec  <<< FAILURE!
org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCanFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.001 sec  <<< FAILURE!
org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCanFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0 sec  <<< FAILURE!
org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCanFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0 sec  <<< FAILURE!
org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCanFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0 sec  <<< FAILURE!
org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCanFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0 sec  <<< FAILURE!
org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCanFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0.001 sec  <<< FAILURE!
org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCanFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0 sec  <<< FAILURE!
org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCanFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0 sec  <<< FAILURE!
org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testTemplateBuilderCanFind(org.jclouds.trmk.ecloud.compute.TerremarkECloudTemplateBuilderLiveTest)  Time elapsed: 0 sec  <<< FAILURE!
org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/267-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testCreateAnotherNodeWithANewContextToEnsureSharedMemIsntRequired(org.jclouds.trmk.ecloud.compute.TerremarkECloudComputeServiceLiveTest)  Time elapsed: 10.931 sec  <<< FAILURE!
org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/269-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.BaseComputeServiceLiveTest.testCreateAnotherNodeWithANewContextToEnsureSharedMemIsntRequired(BaseComputeServiceLiveTest.java:407)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.BaseComputeServiceLiveTest.testCreateAnotherNodeWithANewContextToEnsureSharedMemIsntRequired(BaseComputeServiceLiveTest.java:407)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/269-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/269-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
cleanup(org.jclouds.trmk.ecloud.compute.TerremarkECloudComputeServiceLiveTest)  Time elapsed: 16.497 sec  <<< FAILURE!
org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/269-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.BaseComputeServiceLiveTest.testCreateAnotherNodeWithANewContextToEnsureSharedMemIsntRequired(BaseComputeServiceLiveTest.java:407)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.BaseComputeServiceLiveTest.testCreateAnotherNodeWithANewContextToEnsureSharedMemIsntRequired(BaseComputeServiceLiveTest.java:407)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/269-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/269-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
cleanup(org.jclouds.trmk.ecloud.compute.TerremarkECloudComputeServiceLiveTest)  Time elapsed: 16.498 sec  <<< FAILURE!
org.jclouds.rest.AuthorizationException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/269-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:73)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.BaseComputeServiceLiveTest.testCreateAnotherNodeWithANewContextToEnsureSharedMemIsntRequired(BaseComputeServiceLiveTest.java:407)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy80.getCatalogItem(Unknown Source)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:76)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog$2.apply(AllCatalogItemsInCatalog.java:71)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:97)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog.apply(AllCatalogItemsInCatalog.java:46)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:59)
	at org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg$1.apply(AllCatalogItemsInOrg.java:56)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:96)
	at org.jclouds.concurrent.FutureIterables.transformParallel(FutureIterables.java:85)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:64)
	at org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems.apply(VAppTemplatesForCatalogItems.java:46)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:56)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImagesInVCloudExpressOrg.apply(ImagesInVCloudExpressOrg.java:37)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterables$3.next(Iterables.java:508)
	at com.google.common.collect.Iterables$3.next(Iterables.java:501)
	at com.google.common.collect.Iterators$5.hasNext(Iterators.java:544)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:249)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:246)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.BaseComputeServiceLiveTest.testCreateAnotherNodeWithANewContextToEnsureSharedMemIsntRequired(BaseComputeServiceLiveTest.java:407)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/269-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
Caused by: org.jclouds.http.HttpResponseException: command: GET https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/catalogItem/269-1155 HTTP/1.1 failed with response: HTTP/1.1 401 The operation requires authentication.; content: [<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><HEAD><TITLE>Request Error</TITLE></HEAD><BODY><DIV id="content"><P class="heading1"><B>Error Status Code:</B> 'Unauthorized'</P><P><B>Details: </B>The operation requires authentication.</P><!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--></DIV></BODY></html>]
	at org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse.handleError(ParseTerremarkVCloudErrorFromHttpResponse.java:58)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
