Playframework 2.0 将swagger-play2升级到1.5.0后出错

Playframework 2.0 将swagger-play2升级到1.5.0后出错,playframework-2.0,swagger,swagger-2.0,Playframework 2.0,Swagger,Swagger 2.0,我正在尝试在现有的PlayFramework2.4应用程序中将swagger从1.3升级到1.5.x 我已将依赖项更改为 "io.swagger" % "swagger-jaxrs" % "1.5.4" "io.swagger" %% "swagger-play2" % "1.5.0" 并将导入内容从com.wordnik.swagger更改为io.swagger,并添加了 play.modules.enabled += play.modules.swagger.SwaggerModule

我正在尝试在现有的PlayFramework2.4应用程序中将swagger从1.3升级到1.5.x

我已将依赖项更改为

"io.swagger" % "swagger-jaxrs" % "1.5.4" 
"io.swagger" %% "swagger-play2" % "1.5.0"
并将导入内容从
com.wordnik.swagger
更改为
io.swagger
,并添加了

play.modules.enabled += play.modules.swagger.SwaggerModule 
转到application.conf

但是,当我尝试访问api文档时,会出现以下异常

com.fasterxml.jackson.databind.JsonMappingException: (was java.lang.NullPointerException) (through reference chain: io.swagger.models.Swagger["paths"])
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:210)
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:177)
at com.fasterxml.jackson.databind.ser.std.StdSerializer.wrapAndThrow(StdSerializer.java:199)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:683)
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:157)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:130)
at com.fasterxml.jackson.databind.ObjectWriter$Prefetch.serialize(ObjectWriter.java:1387)
at com.fasterxml.jackson.databind.ObjectWriter._configAndWriteValue(ObjectWriter.java:1088)
at com.fasterxml.jackson.databind.ObjectWriter.writeValueAsString(ObjectWriter.java:960)
at io.swagger.util.Json.pretty(Json.java:23)
at controllers.SwaggerBaseApiController.toJsonString(ApiHelpController.scala:197)
at controllers.ApiHelpController$$anonfun$getResource$1.apply(ApiHelpController.scala:89)
at controllers.ApiHelpController$$anonfun$getResource$1.apply(ApiHelpController.scala:83)
at play.api.mvc.ActionBuilder$$anonfun$apply$16.apply(Action.scala:408)
at play.api.mvc.ActionBuilder$$anonfun$apply$16.apply(Action.scala:407)
at play.api.mvc.Action$.invokeBlock(Action.scala:533)
at play.api.mvc.Action$.invokeBlock(Action.scala:530)
at play.api.mvc.ActionBuilder$$anon$1.apply(Action.scala:493)
at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4$$anonfun$apply$5.apply(Action.scala:105)
at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4$$anonfun$apply$5.apply(Action.scala:105)
at play.utils.Threads$.withContextClassLoader(Threads.scala:21)
at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4.apply(Action.scala:104)
at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4.apply(Action.scala:103)
at scala.Option.map(Option.scala:146)
at play.api.mvc.Action$$anonfun$apply$1.apply(Action.scala:103)
at play.api.mvc.Action$$anonfun$apply$1.apply(Action.scala:96)
at play.api.libs.iteratee.DoneIteratee$$anonfun$mapM$2.apply(Iteratee.scala:741)
at play.api.libs.iteratee.DoneIteratee$$anonfun$mapM$2.apply(Iteratee.scala:741)
at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24)
at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24)
at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:39)
at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:399)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
Caused by: java.lang.NullPointerException
at scala.collection.convert.Wrappers$JMapWrapperLike$$anon$2.<init>(Wrappers.scala:281)
at scala.collection.convert.Wrappers$JMapWrapperLike$class.iterator(Wrappers.scala:280)
at scala.collection.convert.Wrappers$JMapWrapper.iterator(Wrappers.scala:298)
at scala.collection.IterableLike$class.foreach(IterableLike.scala:72)
at scala.collection.AbstractIterable.foreach(Iterable.scala:54)
at scala.collection.MapLike$FilteredKeys.foreach(MapLike.scala:231)
at scala.collection.TraversableOnce$class.size(TraversableOnce.scala:105)
at scala.collection.AbstractTraversable.size(Traversable.scala:104)
at scala.collection.convert.Wrappers$MapWrapper.size(Wrappers.scala:169)
at java.util.AbstractMap$1.size(AbstractMap.java:349)
at java.util.AbstractCollection.toArray(AbstractCollection.java:136)
at java.util.ArrayList.addAll(ArrayList.java:577)
at io.swagger.models.Swagger.getPaths(Swagger.java:266)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:654)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:675)
        ... 32 more
