java - 如何解决 rg.glassfish.jersey.server.model.ModelValidationException
问题描述
我们正在尝试编写一个接受文件上传和 xml 有效负载的 REST 服务。
以下是方法签名:
@POST
@Path("/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_XML)
public Response upload(@HeaderParam("appName") String appName
, @FormDataParam("payloadXML") String s, @FormDataParam("file") InputStream in) {
.... java code ...
}
web.xml
<servlet>
<servlet-name>ServletName</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.classnames</param-name>
<param-value>org.glassfish.jersey.media.multipart.MultiPartFeature</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
我们在构建路径中包含了以下 jar: jersey-media-multipart-2.17.jar mimepull-1.9.3.jar
我们将使用 Post 测试此服务
当我们启动应用程序时,我们得到以下异常:
org.glassfish.jersey.internal.Errors logErrors
SEVERE: Following issues have been detected:
WARNING: Method public javax.ws.rs.core.Response org.company.rs.resource.AppResource.upload(java.lang.String,java.lang.String,java.io.InputStream) on resource class org.company.rs.resource.AppResource contains multiple parameters with no annotation. Unable to resolve the injection source.
<Feb 7, 2019 2:14:33 PM IST> <Error> <org.glassfish.jersey.internal.Errors> <BEA-000000> <Following issues have been detected:
WARNING: Method public javax.ws.rs.core.Response org.company.rs.resource.AppResource.upload(java.lang.String,java.lang.String,java.io.InputStream) on resource class org.company.rs.resource.AppResource contains multiple parameters with no annotation. Unable to resolve the injection source.
>
<Feb 7, 2019 2:14:33 PM IST> <Error> <HTTP> <BEA-101216> <Servlet: "ServletName" failed to preload on startup in Web application: "/appUrl".
org.glassfish.jersey.server.model.ModelValidationException: Validation of the application resource model has failed during application initialization.
[[FATAL] Method public javax.ws.rs.core.Response org.company.rs.resource.AppResource.upload(java.lang.String,java.lang.String,java.io.InputStream) on resource class org.company.rs.resource.AppResource contains multiple parameters with no annotation. Unable to resolve the injection source.; source='ResourceMethod{httpMethod=POST, consumedTypes=[multipart/form-data], producedTypes=[application/xml], suspended=false, suspendTimeout=0, suspendTimeoutUnit=MILLISECONDS, invocable=Invocable{handler=ClassBasedMethodHandler{handlerClass=class org.company.rs.resource.AppResource, handlerConstructors=[org.glassfish.jersey.server.model.HandlerConstructor@40a0aadd]}, definitionMethod=public javax.ws.rs.core.Response org.company.rs.resource.AppResource.upload(java.lang.String,java.lang.String,java.io.InputStream), parameters=[Parameter [type=class java.lang.String, source=appName, defaultValue=null], Parameter [type=class java.lang.String, source=null, defaultValue=null], Parameter [type=class java.io.InputStream, source=null, defaultValue=null]], responseType=class javax.ws.rs.core.Response}, nameBindings=[]}']
at org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:555)
at org.glassfish.jersey.server.ApplicationHandler.access$500(ApplicationHandler.java:184)
at org.glassfish.jersey.server.ApplicationHandler$3.call(ApplicationHandler.java:350)
at org.glassfish.jersey.server.ApplicationHandler$3.call(ApplicationHandler.java:347)
at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
Truncated. see log file for complete stacktrace
>
<Feb 7, 2019 2:14:33 PM IST> <Error> <Deployer> <BEA-149265> <Failure occurred in the execution of deployment request with ID "611766299216730" for task "2". Error is: "weblogic.application.ModuleException: org.glassfish.jersey.server.model.ModelValidationException: Validation of the application resource model has failed during application initialization.
[[FATAL] Method public javax.ws.rs.core.Response org.company.rs.resource.AppResource.upload(java.lang.String,java.lang.String,java.io.InputStream) on resource class org.company.rs.resource.AppResource contains multiple parameters with no annotation. Unable to resolve the injection source.; source='ResourceMethod{httpMethod=POST, consumedTypes=[multipart/form-data], producedTypes=[application/xml], suspended=false, suspendTimeout=0, suspendTimeoutUnit=MILLISECONDS, invocable=Invocable{handler=ClassBasedMethodHandler{handlerClass=class org.company.rs.resource.AppResource, handlerConstructors=[org.glassfish.jersey.server.model.HandlerConstructor@40a0aadd]}, definitionMethod=public javax.ws.rs.core.Response org.company.rs.resource.AppResource.upload(java.lang.String,java.lang.String,java.io.InputStream), parameters=[Parameter [type=class java.lang.String, source=appName, defaultValue=null], Parameter [type=class java.lang.String, source=null, defaultValue=null], Parameter [type=class java.io.InputStream, source=null, defaultValue=null]], responseType=class javax.ws.rs.core.Response}, nameBindings=[]}']"
weblogic.application.ModuleException: org.glassfish.jersey.server.model.ModelValidationException: Validation of the application resource model has failed during application initialization.
[[FATAL] Method public javax.ws.rs.core.Response org.company.rs.resource.AppResource.upload(java.lang.String,java.lang.String,java.io.InputStream) on resource class org.company.rs.resource.AppResource contains multiple parameters with no annotation. Unable to resolve the injection source.; source='ResourceMethod{httpMethod=POST, consumedTypes=[multipart/form-data], producedTypes=[application/xml], suspended=false, suspendTimeout=0, suspendTimeoutUnit=MILLISECONDS, invocable=Invocable{handler=ClassBasedMethodHandler{handlerClass=class org.company.rs.resource.AppResource, handlerConstructors=[org.glassfish.jersey.server.model.HandlerConstructor@40a0aadd]}, definitionMethod=public javax.ws.rs.core.Response org.company.rs.resource.AppResource.upload(java.lang.String,java.lang.String,java.io.InputStream), parameters=[Parameter [type=class java.lang.String, source=appName, defaultValue=null], Parameter [type=class java.lang.String, source=null, defaultValue=null], Parameter [type=class java.io.InputStream, source=null, defaultValue=null]], responseType=class javax.ws.rs.core.Response}, nameBindings=[]}']
at weblogic.application.internal.ExtensibleModuleWrapper.start(ExtensibleModuleWrapper.java:140)
at weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:124)
at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:216)
at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:211)
at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:42)
Truncated. see log file for complete stacktrace
Caused By: org.glassfish.jersey.server.model.ModelValidationException: Validation of the application resource model has failed during application initialization.
[[FATAL] Method public javax.ws.rs.core.Response org.company.rs.resource.AppResource.upload(java.lang.String,java.lang.String,java.io.InputStream) on resource class org.company.rs.resource.AppResource contains multiple parameters with no annotation. Unable to resolve the injection source.; source='ResourceMethod{httpMethod=POST, consumedTypes=[multipart/form-data], producedTypes=[application/xml], suspended=false, suspendTimeout=0, suspendTimeoutUnit=MILLISECONDS, invocable=Invocable{handler=ClassBasedMethodHandler{handlerClass=class org.company.rs.resource.AppResource, handlerConstructors=[org.glassfish.jersey.server.model.HandlerConstructor@40a0aadd]}, definitionMethod=public javax.ws.rs.core.Response org.company.rs.resource.AppResource.upload(java.lang.String,java.lang.String,java.io.InputStream), parameters=[Parameter [type=class java.lang.String, source=appName, defaultValue=null], Parameter [type=class java.lang.String, source=null, defaultValue=null], Parameter [type=class java.io.InputStream, source=null, defaultValue=null]], responseType=class javax.ws.rs.core.Response}, nameBindings=[]}']
at org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:555)
at org.glassfish.jersey.server.ApplicationHandler.access$500(ApplicationHandler.java:184)
at org.glassfish.jersey.server.ApplicationHandler$3.call(ApplicationHandler.java:350)
at org.glassfish.jersey.server.ApplicationHandler$3.call(ApplicationHandler.java:347)
at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
Truncated. see log file for complete stacktrace
>
<Feb 7, 2019 2:14:33 PM IST> <Error> <Deployer> <BEA-149202> <Encountered an exception while attempting to commit the 7 task for the application "_auto_generated_ear_".>
<Feb 7, 2019 2:14:33 PM IST> <Warning> <Deployer> <BEA-149004> <Failures were detected while initiating start task for application "_auto_generated_ear_".>
<Feb 7, 2019 2:14:33 PM IST> <Warning> <Deployer> <BEA-149078> <Stack trace for message 149004
weblogic.application.ModuleException: org.glassfish.jersey.server.model.ModelValidationException: Validation of the application resource model has failed during application initialization.
[[FATAL] Method public javax.ws.rs.core.Response org.company.rs.resource.AppResource.upload(java.lang.String,java.lang.String,java.io.InputStream) on resource class org.company.rs.resource.AppResource contains multiple parameters with no annotation. Unable to resolve the injection source.; source='ResourceMethod{httpMethod=POST, consumedTypes=[multipart/form-data], producedTypes=[application/xml], suspended=false, suspendTimeout=0, suspendTimeoutUnit=MILLISECONDS, invocable=Invocable{handler=ClassBasedMethodHandler{handlerClass=class org.company.rs.resource.AppResource, handlerConstructors=[org.glassfish.jersey.server.model.HandlerConstructor@40a0aadd]}, definitionMethod=public javax.ws.rs.core.Response org.company.rs.resource.AppResource.upload(java.lang.String,java.lang.String,java.io.InputStream), parameters=[Parameter [type=class java.lang.String, source=appName, defaultValue=null], Parameter [type=class java.lang.String, source=null, defaultValue=null], Parameter [type=class java.io.InputStream, source=null, defaultValue=null]], responseType=class javax.ws.rs.core.Response}, nameBindings=[]}']:org.glassfish.jersey.server.model.ModelValidationException:Validation of the application resource model has failed during application initialization.
[[FATAL] Method public javax.ws.rs.core.Response org.company.rs.resource.AppResource.upload(java.lang.String,java.lang.String,java.io.InputStream) on resource class org.company.rs.resource.AppResource contains multiple parameters with no annotation. Unable to resolve the injection source.; source='ResourceMethod{httpMethod=POST, consumedTypes=[multipart/form-data], producedTypes=[application/xml], suspended=false, suspendTimeout=0, suspendTimeoutUnit=MILLISECONDS, invocable=Invocable{handler=ClassBasedMethodHandler{handlerClass=class org.company.rs.resource.AppResource, handlerConstructors=[org.glassfish.jersey.server.model.HandlerConstructor@40a0aadd]}, definitionMethod=public javax.ws.rs.core.Response org.company.rs.resource.AppResource.upload(java.lang.String,java.lang.String,java.io.InputStream), parameters=[Parameter [type=class java.lang.String, source=appName, defaultValue=null], Parameter [type=class java.lang.String, source=null, defaultValue=null], Parameter [type=class java.io.InputStream, source=null, defaultValue=null]], responseType=class javax.ws.rs.core.Response}, nameBindings=[]}']
at org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:555)
at org.glassfish.jersey.server.ApplicationHandler.access$500(ApplicationHandler.java:184)
at org.glassfish.jersey.server.ApplicationHandler$3.call(ApplicationHandler.java:350)
at org.glassfish.jersey.server.ApplicationHandler$3.call(ApplicationHandler.java:347)
at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
Truncated. see log file for complete stacktrace
>
请指教。
解决方案
通过使用所有球衣罐的相同版本解决了该问题。
推荐阅读
- python - 具有多个元素的数组的真值是不明确的。使用 a.any() 或 a.all() - Numpy 库
- vb.net - 寻找一种循环方式,直到 TCP 数据包的值 = 1
- java - 如何使用 pom.xml 更新属性文件中的环境值
- c# - 在屏幕保护程序/屏幕关闭期间在 UWP 中使用 Syncfusion 的图表时进程内存较高
- r - r 中的嵌套 for 循环错误(包 extRemes)
- javascript - 为什么当我在 app.js 上使用控制台登录时它会得到未定义的返回?
- vb.net - 循环遍历空文本框,直到文本框有数据
- bash - 从脚本中的字符串获取纪元
- algorithm - BST(方案)中的第 K 个最小元素
- c# - 为什么我的玩家生命没有在每次屏幕加载时重置?