Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何通过REST执行AutoIT验证?_Java_Json_Rest_Autoit - Fatal编程技术网

Java 如何通过REST执行AutoIT验证?

Java 如何通过REST执行AutoIT验证?,java,json,rest,autoit,Java,Json,Rest,Autoit,我当前的目标是从客户端删除所有有价值的业务代码,并将其放到服务器上。但我正努力隐藏以下逻辑,其中包括。你知道解决办法吗 我不明白是否可以将AutoIt的控件对象传递给REST资源,以验证服务器端的某些条件,然后返回true/false。我知道POJO可以通过,但控制??例如,我的客户机代码有一个方法,如果当前活动窗口中包含某些“机密文本”,该方法将返回true 我想隐藏标题字符串“Secret title”以及“Secret Text”。我该如何保护这种逻辑? 由于AutoIt方法winGetT

我当前的目标是从客户端删除所有有价值的业务代码,并将其放到服务器上。但我正努力隐藏以下逻辑,其中包括。你知道解决办法吗

我不明白是否可以将AutoIt的
控件
对象传递给REST资源,以验证服务器端的某些条件,然后返回true/false。我知道POJO可以通过,但控制??例如,我的客户机代码有一个方法,如果当前活动窗口中包含某些“机密文本”,该方法将返回true

我想隐藏标题字符串
“Secret title”
以及
“Secret Text”
。我该如何保护这种逻辑?

由于AutoIt方法
winGetText
返回一个
布尔值
,我认为最好的方法是通过
org.codehaus.jackson.map.ObjectMapper
控件
对象转换为JSON字符串,然后执行验证服务器端,只返回true或false。如果只有POJO可以通过JSON传递,那么我如何保护如此重要的一行代码呢?这是一个模型:

演示客户端:

        ObjectMapper mapper = new ObjectMapper();
        AutoItX control = new AutoItX();  
        try {
            String jsonInString = mapper.writeValueAsString(control); // Really dumb?
            ResteasyClient client = new ResteasyClientBuilder().build();
            client.register(new CustomRestHeaderFilter("Content-Type", "application/json"));
            ResteasyWebTarget target = client.target("http://localhost:8080/MyApp/rest/autoit/control");
            Response response = target.request().post(Entity.json(jsonInString));
            String value = response.readEntity(String.class);
            response.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
@Path("autoit")
public class ServerDemo {

    @POST
    @Path("control")
    @Produces("application/json")
    @Consumes(MediaType.APPLICATION_JSON)
    public Response buildSendString(AutoIt control) {
    AutoItX control;
    String WindowTitle = "[REGEXPTITLE:(?i)(Notepad\\b.*)]";
        boolean titleFound = false;
        logger.info("HERE1");
        control = new ObjectMapper().readValue(jsonString, AutoItX.class);
        logger.info("HERE2");
        titleFound = control.winExists(WindowTitle);
        return Response.status(200).entity(titleFound).build();
  }
}
ServerSide.java:

        ObjectMapper mapper = new ObjectMapper();
        AutoItX control = new AutoItX();  
        try {
            String jsonInString = mapper.writeValueAsString(control); // Really dumb?
            ResteasyClient client = new ResteasyClientBuilder().build();
            client.register(new CustomRestHeaderFilter("Content-Type", "application/json"));
            ResteasyWebTarget target = client.target("http://localhost:8080/MyApp/rest/autoit/control");
            Response response = target.request().post(Entity.json(jsonInString));
            String value = response.readEntity(String.class);
            response.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
@Path("autoit")
public class ServerDemo {

    @POST
    @Path("control")
    @Produces("application/json")
    @Consumes(MediaType.APPLICATION_JSON)
    public Response buildSendString(AutoIt control) {
    AutoItX control;
    String WindowTitle = "[REGEXPTITLE:(?i)(Notepad\\b.*)]";
        boolean titleFound = false;
        logger.info("HERE1");
        control = new ObjectMapper().readValue(jsonString, AutoItX.class);
        logger.info("HERE2");
        titleFound = control.winExists(WindowTitle);
        return Response.status(200).entity(titleFound).build();
  }
}

更新 我已经更新了上面的ServerSide.java代码。它返回“false”,即使它应该返回true。因此,我查看了服务器的日志,它给出了以下错误。注意它如何打印
“HERE1”
,但由于这一行
control=newObjectMapper().readValue(jsonString,AutoItX.class),它无法到达
“HERE2”

我的客户机代码中的
jsonString
I引用打印这个
JSON:{“version”:“3.3.14.2”,“admin”:true,“error”:0}
,它看起来像一个有限的JSON对象

下面是一些错误,完整的堆栈是

15:56:53867信息[com.serv.rest.ServerSide](默认任务-1)此处1

15:56:54150错误[stderr](默认任务1) com.fasterxml.jackson.databind.exc。无法识别的属性异常: 无法识别的字段“version”(类com.myproject.AutoItX),未标记 可忽略(0个已知属性:)

15:56:54166错误[stderr](默认任务-1)位于[Source: {“version”:“3.3.14.2”,“admin”:true,“error”:0};行:1,列:13] (通过引用链:com.myproject.AutoItX[“version”])

15:56:54166错误[stderr](默认任务-1)位于 com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:62)

15:56:54166错误[stderr](默认任务-1)位于 com.fasterxml.jackson.databind.DeserializationContext.reportUnknownProperty(DeserializationContext.java:851)

15:56:54166错误[stderr](默认任务-1)位于 com.fasterxml.jackson.databind.desr.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:1085)

15:56:54166错误[stderr](默认任务-1)位于 com.fasterxml.jackson.databind.deser.beandserializerbase.handleUnknownProperty(beandserializerbase.java:1389)


请注意以下行:
UnrecognizedPropertyException:Unrecognized字段“version”(class com.myproject.AutoItX),未标记为可忽略(0个已知属性:)
。这是否表示它可以序列化

您需要包含AutoItX.java代码并确保serializable@JLewkovich如何确保它是可序列化的?有没有某种技巧?我以为这就是我使用
ObjectMapper
所做的,但是上面的示例返回一个空的
响应。你能详细说明或提供一个教程吗?谢谢。我们需要先查看AutoItX类,请提供源代码。@JLewkovich,您可以查看确切的类。注意:在我的问题中,我将AutoItX对象命名为“control”。如果上面的示例返回空响应,您能否在运行时检查
control
的内容,以确保它不为空。如果它是非空的,您可以在问题中发布它的内容,这会有所帮助serializable@JLewkovich如何确保它是可序列化的?有没有某种技巧?我以为这就是我使用
ObjectMapper
所做的,但是上面的示例返回一个空的
响应。你能详细说明或提供一个教程吗?谢谢。我们需要先查看AutoItX类,请提供源代码。@JLewkovich,您可以查看确切的类。注意:在我的问题中,我将AutoItX对象命名为“control”。如果上面的示例返回空响应,您能否在运行时检查
control
的内容,以确保它不为空。如果它是非空的,您可以在您的问题中发布它的内容,这会有所帮助。