[error] 12:42:04.504 swagger - api listing for path /booking not found
com.fasterxml.jackson.databind.JsonMappingException:(was java.lang.NullPointerException)(通过引用链:io.swagger.models.swagger[“path”])
位于com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:210)
位于com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:177)
位于com.fasterxml.jackson.databind.ser.std.StdSerializer.wrapAndThrow(StdSerializer.java:199)
在com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields上(BeanSerializerBase.java:683)
位于com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:157)
位于com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:130)
位于com.fasterxml.jackson.databind.ObjectWriter$Prefetch.serialize(ObjectWriter.java:1387)
位于com.fasterxml.jackson.databind.ObjectWriter.\u configAndWriteValue(ObjectWriter.java:1088)
位于com.fasterxml.jackson.databind.ObjectWriter.writeValueAsString(ObjectWriter.java:960)
位于io.swagger.util.Json.pretty(Json.java:23)
atcontrollers.SwaggerBaseApiController.toJsonString(ApiHelpController.scala:197)
位于controllers.ApiHelpController$$anonfun$getResource$1.apply(ApiHelpController.scala:89)
位于controllers.ApiHelpController$$anonfun$getResource$1.apply(ApiHelpController.scala:83)
at play.api.mvc.ActionBuilder$$anonfun$apply$16.apply(Action.scala:408)
at play.api.mvc.ActionBuilder$$anonfun$apply$16.apply(Action.scala:407)
at play.api.mvc.Action$.invokeBlock(Action.scala:533)
at play.api.mvc.Action$.invokeBlock(Action.scala:530)
at play.api.mvc.ActionBuilder$$anon$1.apply(Action.scala:493)
at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4$$anonfun$apply$5.apply(Action.scala:105)
at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4$$anonfun$apply$5.apply(Action.scala:105)
在播放时.utils.Threads$.withContextClassLoader(Threads.scala:21)
at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4.apply(Action.scala:104)
at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4.apply(Action.scala:103)
在scala.Option.map处(Option.scala:146)
at play.api.mvc.Action$$anonfun$apply$1.apply(Action.scala:103)
at play.api.mvc.Action$$anonfun$apply$1.apply(Action.scala:96)
at play.api.libs.iteratee.doneitatee$$anonfun$mapM$2.apply(iteratee.scala:741)
at play.api.libs.iteratee.doneitatee$$anonfun$mapM$2.apply(iteratee.scala:741)
在scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24)
在scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24)
运行(AbstractDispatcher.scala:39)
在akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:399)
位于scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
位于scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
位于scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
在scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)中
原因:java.lang.NullPointerException
位于scala.collection.convert.Wrappers$JMapWrapperLike$$anon$2。(Wrappers.scala:281)
位于scala.collection.convert.Wrappers$JMapWrapperLike$class.iterator(Wrappers.scala:280)
位于scala.collection.convert.Wrappers$JMapWrapper.iterator(Wrappers.scala:298)
位于scala.collection.IterableLike$class.foreach(IterableLike.scala:72)
位于scala.collection.AbstractIterable.foreach(Iterable.scala:54)
位于scala.collection.MapLike$FilteredKeys.foreach(MapLike.scala:231)
位于scala.collection.TraversableOnce$class.size(TraversableOnce.scala:105)
位于scala.collection.AbstractTraversable.size(Traversable.scala:104)
位于scala.collection.convert.Wrappers$MapWrapper.size(Wrappers.scala:169)
位于java.util.AbstractMap$1.size(AbstractMap.java:349)
位于java.util.AbstractCollection.toArray(AbstractCollection.java:136)
在java.util.ArrayList.addAll(ArrayList.java:577)
在io.swagger.models.swagger.getPath(swagger.java:266)中
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:497)
位于com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:654)
在com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields上(BeanSerializerBase.java:675)
... 32多
[错误]12:42:04.504 swagger-未找到路径/预订的api列表

看起来问题在于io.swagger.models.swagger.paths为null,但每个@Api注释类应包含一个条目。如何使Swagger模块正确初始化路径?

对我有效的解决方案是明确声明对jackson 2.8.2的依赖关系:

"com.fasterxml.jackson.core" % "jackson-databind" % "2.8.2",
"com.fasterxml.jackson.module" % "jackson-module-scala_2.11" % "2.8.2"

据我所知,它不适用于2.7.x和2.6.x。

对我有效的解决方案是明确声明对jackson 2.8.2的依赖关系:

"com.fasterxml.jackson.core" % "jackson-databind" % "2.8.2",
"com.fasterxml.jackson.module" % "jackson-module-scala_2.11" % "2.8.2"

据我所知,它不适用于2.7.x和2.6.x。

您找到了解决此问题的方法吗?我实际做的是停止使用招摇过市模块。我现在有了用swagger规范维护的swagger yaml文件,并编写了简单的播放控制器来满足这些规范。你找到了这个问题的解决方案吗?我实际做的是停止使用swagger模块。我现在有了用swagger规范维护的swagger yaml文件,并编写了简单的播放控制器来满足这些规范。