【问题标题】:Null-pointer exception when invoking get in rest-assured: Cannot get property 'assertionClosure' on null object调用 get 时的空指针异常放心:无法在空对象上获取属性“assertionClosure”
【发布时间】:2014-05-13 15:51:35
【问题描述】:

我正在尝试使用 rest-assured 对 RESTful API 实施测试,但在尝试调用 get 操作时遇到空指针异常。授权是一个自定义方案,所以一旦我获得请求的授权签名,我将其作为标题附加到请求中:

    String auth = ...CUSTOM ALGORITHM ...;
    String pragma = ... OTHER CUSTOM HEADER ...;

    RequestSpecification requestSpec = new RequestSpecBuilder()
       .addHeader("Authorization", auth)
       .addHeader("pragma", pragma)
       .build();

    RestAssured.baseURI = "https://blahblah.staging.somewhere.net";
    RestAssured.port = 443;
    RestAssured.basePath = "/endpoint_name/somefolder/resource?status=active";
    RestAssured.urlEncodingEnabled = false;

    requestSpec.get();

这会导致以下错误:

java.lang.NullPointerException:无法在空对象上获取属性“assertionClosure”

【问题讨论】:

    标签: java rest groovy rest-assured


    【解决方案1】:

    尝试使用 RestAssured.given() 调用您的 GET。您可以通过执行以下操作来使用您的 requestSpec:

    RestAssured.given()
    .spec(requestSpec)
    .log().all()
    .get()
    .then()
    .log().all()
    .statusCode(200);
    

    【讨论】:

    • 与OP类似的问题,你的解决方案为我解决了。不知道为什么它一开始就不起作用,对我来说这似乎是一个让我放心的错误。
    【解决方案2】:

    我在使用 RestAssured 3.0.7 时遇到了同样的问题

    看起来如果您使用RequestSpecBuilder 构建RequestSpecification,则未设置RequestSpecificationImpl 的某些内部状态(responseSpecification 字段)在调用 get/post 方法时 NPE 会产生什么结果。

    而不是使用:

    RequestSpecification requestSpec = new RequestSpecBuilder()
           .addHeader("Authorization", auth)
           .addHeader("pragma", pragma)
           .build();
    

    使用:

    RestAssured.with().header("Authorization", auth).header("pragma", pragma)
    

    with() 等价于构造正确的givenRequestSpecification

    【讨论】:

      【解决方案3】:

      我的同事终于弄清楚了问题所在。我们使用自定义身份验证系统来获得额外的安全性,问题与生成的身份验证标头值上的时间戳有关。时间戳太旧了。

      【讨论】:

      • 这里有同样的问题,但身份验证标头绝对没有时间戳问题。我想可能的原因不止一个。
      【解决方案4】:

      这是一个放心的bug

      而不是

          requestSpec.get();
      

      尝试:

      Response response = RestAssured.given(requestSpec).get();
      

      Response response = RestAssured.given().spec(reqSpec).get();
      

      这里是已经提交的错误: https://github.com/rest-assured/rest-assured/issues/938

      【讨论】:

        猜你喜欢
        • 2017-11-06
        • 1970-01-01
        • 2018-06-07
        • 1970-01-01
        • 2011-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多