mirror of https://github.com/apache/jclouds.git
Revert "[JCLOUDS-43] add scoped transaction support to ultradns-ws"
This reverts commit f88609d1dd
.
This commit is contained in:
parent
af7c003582
commit
834373354f
|
@ -1,133 +0,0 @@
|
||||||
/*
|
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
||||||
* contributor license agreements. See the NOTICE file distributed with
|
|
||||||
* this work for additional information regarding copyright ownership.
|
|
||||||
* The ASF licenses this file to You 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.ultradns.ws;
|
|
||||||
|
|
||||||
import static com.google.common.base.Preconditions.checkState;
|
|
||||||
import static java.lang.String.format;
|
|
||||||
|
|
||||||
import javax.inject.Inject;
|
|
||||||
|
|
||||||
import org.jclouds.http.HttpException;
|
|
||||||
import org.jclouds.http.HttpRequest;
|
|
||||||
import org.jclouds.http.HttpRequestFilter;
|
|
||||||
import org.jclouds.rest.annotations.Transform;
|
|
||||||
|
|
||||||
import com.google.common.base.Function;
|
|
||||||
import com.google.inject.AbstractModule;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Adds support for implicit transactions.
|
|
||||||
*
|
|
||||||
* @author Adrian Cole
|
|
||||||
*/
|
|
||||||
public class ScopedTransaction {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets a scoped transaction. Add to rest calls that start a transaction.
|
|
||||||
* Make sure that these note a possible IllegalStateException when a
|
|
||||||
* transaction is already in progress.
|
|
||||||
*
|
|
||||||
* <p/>
|
|
||||||
*
|
|
||||||
* ex.
|
|
||||||
*
|
|
||||||
* <pre>
|
|
||||||
* ...
|
|
||||||
* @Transform(ScopedTransaction.Set.class)
|
|
||||||
* String start() throws IllegalStateException;
|
|
||||||
* </pre>
|
|
||||||
*
|
|
||||||
* @see Transform
|
|
||||||
*/
|
|
||||||
public static class Set implements Function<String, String> {
|
|
||||||
private final ScopedTransaction scope;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private Set(ScopedTransaction scope) {
|
|
||||||
this.scope = scope;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String apply(String in) {
|
|
||||||
checkState(scope.transactionId.get() == null, "A transaction is already in progress");
|
|
||||||
scope.transactionId.set(in);
|
|
||||||
return in;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Removes a scoped transaction, if present. Add to rest calls that commit or
|
|
||||||
* rollback a transaction.
|
|
||||||
*
|
|
||||||
* <p/>
|
|
||||||
*
|
|
||||||
* ex.
|
|
||||||
*
|
|
||||||
* <pre>
|
|
||||||
* ...
|
|
||||||
* @Transform(ScopedTransaction.Invalidate.class)
|
|
||||||
* void rollback(String txId);
|
|
||||||
* </pre>
|
|
||||||
*
|
|
||||||
* @see Transform
|
|
||||||
*/
|
|
||||||
public static class Remove implements Function<Void, Void> {
|
|
||||||
private final ScopedTransaction scope;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private Remove(ScopedTransaction scope) {
|
|
||||||
this.scope = scope;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Void apply(Void in) {
|
|
||||||
scope.transactionId.remove();
|
|
||||||
return in;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class Filter implements HttpRequestFilter {
|
|
||||||
private final ScopedTransaction scope;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private Filter(ScopedTransaction scope) {
|
|
||||||
this.scope = scope;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HttpRequest filter(HttpRequest request) throws HttpException {
|
|
||||||
String transactionId = scope.transactionId.get();
|
|
||||||
if (transactionId == null)
|
|
||||||
return request;
|
|
||||||
String body = request.getPayload().getRawContent().toString();
|
|
||||||
body = body.replace("<transactionID />", format("<transactionID>%s</transactionID>", transactionId));
|
|
||||||
return request.toBuilder().payload(body).build();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* In order to support implicit transactions, this module must be installed.
|
|
||||||
*/
|
|
||||||
public static class Module extends AbstractModule {
|
|
||||||
public void configure() {
|
|
||||||
ScopedTransaction scope = new ScopedTransaction();
|
|
||||||
bind(ScopedTransaction.class).toInstance(scope);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private final ThreadLocal<String> transactionId = new ThreadLocal<String>();
|
|
||||||
}
|
|
|
@ -23,9 +23,6 @@ import org.jclouds.apis.ApiMetadata;
|
||||||
import org.jclouds.rest.internal.BaseHttpApiMetadata;
|
import org.jclouds.rest.internal.BaseHttpApiMetadata;
|
||||||
import org.jclouds.ultradns.ws.config.UltraDNSWSHttpApiModule;
|
import org.jclouds.ultradns.ws.config.UltraDNSWSHttpApiModule;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableSet;
|
|
||||||
import com.google.inject.Module;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of {@link ApiMetadata} for Neustar's UltraDNSWS api.
|
* Implementation of {@link ApiMetadata} for Neustar's UltraDNSWS api.
|
||||||
*
|
*
|
||||||
|
@ -62,9 +59,7 @@ public class UltraDNSWSApiMetadata extends BaseHttpApiMetadata<UltraDNSWSApi> {
|
||||||
.documentation(URI.create("https://portal.ultradns.com/static/docs/NUS_API_XML_SOAP.pdf"))
|
.documentation(URI.create("https://portal.ultradns.com/static/docs/NUS_API_XML_SOAP.pdf"))
|
||||||
.defaultEndpoint("https://ultra-api.ultradns.com:8443/UltraDNS_WS/v01")
|
.defaultEndpoint("https://ultra-api.ultradns.com:8443/UltraDNS_WS/v01")
|
||||||
.defaultProperties(UltraDNSWSApiMetadata.defaultProperties())
|
.defaultProperties(UltraDNSWSApiMetadata.defaultProperties())
|
||||||
.defaultModules(ImmutableSet.<Class<? extends Module>> builder()
|
.defaultModule(UltraDNSWSHttpApiModule.class);
|
||||||
.add(UltraDNSWSHttpApiModule.class)
|
|
||||||
.add(ScopedTransaction.Module.class).build());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -30,7 +30,6 @@ import org.jclouds.rest.annotations.PayloadParam;
|
||||||
import org.jclouds.rest.annotations.RequestFilters;
|
import org.jclouds.rest.annotations.RequestFilters;
|
||||||
import org.jclouds.rest.annotations.VirtualHost;
|
import org.jclouds.rest.annotations.VirtualHost;
|
||||||
import org.jclouds.rest.annotations.XMLResponseParser;
|
import org.jclouds.rest.annotations.XMLResponseParser;
|
||||||
import org.jclouds.ultradns.ws.ScopedTransaction;
|
|
||||||
import org.jclouds.ultradns.ws.binders.DirectionalGroupCoordinatesToXML;
|
import org.jclouds.ultradns.ws.binders.DirectionalGroupCoordinatesToXML;
|
||||||
import org.jclouds.ultradns.ws.domain.AccountLevelGroup;
|
import org.jclouds.ultradns.ws.domain.AccountLevelGroup;
|
||||||
import org.jclouds.ultradns.ws.domain.DirectionalGroup;
|
import org.jclouds.ultradns.ws.domain.DirectionalGroup;
|
||||||
|
@ -50,10 +49,7 @@ import com.google.common.collect.FluentIterable;
|
||||||
* @see <a href="https://www.ultradns.net/api/NUS_API_XML_SOAP.pdf" />
|
* @see <a href="https://www.ultradns.net/api/NUS_API_XML_SOAP.pdf" />
|
||||||
* @author Adrian Cole
|
* @author Adrian Cole
|
||||||
*/
|
*/
|
||||||
@RequestFilters({
|
@RequestFilters(SOAPWrapWithPasswordAuth.class)
|
||||||
ScopedTransaction.Filter.class,
|
|
||||||
SOAPWrapWithPasswordAuth.class
|
|
||||||
})
|
|
||||||
@VirtualHost
|
@VirtualHost
|
||||||
public interface DirectionalGroupApi {
|
public interface DirectionalGroupApi {
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,6 @@ import org.jclouds.rest.annotations.PayloadParam;
|
||||||
import org.jclouds.rest.annotations.RequestFilters;
|
import org.jclouds.rest.annotations.RequestFilters;
|
||||||
import org.jclouds.rest.annotations.VirtualHost;
|
import org.jclouds.rest.annotations.VirtualHost;
|
||||||
import org.jclouds.rest.annotations.XMLResponseParser;
|
import org.jclouds.rest.annotations.XMLResponseParser;
|
||||||
import org.jclouds.ultradns.ws.ScopedTransaction;
|
|
||||||
import org.jclouds.ultradns.ws.UltraDNSWSApi;
|
import org.jclouds.ultradns.ws.UltraDNSWSApi;
|
||||||
import org.jclouds.ultradns.ws.UltraDNSWSExceptions.DirectionalGroupOverlapException;
|
import org.jclouds.ultradns.ws.UltraDNSWSExceptions.DirectionalGroupOverlapException;
|
||||||
import org.jclouds.ultradns.ws.UltraDNSWSExceptions.ResourceAlreadyExistsException;
|
import org.jclouds.ultradns.ws.UltraDNSWSExceptions.ResourceAlreadyExistsException;
|
||||||
|
@ -54,10 +53,7 @@ import com.google.common.collect.FluentIterable;
|
||||||
* @see <a href="https://www.ultradns.net/api/NUS_API_XML_SOAP.pdf" />
|
* @see <a href="https://www.ultradns.net/api/NUS_API_XML_SOAP.pdf" />
|
||||||
* @author Adrian Cole
|
* @author Adrian Cole
|
||||||
*/
|
*/
|
||||||
@RequestFilters({
|
@RequestFilters(SOAPWrapWithPasswordAuth.class)
|
||||||
ScopedTransaction.Filter.class,
|
|
||||||
SOAPWrapWithPasswordAuth.class
|
|
||||||
})
|
|
||||||
@VirtualHost
|
@VirtualHost
|
||||||
public interface DirectionalPoolApi {
|
public interface DirectionalPoolApi {
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,6 @@ import org.jclouds.rest.annotations.PayloadParam;
|
||||||
import org.jclouds.rest.annotations.RequestFilters;
|
import org.jclouds.rest.annotations.RequestFilters;
|
||||||
import org.jclouds.rest.annotations.VirtualHost;
|
import org.jclouds.rest.annotations.VirtualHost;
|
||||||
import org.jclouds.rest.annotations.XMLResponseParser;
|
import org.jclouds.rest.annotations.XMLResponseParser;
|
||||||
import org.jclouds.ultradns.ws.ScopedTransaction;
|
|
||||||
import org.jclouds.ultradns.ws.UltraDNSWSExceptions.ResourceAlreadyExistsException;
|
import org.jclouds.ultradns.ws.UltraDNSWSExceptions.ResourceAlreadyExistsException;
|
||||||
import org.jclouds.ultradns.ws.binders.ZoneAndResourceRecordToXML;
|
import org.jclouds.ultradns.ws.binders.ZoneAndResourceRecordToXML;
|
||||||
import org.jclouds.ultradns.ws.domain.ResourceRecord;
|
import org.jclouds.ultradns.ws.domain.ResourceRecord;
|
||||||
|
@ -44,10 +43,7 @@ import com.google.common.collect.FluentIterable;
|
||||||
* @see <a href="https://www.ultradns.net/api/NUS_API_XML_SOAP.pdf" />
|
* @see <a href="https://www.ultradns.net/api/NUS_API_XML_SOAP.pdf" />
|
||||||
* @author Adrian Cole
|
* @author Adrian Cole
|
||||||
*/
|
*/
|
||||||
@RequestFilters({
|
@RequestFilters(SOAPWrapWithPasswordAuth.class)
|
||||||
ScopedTransaction.Filter.class,
|
|
||||||
SOAPWrapWithPasswordAuth.class
|
|
||||||
})
|
|
||||||
@VirtualHost
|
@VirtualHost
|
||||||
public interface ResourceRecordApi {
|
public interface ResourceRecordApi {
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,6 @@ import org.jclouds.rest.annotations.PayloadParam;
|
||||||
import org.jclouds.rest.annotations.RequestFilters;
|
import org.jclouds.rest.annotations.RequestFilters;
|
||||||
import org.jclouds.rest.annotations.VirtualHost;
|
import org.jclouds.rest.annotations.VirtualHost;
|
||||||
import org.jclouds.rest.annotations.XMLResponseParser;
|
import org.jclouds.rest.annotations.XMLResponseParser;
|
||||||
import org.jclouds.ultradns.ws.ScopedTransaction;
|
|
||||||
import org.jclouds.ultradns.ws.UltraDNSWSExceptions.ResourceAlreadyExistsException;
|
import org.jclouds.ultradns.ws.UltraDNSWSExceptions.ResourceAlreadyExistsException;
|
||||||
import org.jclouds.ultradns.ws.domain.ResourceRecord;
|
import org.jclouds.ultradns.ws.domain.ResourceRecord;
|
||||||
import org.jclouds.ultradns.ws.domain.ResourceRecordDetail;
|
import org.jclouds.ultradns.ws.domain.ResourceRecordDetail;
|
||||||
|
@ -46,10 +45,7 @@ import com.google.common.collect.FluentIterable;
|
||||||
* @see <a href="https://www.ultradns.net/api/NUS_API_XML_SOAP.pdf" />
|
* @see <a href="https://www.ultradns.net/api/NUS_API_XML_SOAP.pdf" />
|
||||||
* @author Adrian Cole
|
* @author Adrian Cole
|
||||||
*/
|
*/
|
||||||
@RequestFilters({
|
@RequestFilters(SOAPWrapWithPasswordAuth.class)
|
||||||
ScopedTransaction.Filter.class,
|
|
||||||
SOAPWrapWithPasswordAuth.class
|
|
||||||
})
|
|
||||||
@VirtualHost
|
@VirtualHost
|
||||||
public interface RoundRobinPoolApi {
|
public interface RoundRobinPoolApi {
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,6 @@ import org.jclouds.rest.annotations.PayloadParam;
|
||||||
import org.jclouds.rest.annotations.RequestFilters;
|
import org.jclouds.rest.annotations.RequestFilters;
|
||||||
import org.jclouds.rest.annotations.VirtualHost;
|
import org.jclouds.rest.annotations.VirtualHost;
|
||||||
import org.jclouds.rest.annotations.XMLResponseParser;
|
import org.jclouds.rest.annotations.XMLResponseParser;
|
||||||
import org.jclouds.ultradns.ws.ScopedTransaction;
|
|
||||||
import org.jclouds.ultradns.ws.domain.Task;
|
import org.jclouds.ultradns.ws.domain.Task;
|
||||||
import org.jclouds.ultradns.ws.filters.SOAPWrapWithPasswordAuth;
|
import org.jclouds.ultradns.ws.filters.SOAPWrapWithPasswordAuth;
|
||||||
import org.jclouds.ultradns.ws.xml.ElementTextHandler;
|
import org.jclouds.ultradns.ws.xml.ElementTextHandler;
|
||||||
|
@ -42,10 +41,7 @@ import com.google.common.collect.FluentIterable;
|
||||||
* @see <a href="https://www.ultradns.net/api/NUS_API_XML_SOAP.pdf" />
|
* @see <a href="https://www.ultradns.net/api/NUS_API_XML_SOAP.pdf" />
|
||||||
* @author Adrian Cole
|
* @author Adrian Cole
|
||||||
*/
|
*/
|
||||||
@RequestFilters({
|
@RequestFilters(SOAPWrapWithPasswordAuth.class)
|
||||||
ScopedTransaction.Filter.class,
|
|
||||||
SOAPWrapWithPasswordAuth.class
|
|
||||||
})
|
|
||||||
@VirtualHost
|
@VirtualHost
|
||||||
public interface TaskApi {
|
public interface TaskApi {
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -31,7 +31,6 @@ import org.jclouds.rest.annotations.PayloadParam;
|
||||||
import org.jclouds.rest.annotations.RequestFilters;
|
import org.jclouds.rest.annotations.RequestFilters;
|
||||||
import org.jclouds.rest.annotations.VirtualHost;
|
import org.jclouds.rest.annotations.VirtualHost;
|
||||||
import org.jclouds.rest.annotations.XMLResponseParser;
|
import org.jclouds.rest.annotations.XMLResponseParser;
|
||||||
import org.jclouds.ultradns.ws.ScopedTransaction;
|
|
||||||
import org.jclouds.ultradns.ws.UltraDNSWSExceptions.ResourceAlreadyExistsException;
|
import org.jclouds.ultradns.ws.UltraDNSWSExceptions.ResourceAlreadyExistsException;
|
||||||
import org.jclouds.ultradns.ws.binders.UpdatePoolRecordToXML;
|
import org.jclouds.ultradns.ws.binders.UpdatePoolRecordToXML;
|
||||||
import org.jclouds.ultradns.ws.domain.PoolRecordSpec;
|
import org.jclouds.ultradns.ws.domain.PoolRecordSpec;
|
||||||
|
@ -53,10 +52,7 @@ import com.google.common.collect.FluentIterable;
|
||||||
* @see <a href="https://www.ultradns.net/api/NUS_API_XML_SOAP.pdf" />
|
* @see <a href="https://www.ultradns.net/api/NUS_API_XML_SOAP.pdf" />
|
||||||
* @author Adrian Cole
|
* @author Adrian Cole
|
||||||
*/
|
*/
|
||||||
@RequestFilters({
|
@RequestFilters(SOAPWrapWithPasswordAuth.class)
|
||||||
ScopedTransaction.Filter.class,
|
|
||||||
SOAPWrapWithPasswordAuth.class
|
|
||||||
})
|
|
||||||
@VirtualHost
|
@VirtualHost
|
||||||
public interface TrafficControllerPoolApi {
|
public interface TrafficControllerPoolApi {
|
||||||
|
|
||||||
|
|
|
@ -25,30 +25,13 @@ import org.jclouds.rest.annotations.Fallback;
|
||||||
import org.jclouds.rest.annotations.Payload;
|
import org.jclouds.rest.annotations.Payload;
|
||||||
import org.jclouds.rest.annotations.PayloadParam;
|
import org.jclouds.rest.annotations.PayloadParam;
|
||||||
import org.jclouds.rest.annotations.RequestFilters;
|
import org.jclouds.rest.annotations.RequestFilters;
|
||||||
import org.jclouds.rest.annotations.Transform;
|
|
||||||
import org.jclouds.rest.annotations.VirtualHost;
|
import org.jclouds.rest.annotations.VirtualHost;
|
||||||
import org.jclouds.rest.annotations.XMLResponseParser;
|
import org.jclouds.rest.annotations.XMLResponseParser;
|
||||||
import org.jclouds.ultradns.ws.ScopedTransaction;
|
|
||||||
import org.jclouds.ultradns.ws.UltraDNSWSExceptions.TooManyTransactionsException;
|
import org.jclouds.ultradns.ws.UltraDNSWSExceptions.TooManyTransactionsException;
|
||||||
import org.jclouds.ultradns.ws.filters.SOAPWrapWithPasswordAuth;
|
import org.jclouds.ultradns.ws.filters.SOAPWrapWithPasswordAuth;
|
||||||
import org.jclouds.ultradns.ws.xml.ElementTextHandler;
|
import org.jclouds.ultradns.ws.xml.ElementTextHandler;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds transaction support when performing multiple write commands.
|
|
||||||
*
|
|
||||||
* <p/>
|
|
||||||
* ex.
|
|
||||||
*
|
|
||||||
* <pre>
|
|
||||||
* String txId = ultraDNSApi.getTransactionApi().start();
|
|
||||||
* try {
|
|
||||||
* // perform operations
|
|
||||||
* ultraDNSApi.getTransactionApi().commit(txId);
|
|
||||||
* } catch (Throwable t) {
|
|
||||||
* ultraDNSApi.getTransactionApi().rollback(txId);
|
|
||||||
* throw propagate(t);
|
|
||||||
* }
|
|
||||||
* </pre>
|
|
||||||
*
|
*
|
||||||
* @see <a href="https://ultra-api.ultradns.com:8443/UltraDNS_WS/v01?wsdl" />
|
* @see <a href="https://ultra-api.ultradns.com:8443/UltraDNS_WS/v01?wsdl" />
|
||||||
* @see <a href="https://www.ultradns.net/api/NUS_API_XML_SOAP.pdf" />
|
* @see <a href="https://www.ultradns.net/api/NUS_API_XML_SOAP.pdf" />
|
||||||
|
@ -65,15 +48,12 @@ public interface TransactionApi {
|
||||||
* @return id of the transaction created
|
* @return id of the transaction created
|
||||||
* @throws TooManyTransactionsException
|
* @throws TooManyTransactionsException
|
||||||
* if the maximum concurrent exception limit was hit.
|
* if the maximum concurrent exception limit was hit.
|
||||||
* @throws IllegalStateException
|
|
||||||
* if another transaction is in progress.
|
|
||||||
*/
|
*/
|
||||||
@Named("startTransaction")
|
@Named("startTransaction")
|
||||||
@POST
|
@POST
|
||||||
@XMLResponseParser(ElementTextHandler.TransactionID.class)
|
@XMLResponseParser(ElementTextHandler.TransactionID.class)
|
||||||
@Payload("<v01:startTransaction/>")
|
@Payload("<v01:startTransaction/>")
|
||||||
@Transform(ScopedTransaction.Set.class)
|
String start() throws TooManyTransactionsException;
|
||||||
String start() throws TooManyTransactionsException, IllegalStateException;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This request commits all of a transaction’s requests and writes them to
|
* This request commits all of a transaction’s requests and writes them to
|
||||||
|
@ -87,7 +67,6 @@ public interface TransactionApi {
|
||||||
@Named("commitTransaction")
|
@Named("commitTransaction")
|
||||||
@POST
|
@POST
|
||||||
@Payload("<v01:commitTransaction><transactionID>{transactionID}</transactionID></v01:commitTransaction>")
|
@Payload("<v01:commitTransaction><transactionID>{transactionID}</transactionID></v01:commitTransaction>")
|
||||||
@Transform(ScopedTransaction.Remove.class)
|
|
||||||
void commit(@PayloadParam("transactionID") String transactionID) throws ResourceNotFoundException;
|
void commit(@PayloadParam("transactionID") String transactionID) throws ResourceNotFoundException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -101,6 +80,5 @@ public interface TransactionApi {
|
||||||
@POST
|
@POST
|
||||||
@Payload("<v01:rollbackTransaction><transactionID>{transactionID}</transactionID></v01:rollbackTransaction>")
|
@Payload("<v01:rollbackTransaction><transactionID>{transactionID}</transactionID></v01:rollbackTransaction>")
|
||||||
@Fallback(VoidOnNotFoundOr404.class)
|
@Fallback(VoidOnNotFoundOr404.class)
|
||||||
@Transform(ScopedTransaction.Remove.class)
|
|
||||||
void rollback(@PayloadParam("transactionID") String transactionID);
|
void rollback(@PayloadParam("transactionID") String transactionID);
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,6 @@ import org.jclouds.rest.annotations.PayloadParam;
|
||||||
import org.jclouds.rest.annotations.RequestFilters;
|
import org.jclouds.rest.annotations.RequestFilters;
|
||||||
import org.jclouds.rest.annotations.VirtualHost;
|
import org.jclouds.rest.annotations.VirtualHost;
|
||||||
import org.jclouds.rest.annotations.XMLResponseParser;
|
import org.jclouds.rest.annotations.XMLResponseParser;
|
||||||
import org.jclouds.ultradns.ws.ScopedTransaction;
|
|
||||||
import org.jclouds.ultradns.ws.UltraDNSWSExceptions.ResourceAlreadyExistsException;
|
import org.jclouds.ultradns.ws.UltraDNSWSExceptions.ResourceAlreadyExistsException;
|
||||||
import org.jclouds.ultradns.ws.domain.Zone;
|
import org.jclouds.ultradns.ws.domain.Zone;
|
||||||
import org.jclouds.ultradns.ws.domain.Zone.Type;
|
import org.jclouds.ultradns.ws.domain.Zone.Type;
|
||||||
|
@ -45,10 +44,7 @@ import com.google.common.collect.FluentIterable;
|
||||||
* @see <a href="https://www.ultradns.net/api/NUS_API_XML_SOAP.pdf" />
|
* @see <a href="https://www.ultradns.net/api/NUS_API_XML_SOAP.pdf" />
|
||||||
* @author Adrian Cole
|
* @author Adrian Cole
|
||||||
*/
|
*/
|
||||||
@RequestFilters({
|
@RequestFilters(SOAPWrapWithPasswordAuth.class)
|
||||||
ScopedTransaction.Filter.class,
|
|
||||||
SOAPWrapWithPasswordAuth.class
|
|
||||||
})
|
|
||||||
@VirtualHost
|
@VirtualHost
|
||||||
public interface ZoneApi {
|
public interface ZoneApi {
|
||||||
|
|
||||||
|
|
|
@ -1,54 +0,0 @@
|
||||||
/*
|
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
||||||
* contributor license agreements. See the NOTICE file distributed with
|
|
||||||
* this work for additional information regarding copyright ownership.
|
|
||||||
* The ASF licenses this file to You 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.ultradns.ws;
|
|
||||||
import static com.google.common.net.HttpHeaders.HOST;
|
|
||||||
import static javax.ws.rs.HttpMethod.POST;
|
|
||||||
import static javax.ws.rs.core.Response.Status.OK;
|
|
||||||
|
|
||||||
import org.jclouds.http.HttpRequest;
|
|
||||||
import org.jclouds.http.HttpResponse;
|
|
||||||
import org.jclouds.ultradns.ws.UltraDNSWSApi;
|
|
||||||
import org.jclouds.ultradns.ws.internal.BaseUltraDNSWSApiExpectTest;
|
|
||||||
import org.testng.annotations.Test;
|
|
||||||
/**
|
|
||||||
* @author Adrian Cole
|
|
||||||
*/
|
|
||||||
@Test(groups = "unit", testName = "ScopedTransactionExpectTest")
|
|
||||||
public class ScopedTransactionExpectTest extends BaseUltraDNSWSApiExpectTest {
|
|
||||||
HttpRequest start = HttpRequest.builder().method(POST)
|
|
||||||
.endpoint("https://ultra-api.ultradns.com:8443/UltraDNS_WS/v01")
|
|
||||||
.addHeader(HOST, "ultra-api.ultradns.com:8443")
|
|
||||||
.payload(payloadFromResourceWithContentType("/start_tx.xml", "application/xml")).build();
|
|
||||||
|
|
||||||
HttpResponse startResponse = HttpResponse.builder().statusCode(OK.getStatusCode())
|
|
||||||
.payload(payloadFromResourceWithContentType("/tx_started.xml", "application/xml")).build();
|
|
||||||
|
|
||||||
HttpRequest createWithTx = HttpRequest.builder().method(POST)
|
|
||||||
.endpoint("https://ultra-api.ultradns.com:8443/UltraDNS_WS/v01")
|
|
||||||
.addHeader(HOST, "ultra-api.ultradns.com:8443")
|
|
||||||
.payload(payloadFromResourceWithContentType("/create_zone_tx.xml", "application/xml")).build();
|
|
||||||
|
|
||||||
HttpResponse createResponse = HttpResponse.builder().statusCode(OK.getStatusCode())
|
|
||||||
.payload(payloadFromResourceWithContentType("/zone_created.xml", "application/xml")).build();
|
|
||||||
|
|
||||||
public void testAddTransactionIdWhenTransactionStarted() {
|
|
||||||
UltraDNSWSApi success = requestsSendResponses(start, startResponse, createWithTx, createResponse);
|
|
||||||
|
|
||||||
success.getTransactionApi().start();
|
|
||||||
success.getZoneApi().createInAccount("jclouds.org.", "AAAAAAAAAAAAAAAA");
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,82 +0,0 @@
|
||||||
/*
|
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
||||||
* contributor license agreements. See the NOTICE file distributed with
|
|
||||||
* this work for additional information regarding copyright ownership.
|
|
||||||
* The ASF licenses this file to You 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.ultradns.ws;
|
|
||||||
|
|
||||||
import static java.util.logging.Logger.getAnonymousLogger;
|
|
||||||
import static org.jclouds.ultradns.ws.domain.ResourceRecord.rrBuilder;
|
|
||||||
import static org.testng.Assert.assertEquals;
|
|
||||||
import static org.testng.Assert.assertNotNull;
|
|
||||||
import static org.testng.Assert.assertNull;
|
|
||||||
|
|
||||||
import org.jclouds.ultradns.ws.domain.ResourceRecord;
|
|
||||||
import org.jclouds.ultradns.ws.domain.ZoneProperties;
|
|
||||||
import org.jclouds.ultradns.ws.internal.BaseUltraDNSWSApiLiveTest;
|
|
||||||
import org.testng.annotations.Test;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Adrian Cole
|
|
||||||
*/
|
|
||||||
@Test(groups = "live", testName = "ScopedTransactionLiveTest")
|
|
||||||
public class ScopedTransactionLiveTest extends BaseUltraDNSWSApiLiveTest {
|
|
||||||
|
|
||||||
ResourceRecord mx = rrBuilder().name("mail." + zoneName)
|
|
||||||
.type(15)
|
|
||||||
.ttl(1800)
|
|
||||||
.infoValue(10)
|
|
||||||
.infoValue("maileast.jclouds.org.").build();
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testMultiStepTransactionOnCommit() {
|
|
||||||
String txId = api.getTransactionApi().start();
|
|
||||||
assertNotNull(txId);
|
|
||||||
getAnonymousLogger().info("starting transaction: " + txId);
|
|
||||||
try {
|
|
||||||
api.getZoneApi().createInAccount(zoneName, account.getId());
|
|
||||||
api.getResourceRecordApiForZone(zoneName).create(mx);
|
|
||||||
|
|
||||||
// can't read uncommitted stuff
|
|
||||||
assertNull(api.getZoneApi().get(zoneName));
|
|
||||||
|
|
||||||
// commit the tx
|
|
||||||
api.getTransactionApi().commit(txId);
|
|
||||||
|
|
||||||
// now we can read it
|
|
||||||
ZoneProperties newZone = api.getZoneApi().get(zoneName);
|
|
||||||
assertEquals(newZone.getName(), zoneName);
|
|
||||||
assertEquals(newZone.getResourceRecordCount(), 6);
|
|
||||||
} finally {
|
|
||||||
// in case an assertion problem or otherwise occurred in the test.
|
|
||||||
api.getTransactionApi().rollback(txId);
|
|
||||||
api.getZoneApi().delete(zoneName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testScopedTransactionOnRollback() {
|
|
||||||
String txId = api.getTransactionApi().start();
|
|
||||||
assertNotNull(txId);
|
|
||||||
getAnonymousLogger().info("starting transaction: " + txId);
|
|
||||||
try {
|
|
||||||
api.getZoneApi().createInAccount(zoneName, account.getId());
|
|
||||||
api.getTransactionApi().rollback(txId);
|
|
||||||
assertNull(api.getZoneApi().get(zoneName));
|
|
||||||
} finally {
|
|
||||||
// in case an assertion problem or otherwise occurred in the test.
|
|
||||||
api.getZoneApi().delete(zoneName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1 +0,0 @@
|
||||||
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v01="http://webservice.api.ultra.neustar.com/v01/"><soapenv:Header><wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><wsse:UsernameToken><wsse:Username>identity</wsse:Username><wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">credential</wsse:Password></wsse:UsernameToken></wsse:Security></soapenv:Header><soapenv:Body><v01:createPrimaryZone><transactionID>jclouds-37562</transactionID><accountId>AAAAAAAAAAAAAAAA</accountId><zoneName>jclouds.org.</zoneName><forceImport>false</forceImport></v01:createPrimaryZone></soapenv:Body></soapenv:Envelope>
|
|
Loading…
Reference in New Issue