Issue 622:Unable to clone machine of Terremark VCloud Express
diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/binders/BindCloneVAppParamsToXmlPayload.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/binders/BindCloneVAppParamsToXmlPayload.java
index b5d83ca..41cdeb8 100644
--- a/apis/vcloud/src/main/java/org/jclouds/vcloud/binders/BindCloneVAppParamsToXmlPayload.java
+++ b/apis/vcloud/src/main/java/org/jclouds/vcloud/binders/BindCloneVAppParamsToXmlPayload.java
@@ -42,7 +42,7 @@
@Inject
public BindCloneVAppParamsToXmlPayload(BindToStringPayload stringBinder,
@Named(PROPERTY_VCLOUD_XML_NAMESPACE) String ns, @Named(PROPERTY_VCLOUD_XML_SCHEMA) String schema) {
- super(stringBinder, schema, schema);
+ super(stringBinder, ns, schema);
}
@Override
diff --git a/apis/vcloud/src/test/resources/copyVApp-default.xml b/apis/vcloud/src/test/resources/copyVApp-default.xml
index e1579ca..0e8ba8d 100644
--- a/apis/vcloud/src/test/resources/copyVApp-default.xml
+++ b/apis/vcloud/src/test/resources/copyVApp-default.xml
@@ -1 +1 @@
-<CloneVAppParams xmlns="http://vcloud.safesecureweb.com/ns/vcloud.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" deploy="false" name="my-vapp" powerOn="false" xsi:schemaLocation="http://vcloud.safesecureweb.com/ns/vcloud.xsd http://vcloud.safesecureweb.com/ns/vcloud.xsd"><Source href="https://vcenterprise.bluelock.com/api/v1.0/vapp/4181" type="application/vnd.vmware.vcloud.vApp+xml"/></CloneVAppParams>
\ No newline at end of file
+<CloneVAppParams xmlns="http://www.vmware.com/vcloud/v1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" deploy="false" name="my-vapp" powerOn="false" xsi:schemaLocation="http://www.vmware.com/vcloud/v1 http://vcloud.safesecureweb.com/ns/vcloud.xsd"><Source href="https://vcenterprise.bluelock.com/api/v1.0/vapp/4181" type="application/vnd.vmware.vcloud.vApp+xml"/></CloneVAppParams>
\ No newline at end of file
diff --git a/apis/vcloud/src/test/resources/copyVApp.xml b/apis/vcloud/src/test/resources/copyVApp.xml
index 11dfaae..b6cd733 100644
--- a/apis/vcloud/src/test/resources/copyVApp.xml
+++ b/apis/vcloud/src/test/resources/copyVApp.xml
@@ -1 +1 @@
-<CloneVAppParams xmlns="http://vcloud.safesecureweb.com/ns/vcloud.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" deploy="true" name="new-linux-server" powerOn="true" xsi:schemaLocation="http://vcloud.safesecureweb.com/ns/vcloud.xsd http://vcloud.safesecureweb.com/ns/vcloud.xsd"><Description>The description of the new vApp</Description><Source href="https://vcenterprise.bluelock.com/api/v1.0/vapp/201" type="application/vnd.vmware.vcloud.vApp+xml"/></CloneVAppParams>
\ No newline at end of file
+<CloneVAppParams xmlns="http://www.vmware.com/vcloud/v1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" deploy="true" name="new-linux-server" powerOn="true" xsi:schemaLocation="http://www.vmware.com/vcloud/v1 http://vcloud.safesecureweb.com/ns/vcloud.xsd"><Description>The description of the new vApp</Description><Source href="https://vcenterprise.bluelock.com/api/v1.0/vapp/201" type="application/vnd.vmware.vcloud.vApp+xml"/></CloneVAppParams>
\ No newline at end of file
diff --git a/apis/vcloud/src/test/resources/moveVApp.xml b/apis/vcloud/src/test/resources/moveVApp.xml
index cba62d9..919d136 100644
--- a/apis/vcloud/src/test/resources/moveVApp.xml
+++ b/apis/vcloud/src/test/resources/moveVApp.xml
@@ -1 +1 @@
-<CloneVAppParams xmlns="http://vcloud.safesecureweb.com/ns/vcloud.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" deploy="true" name="new-linux-server" powerOn="true" xsi:schemaLocation="http://vcloud.safesecureweb.com/ns/vcloud.xsd http://vcloud.safesecureweb.com/ns/vcloud.xsd"><Description>The description of the new vApp</Description><Source href="https://vcenterprise.bluelock.com/api/v1.0/vapp/201" type="application/vnd.vmware.vcloud.vApp+xml"/><IsSourceDelete>true</IsSourceDelete></CloneVAppParams>
\ No newline at end of file
+<CloneVAppParams xmlns="http://www.vmware.com/vcloud/v1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" deploy="true" name="new-linux-server" powerOn="true" xsi:schemaLocation="http://www.vmware.com/vcloud/v1 http://vcloud.safesecureweb.com/ns/vcloud.xsd"><Description>The description of the new vApp</Description><Source href="https://vcenterprise.bluelock.com/api/v1.0/vapp/201" type="application/vnd.vmware.vcloud.vApp+xml"/><IsSourceDelete>true</IsSourceDelete></CloneVAppParams>
\ No newline at end of file
diff --git a/apis/vcloudexpress/src/main/java/org/jclouds/vcloud/VCloudExpressAsyncClient.java b/apis/vcloudexpress/src/main/java/org/jclouds/vcloud/VCloudExpressAsyncClient.java
index 68048ec..bbe3120 100644
--- a/apis/vcloudexpress/src/main/java/org/jclouds/vcloud/VCloudExpressAsyncClient.java
+++ b/apis/vcloudexpress/src/main/java/org/jclouds/vcloud/VCloudExpressAsyncClient.java
@@ -44,7 +44,7 @@
import org.jclouds.rest.annotations.ResponseParser;
import org.jclouds.rest.annotations.XMLResponseParser;
import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
-import org.jclouds.vcloud.binders.BindCloneVAppParamsToXmlPayload;
+import org.jclouds.vcloud.binders.BindCloneVCloudExpressVAppParamsToXmlPayload;
import org.jclouds.vcloud.binders.BindInstantiateVCloudExpressVAppTemplateParamsToXmlPayload;
import org.jclouds.vcloud.domain.Catalog;
import org.jclouds.vcloud.domain.Task;
@@ -163,7 +163,7 @@
@Produces("application/vnd.vmware.vcloud.cloneVAppParams+xml")
@Consumes(TASK_XML)
@XMLResponseParser(TaskHandler.class)
- @MapBinder(BindCloneVAppParamsToXmlPayload.class)
+ @MapBinder(BindCloneVCloudExpressVAppParamsToXmlPayload.class)
ListenableFuture<? extends Task> cloneVAppInVDC(@EndpointParam URI vdc, @PayloadParam("vApp") URI toClone,
@PayloadParam("newName") @ParamValidators(DnsNameValidator.class) String newName,
CloneVAppOptions... options);
diff --git a/apis/vcloudexpress/src/main/java/org/jclouds/vcloud/binders/BindCloneVAppParamsToXmlPayload.java b/apis/vcloudexpress/src/main/java/org/jclouds/vcloud/binders/BindCloneVCloudExpressVAppParamsToXmlPayload.java
similarity index 94%
rename from apis/vcloudexpress/src/main/java/org/jclouds/vcloud/binders/BindCloneVAppParamsToXmlPayload.java
rename to apis/vcloudexpress/src/main/java/org/jclouds/vcloud/binders/BindCloneVCloudExpressVAppParamsToXmlPayload.java
index 22cfb4a..2312dd9 100644
--- a/apis/vcloudexpress/src/main/java/org/jclouds/vcloud/binders/BindCloneVAppParamsToXmlPayload.java
+++ b/apis/vcloudexpress/src/main/java/org/jclouds/vcloud/binders/BindCloneVCloudExpressVAppParamsToXmlPayload.java
@@ -49,14 +49,14 @@
*
*/
@Singleton
-public class BindCloneVAppParamsToXmlPayload implements MapBinder {
+public class BindCloneVCloudExpressVAppParamsToXmlPayload implements MapBinder {
protected final String ns;
protected final String schema;
private final BindToStringPayload stringBinder;
@Inject
- public BindCloneVAppParamsToXmlPayload(BindToStringPayload stringBinder,
+ public BindCloneVCloudExpressVAppParamsToXmlPayload(BindToStringPayload stringBinder,
@Named(PROPERTY_VCLOUD_XML_NAMESPACE) String ns, @Named(PROPERTY_VCLOUD_XML_SCHEMA) String schema) {
this.ns = ns;
this.schema = schema;
@@ -93,7 +93,7 @@
XMLBuilder rootBuilder = buildRoot(newName, options.isDeploy(), options.isPowerOn());
if (options.getDescription() != null)
rootBuilder.e("Description").text(options.getDescription());
- rootBuilder.e("VApp").a("href", vApp).a("type", VCloudMediaType.VAPP_XML);
+ rootBuilder.e("VApp").a("xmlns", ns).a("href", vApp).a("type", VCloudMediaType.VAPP_XML);
Properties outputProperties = new Properties();
outputProperties.put(javax.xml.transform.OutputKeys.OMIT_XML_DECLARATION, "yes");
return rootBuilder.asString(outputProperties);
diff --git a/apis/vcloudexpress/src/test/java/org/jclouds/vcloud/binders/BindCloneVAppParamsToXmlPayloadTest.java b/apis/vcloudexpress/src/test/java/org/jclouds/vcloud/binders/BindCloneVCloudExpressVAppParamsToXmlPayloadTest.java
similarity index 91%
rename from apis/vcloudexpress/src/test/java/org/jclouds/vcloud/binders/BindCloneVAppParamsToXmlPayloadTest.java
rename to apis/vcloudexpress/src/test/java/org/jclouds/vcloud/binders/BindCloneVCloudExpressVAppParamsToXmlPayloadTest.java
index f90e4fc..6b94fb5 100644
--- a/apis/vcloudexpress/src/test/java/org/jclouds/vcloud/binders/BindCloneVAppParamsToXmlPayloadTest.java
+++ b/apis/vcloudexpress/src/test/java/org/jclouds/vcloud/binders/BindCloneVCloudExpressVAppParamsToXmlPayloadTest.java
@@ -47,7 +47,7 @@
* @author Adrian Cole
*/
@Test(groups = "unit")
-public class BindCloneVAppParamsToXmlPayloadTest {
+public class BindCloneVCloudExpressVAppParamsToXmlPayloadTest {
Injector injector = Guice.createInjector(new AbstractModule() {
@Override
@@ -70,7 +70,7 @@
request.setPayload(expected);
replay(request);
- BindCloneVAppParamsToXmlPayload binder = injector.getInstance(BindCloneVAppParamsToXmlPayload.class);
+ BindCloneVCloudExpressVAppParamsToXmlPayload binder = injector.getInstance(BindCloneVCloudExpressVAppParamsToXmlPayload.class);
Map<String, String> map = Maps.newHashMap();
map.put("newName", "new-linux-server");
@@ -88,7 +88,7 @@
request.setPayload(expected);
replay(request);
- BindCloneVAppParamsToXmlPayload binder = injector.getInstance(BindCloneVAppParamsToXmlPayload.class);
+ BindCloneVCloudExpressVAppParamsToXmlPayload binder = injector.getInstance(BindCloneVCloudExpressVAppParamsToXmlPayload.class);
Map<String, String> map = Maps.newHashMap();
map.put("newName", "my-vapp");
diff --git a/apis/vcloudexpress/src/test/java/org/jclouds/vcloud/binders/VCloudExpressBindCloneVAppParamsToXmlPayloadTest.java b/apis/vcloudexpress/src/test/java/org/jclouds/vcloud/binders/VCloudExpressBindCloneVAppParamsToXmlPayloadTest.java
deleted file mode 100644
index 0d3c0ea..0000000
--- a/apis/vcloudexpress/src/test/java/org/jclouds/vcloud/binders/VCloudExpressBindCloneVAppParamsToXmlPayloadTest.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/**
- *
- * Copyright (C) 2011 Cloud Conscious, LLC. <info@cloudconscious.com>
- *
- * ====================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ====================================================================
- */
-package org.jclouds.vcloud.binders;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.classextension.EasyMock.createMock;
-import static org.easymock.classextension.EasyMock.replay;
-import static org.easymock.classextension.EasyMock.verify;
-
-import java.io.IOException;
-import java.net.URI;
-import java.util.Map;
-import java.util.Properties;
-
-import org.jclouds.rest.internal.GeneratedHttpRequest;
-import org.jclouds.util.Strings2;
-import org.jclouds.vcloud.VCloudExpressPropertiesBuilder;
-import org.jclouds.vcloud.options.CloneVAppOptions;
-import org.testng.annotations.Test;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Maps;
-import com.google.inject.AbstractModule;
-import com.google.inject.Guice;
-import com.google.inject.Injector;
-import com.google.inject.name.Names;
-
-/**
- * Tests behavior of {@code BindCloneVAppParamsToXmlPayload}
- *
- * @author Adrian Cole
- */
-@Test(groups = "unit")
-public class VCloudExpressBindCloneVAppParamsToXmlPayloadTest {
- Injector injector = Guice.createInjector(new AbstractModule() {
-
- @Override
- protected void configure() {
- Properties props = new Properties();
- Names.bindProperties(binder(), checkNotNull(new VCloudExpressPropertiesBuilder(props).build(), "properties"));
- }
- });
-
- public void testWithDescriptionDeployOn() throws IOException {
- String expected = Strings2.toStringAndClose(getClass().getResourceAsStream("/cloneVApp.xml"));
-
- CloneVAppOptions options = new CloneVAppOptions().deploy().powerOn().withDescription(
- "The description of the new vApp");
- GeneratedHttpRequest<?> request = createMock(GeneratedHttpRequest.class);
- expect(request.getEndpoint()).andReturn(URI.create("http://localhost/key")).anyTimes();
- expect(request.getArgs()).andReturn(ImmutableList.<Object>of( options)).atLeastOnce();
- request.setPayload(expected);
- replay(request);
-
- BindCloneVAppParamsToXmlPayload binder = injector.getInstance(BindCloneVAppParamsToXmlPayload.class);
-
- Map<String, String> map = Maps.newHashMap();
- map.put("newName", "new-linux-server");
- map.put("vApp", "https://vcloud.safesecureweb.com/api/v0.8/vapp/201");
- binder.bindToRequest(request, map);
- verify(request);
- }
-
- public void testDefault() throws IOException {
- String expected = Strings2.toStringAndClose(getClass().getResourceAsStream("/cloneVApp-default.xml"));
-
- GeneratedHttpRequest<?> request = createMock(GeneratedHttpRequest.class);
- expect(request.getEndpoint()).andReturn(URI.create("http://localhost/key")).anyTimes();
- expect(request.getArgs()).andReturn(ImmutableList.<Object>of()).atLeastOnce();
- request.setPayload(expected);
- replay(request);
-
- BindCloneVAppParamsToXmlPayload binder = injector.getInstance(BindCloneVAppParamsToXmlPayload.class);
-
- Map<String, String> map = Maps.newHashMap();
- map.put("newName", "my-vapp");
- map.put("vApp", "https://vcloud.safesecureweb.com/api/v0.8/vapp/4181");
- binder.bindToRequest(request, map);
- verify(request);
- }
-}
diff --git a/common/trmk/src/main/java/org/jclouds/vcloud/terremark/binders/TerremarkBindCloneVAppParamsToXmlPayload.java b/common/trmk/src/main/java/org/jclouds/vcloud/terremark/binders/TerremarkBindCloneVAppParamsToXmlPayload.java
index 3410387..b611e67 100644
--- a/common/trmk/src/main/java/org/jclouds/vcloud/terremark/binders/TerremarkBindCloneVAppParamsToXmlPayload.java
+++ b/common/trmk/src/main/java/org/jclouds/vcloud/terremark/binders/TerremarkBindCloneVAppParamsToXmlPayload.java
@@ -27,7 +27,7 @@
import javax.xml.parsers.ParserConfigurationException;
import org.jclouds.rest.binders.BindToStringPayload;
-import org.jclouds.vcloud.binders.BindCloneVAppParamsToXmlPayload;
+import org.jclouds.vcloud.binders.BindCloneVCloudExpressVAppParamsToXmlPayload;
import com.google.inject.Inject;
import com.jamesmurty.utils.XMLBuilder;
@@ -38,7 +38,7 @@
*
*/
@Singleton
-public class TerremarkBindCloneVAppParamsToXmlPayload extends BindCloneVAppParamsToXmlPayload {
+public class TerremarkBindCloneVAppParamsToXmlPayload extends BindCloneVCloudExpressVAppParamsToXmlPayload {
@Inject
public TerremarkBindCloneVAppParamsToXmlPayload(BindToStringPayload stringBinder,