package org.jboss.resteasy.utils; import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder; import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget; import java.net.MalformedURLException; import java.net.URI; import java.net.URL; /** * Utility class that provides a port number for the Resteasy embedded container. */ public class PortProviderUtil { private static final int DEFAULT_PORT = 8080; private static final String PORT_ENV_VAR_NAME = "RESTEASY_PORT"; private static final String PORT_PROPERTY_NAME = "org.jboss.resteasy.port"; private static final String HOST_PROPERTY_NAME = "node"; private static int port; // HOST_PROPERTY_NAME is enforced by maven-enforcer-plugin private static String host = System.getProperty(HOST_PROPERTY_NAME); public static final String ASYNC_JOB_SERVICE_CONTEXT_KEY = "resteasy.async.job.service.enabled"; private static boolean ipv6 = Boolean.parseBoolean(System.getProperty("ipv6")); /** * Initialize port. */ static { // Look up the configured port number, first checking an environment variable (RESTEASY_PORT), // then a system property (org.jboss.resteasy.port), and finally the default port (8080). boolean portSpecificInit = false; port = DEFAULT_PORT; String property = System.getenv(PORT_ENV_VAR_NAME); if (property != null) { try { port = Integer.parseInt(property); portSpecificInit = true; } catch (NumberFormatException e) { } } if (!portSpecificInit) { property = System.getProperty(PORT_PROPERTY_NAME); if (property != null) { try { port = Integer.parseInt(property); } catch (NumberFormatException e) { } } } } // /** // * Create a Resteasy deprecated ClientRequest object using the configured port. // * // * @param path the request path // * @return the ClientRequest object // */ // public static ClientRequest createClientRequest(String path, String testName) { // return new ClientRequest(generateURL(path, testName)); // } // // public static ClientRequest createClientRequest(ClientRequestFactory factory, String path, String testName) { // return factory.createRequest(generateURL(path, testName)); // } /** * Create a Resteasy client proxy with an empty base request path. * * @param clazz the client interface class * @return the proxy object */ public static <T> T createProxy(Class<T> clazz, String testName) { return createProxy(clazz, ""); } /** * Create a Resteasy client proxy. * * @param clazz the client interface class * @return the proxy object * @path the base request path */ public static <T> T createProxy(Class<T> clazz, String path, String testName) { ResteasyWebTarget target = (ResteasyWebTarget) ResteasyClientBuilder.newClient().target(generateURL(path, testName)); return target.proxy(clazz); } /** * Create a URI for the provided path, using the configured port * * @param path the request path * @return a full URI */ public static URI createURI(String path, String testName) { return URI.create(generateURL(path, testName)); } /** * Create a URL for the provided path, using the configured port * * @param path the request path * @return a full URL */ public static URL createURL(String path, String testName) throws MalformedURLException { return new URL(generateURL(path, testName)); } /** * Generate a base URL incorporating the configured port. * * @return a full URL */ public static String generateBaseUrl(String testName) { return generateURL("", testName); } /** * Generate a URL incorporating the configured port. * * @param path the path * @return a full URL */ public static String generateURL(String path, String testName) { // ipv4 if (!ipv6) { return String.format("http://%s:%d/%s%s", getHost(), getPort(), testName, path); } // ipv6 return String.format("http://[%s]:%d/%s%s", getHost(), getPort(), testName, path); } /** * Get port. * * @return The port number */ public static int getPort() { return port; } /** * Get host IP. * * @return The host IP */ public static String getHost() { return host; } /** * Get information about IPv6 connectivity. * * @return IPv6 connectivity. */ public static boolean isIpv6() { return ipv6; } }