diff --git a/scm-clients/scm-client-impl/pom.xml b/scm-clients/scm-client-impl/pom.xml index 85416382fd..ee8f684717 100644 --- a/scm-clients/scm-client-impl/pom.xml +++ b/scm-clients/scm-client-impl/pom.xml @@ -45,30 +45,6 @@ ${jersey.version} - - sonia.net.ahc - jersey-ahc-client - 1.0.2.1 - - - jaxb-api - javax.xml.bind - - - jaxb-impl - com.sun.xml.bind - - - stax-api - stax - - - jersey-json - com.sun.jersey - - - - diff --git a/scm-clients/scm-client-impl/src/main/java/sonia/scm/client/JerseyClientProvider.java b/scm-clients/scm-client-impl/src/main/java/sonia/scm/client/JerseyClientProvider.java index 8c38f83eb1..48111de0d8 100644 --- a/scm-clients/scm-client-impl/src/main/java/sonia/scm/client/JerseyClientProvider.java +++ b/scm-clients/scm-client-impl/src/main/java/sonia/scm/client/JerseyClientProvider.java @@ -38,9 +38,6 @@ package sonia.scm.client; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.sonatype.spice.jersey.client.ahc.AhcHttpClient; -import org.sonatype.spice.jersey.client.ahc.config.DefaultAhcConfig; - import sonia.scm.ScmState; import sonia.scm.url.UrlProvider; import sonia.scm.url.UrlProviderFactory; @@ -49,11 +46,20 @@ import sonia.scm.util.Util; //~--- JDK imports ------------------------------------------------------------ +import com.sun.jersey.api.client.Client; +import com.sun.jersey.api.client.ClientHandlerException; +import com.sun.jersey.api.client.ClientRequest; import com.sun.jersey.api.client.ClientResponse; import com.sun.jersey.api.client.WebResource; +import com.sun.jersey.api.client.filter.ClientFilter; import com.sun.jersey.core.util.MultivaluedMapImpl; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + import javax.ws.rs.core.MultivaluedMap; +import javax.ws.rs.core.NewCookie; /** * @@ -100,7 +106,7 @@ public class JerseyClientProvider implements ScmClientProvider */ @Override public JerseyClientSession createSession(String url, String username, - String password) + String password) { AssertUtil.assertIsNotEmpty(url); @@ -111,59 +117,24 @@ public class JerseyClientProvider implements ScmClientProvider user = username; } - if (logger.isInfoEnabled()) - { - logger.info("create new session for {} with username {}", url, user); - } + logger.info("create new session for {} with username {}", url, user); UrlProvider urlProvider = UrlProviderFactory.createUrlProvider(url, UrlProviderFactory.TYPE_RESTAPI_XML); - DefaultAhcConfig config = new DefaultAhcConfig(); - AhcHttpClient client = AhcHttpClient.create(config); - ClientResponse response = null; + + Client client = Client.create(); + + client.addFilter(new CookieClientFilter()); + + ClientResponse response; if (Util.isNotEmpty(username) && Util.isNotEmpty(password)) { - String authUrl = urlProvider.getAuthenticationUrl(); - - if (logger.isDebugEnabled()) - { - logger.debug("try login at {}", authUrl); - } - - WebResource resource = ClientUtil.createResource(client, authUrl, - enableLogging); - - if (logger.isDebugEnabled()) - { - logger.debug("try login for {}", username); - } - - MultivaluedMap formData = new MultivaluedMapImpl(); - - formData.add("username", username); - formData.add("password", password); - response = resource.type("application/x-www-form-urlencoded").post( - ClientResponse.class, formData); + response = login(urlProvider, client, username, password); } else { - String stateUrl = urlProvider.getStateUrl(); - - if (logger.isDebugEnabled()) - { - logger.debug("retrive state from {}", stateUrl); - } - - WebResource resource = ClientUtil.createResource(client, stateUrl, - enableLogging); - - if (logger.isDebugEnabled()) - { - logger.debug("try anonymous login"); - } - - response = resource.get(ClientResponse.class); + response = state(urlProvider, client); } ClientUtil.checkResponse(response); @@ -172,10 +143,7 @@ public class JerseyClientProvider implements ScmClientProvider if (!state.isSuccess()) { - if (logger.isWarnEnabled()) - { - logger.warn("server returned state failed"); - } + logger.warn("server returned state failed"); throw new ScmClientException("create ScmClientSession failed"); } @@ -187,6 +155,122 @@ public class JerseyClientProvider implements ScmClientProvider return new JerseyClientSession(client, urlProvider, state); } + /** + * Method description + * + * + * @param urlProvider + * @param client + * @param username + * @param password + * + * @return + */ + private ClientResponse login(UrlProvider urlProvider, Client client, + String username, String password) + { + String authUrl = urlProvider.getAuthenticationUrl(); + + if (logger.isDebugEnabled()) + { + logger.debug("try login at {}", authUrl); + } + + WebResource resource = ClientUtil.createResource(client, authUrl, + enableLogging); + + if (logger.isDebugEnabled()) + { + logger.debug("try login for {}", username); + } + + MultivaluedMap formData = new MultivaluedMapImpl(); + + formData.add("username", username); + formData.add("password", password); + + return resource.type("application/x-www-form-urlencoded").post( + ClientResponse.class, formData); + } + + /** + * Method description + * + * + * @param urlProvider + * @param client + * + * @return + */ + private ClientResponse state(UrlProvider urlProvider, Client client) + { + String stateUrl = urlProvider.getStateUrl(); + + if (logger.isDebugEnabled()) + { + logger.debug("retrive state from {}", stateUrl); + } + + WebResource resource = ClientUtil.createResource(client, stateUrl, + enableLogging); + + if (logger.isDebugEnabled()) + { + logger.debug("try anonymous login"); + } + + return resource.get(ClientResponse.class); + } + + //~--- inner classes -------------------------------------------------------- + + /** + * Class description + * + * + * @version Enter version here..., 14/07/05 + * @author Enter your name here... + */ + private class CookieClientFilter extends ClientFilter + { + + /** + * Method description + * + * + * @param request + * + * @return + * + * @throws ClientHandlerException + */ + @Override + public ClientResponse handle(ClientRequest request) + throws ClientHandlerException + { + for (NewCookie c : cookies) + { + request.getHeaders().putSingle("Cookie", c); + } + + ClientResponse response = getNext().handle(request); + + if (response.getCookies() != null) + { + cookies.addAll(response.getCookies()); + } + + return response; + } + + //~--- fields ------------------------------------------------------------- + + /** Field description */ + private final List cookies = + Collections.synchronizedList(new ArrayList()); + } + + //~--- fields --------------------------------------------------------------- /** Field description */