fix: Deprecate AppiumProtocolHandshake class by mykola-mokhnach · Pull Request #2173 · appium/java-client

Expand Up @@ -16,108 +16,13 @@
package io.appium.java_client.remote;
import org.openqa.selenium.Capabilities; import org.openqa.selenium.ImmutableCapabilities; import org.openqa.selenium.SessionNotCreatedException; import org.openqa.selenium.WebDriverException; import org.openqa.selenium.internal.Either; import org.openqa.selenium.json.Json; import org.openqa.selenium.json.JsonOutput; import org.openqa.selenium.remote.Command; import org.openqa.selenium.remote.NewSessionPayload; import org.openqa.selenium.remote.ProtocolHandshake; import org.openqa.selenium.remote.http.Contents; import org.openqa.selenium.remote.http.HttpHandler;
import java.io.IOException; import java.io.StringWriter; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Map; import java.util.Set; import java.util.stream.Stream;
@SuppressWarnings("UnstableApiUsage") /** * This class is deprecated and should be removed. * * @deprecated Use ProtocolHandshake instead. */ @Deprecated public class AppiumProtocolHandshake extends ProtocolHandshake { private static void writeJsonPayload(NewSessionPayload srcPayload, Appendable destination) { try (JsonOutput json = new Json().newOutput(destination)) { json.beginObject();
json.name("capabilities"); json.beginObject();
json.name("firstMatch"); json.beginArray(); json.beginObject(); json.endObject(); json.endArray();
json.name("alwaysMatch"); try { Method getW3CMethod = NewSessionPayload.class.getDeclaredMethod("getW3C"); getW3CMethod.setAccessible(true); //noinspection unchecked,resource ((Stream<Map<String, Object>>) getW3CMethod.invoke(srcPayload)) .findFirst() .map(json::write) .orElseGet(() -> { json.beginObject(); json.endObject(); return null; }); } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) { throw new WebDriverException(e); }
json.endObject(); // Close "capabilities" object
try { Method writeMetaDataMethod = NewSessionPayload.class.getDeclaredMethod( "writeMetaData", JsonOutput.class); writeMetaDataMethod.setAccessible(true); writeMetaDataMethod.invoke(srcPayload, json); } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) { throw new WebDriverException(e); }
json.endObject(); } }
@Override public Result createSession(HttpHandler client, Command command) throws IOException { //noinspection unchecked Capabilities desired = ((Set<Map<String, Object>>) command.getParameters().get("capabilities")) .stream() .findAny() .map(ImmutableCapabilities::new) .orElseGet(ImmutableCapabilities::new); try (NewSessionPayload payload = NewSessionPayload.create(desired)) { Either<SessionNotCreatedException, Result> result = createSession(client, payload); if (result.isRight()) { return result.right(); } throw result.left(); } }
@Override public Either<SessionNotCreatedException, Result> createSession(HttpHandler client, NewSessionPayload payload) {
StringWriter stringWriter = new StringWriter(); writeJsonPayload(payload, stringWriter);
try { Method createSessionMethod = ProtocolHandshake.class.getDeclaredMethod( "createSession", HttpHandler.class, Contents.Supplier.class ); createSessionMethod.setAccessible(true); //noinspection unchecked return (Either<SessionNotCreatedException, Result>) createSessionMethod.invoke( this, client, Contents.utf8String(stringWriter.toString()) ); } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) { throw new WebDriverException(e); } } }