You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WireMock在Maven构建时抛空指针,JUnit本地运行正常

解决WireMock 2.6.0在Maven构建时的JsonMappingException/NullPointerException问题

问题诊断

从报错信息和你提供的代码、映射文件来看,核心问题出在WireMock 2.6.0版本对equalToJson匹配器的语法要求上。你当前的映射文件中,直接将JSON对象嵌套在equalToJson字段下,但WireMock 2.6.0要求这个字段的值必须是JSON字符串而非对象,这就导致Jackson解析时抛出NullPointerException,进而触发JsonMappingException。

至于为什么Eclipse中运行JUnit测试正常,大概率是因为Eclipse的类路径中意外引入了更高版本的WireMock依赖(高版本支持直接嵌套JSON对象的语法),而Maven构建时严格使用了你指定的2.6.0版本,二者解析逻辑不一致导致了差异。

修复方案

方案1:适配WireMock 2.6.0的语法要求

修改你的映射文件,将equalToJson对应的JSON对象转换为转义后的JSON字符串:

{
  "request":{
    "method":"POST",
    "headers":{
      "Authorization":{
        "contains":"Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhel9hdHRyIjp7ImFwcGxpY2F0aW9uX25hbWUiOiJSZWdTZXJ2aWNlIiwiYXBwbGljYXRpb25faWQiOiJCQ1MifSwiemlkIjoic2FwLWljYnMiLCJ1c2VyX2lkIjoidGVzdFVzZXIiLCJ1c2VyX25hbWUiOiJ1c2VyIG5hbWUiLCJzY29wZSI6WyJ1YWEtc2VydmljZS1iY3MuQnVzQ29uZmlnbk1hbmFnZUNvbnRlbnQiXSwiZXhwIjoyMTQ3NDgzNjQ3LCJjbGllbnRfaWQiOiJzYi1CQ1NTZXJ2aWNlIiwiZW1haWwiOiJ0ZXN0VXNlckB0ZXN0T3JnIiwiY2lkIjoic2ItQkNTU2VydmljZSJ9.ax5hEOLjmazyXKak9GHnQ3ZswQbL2rkRv2fM6p5rD3NPeUKPO6IaXTImGNCwk3wk6UbkTXuQu8rOQzHugvMLajYwFTpeMuOMjCZ-B8MgrNZq2EKiKe6aQKfzZ6vJZkPWon2UuZWNfKFxbBtglcVi4rL4Z655IWu4zWJ9_r6ruHVybW8eU4hD-4UNdJB2m4pISJw1usqA-_GaMMfQ5j6azx93m1qHuWUYMMmTtq_JefHiA4FueYHh4cBj-aHvTa_PYkG8rg0qY6dvJPw1R9ANKNG5CsQZmzUsY3a9KZX5wgRoSYshePj25mR1GmOzb8PCIDUmyWST-_keF0OnnqJhyQ"
      },
      "Content-Type":{
        "contains":"application/json"
      },
      "Accept-Language":{
        "contains":"en"
      }
    },
    "url":"/busconfig/validate",
    "bodyPatterns":[
      {
        "equalToJson": "{\"serviceEntities\":{\"OrderType\":{\"data\":[{\"Code\":\"TE\",\"BusConfignIsDeleted\":false,\"BusConfignValidStart\":\"/Date(1571356800000)/\",\"BusConfignValidEnd\":\"/Date(1571356800000)/\"},{\"Code\":\"YZ\",\"BusConfignIsDeleted\":false,\"BusConfignValidStart\":\"/Date(1572739200000)/\",\"BusConfignValidEnd\":\"/Date(1575072000000)/\"}],\"entityEndPoint\":\"SalesOrderOrderTypeService/OrderType\"},\"OrderTypeText\":{\"data\":[{\"Code\":\"TE\",\"BusConfignIsDeleted\":false,\"LanguageCode\":\"en\",\"LanguageName\":\"English\",\"Description\":\"TE Desc\"},{\"Code\":\"YZ\",\"BusConfignIsDeleted\":false,\"LanguageCode\":\"en\",\"Description\":\"Validation error code\"}],\"dependency\":[\"OrderType\"],\"entityEndPoint\":\"SalesOrderOrderTypeService/OrderTypeText\"}},\"required\":[\"OrderType\",\"OrderTypeText\"],\"description\":\"Check\",\"changeType\":\"m\"}"
      }
    ]
  },
  "response":{
    "status":200
  }
}

注意:所有内部的双引号都需要用反斜杠\转义,确保整个内容是一个合法的JSON字符串。

方案2:升级WireMock版本(推荐)

如果可以升级依赖,建议将WireMock版本升级到2.27.0及以上,这些版本支持直接在equalToJson字段下嵌套JSON对象的语法,无需转义字符串。修改你的Maven依赖:

<dependency>
    <groupId>com.github.tomakehurst</groupId>
    <artifactId>wiremock-standalone</artifactId>
    <version>2.27.0</version>
    <scope>test</scope>
</dependency>

升级后,你当前的映射文件无需修改即可正常工作。

额外验证步骤

  • 清理Maven本地仓库中WireMock的缓存:执行mvn clean install -U,强制更新依赖,确保Maven使用的是指定版本的WireMock。
  • 检查Eclipse的项目依赖:右键项目 → Build Path → Configure Build Path,确认WireMock的版本和Maven中指定的一致,避免类路径冲突。

内容的提问来源于stack exchange,提问作者Madhusudan Sahu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:10:14