Glassfish / PostgreSQL表与复合(两部分)主键生成com.sun.jersey.spi.inject.Errors [英] Glassfish / PostgreSQL table with composite (two-part) primary key generating com.sun.jersey.spi.inject.Errors
问题描述
使用bigint类型的两部分主键( ID1
,<$ c>),我有一个PostgreSQL表 testtable
$ c> ID2 类型为bigint)和一个带键值的非键字段。我正尝试使用从数据库中新建的REST风格的Web服务向导生成REST风格的Web服务,并且除了为所有值选择默认值的包名称(服务)之外。该向导生成四个文件:
部署到服务器,并选择测试REST风格的Web服务,测试页无法加载:
例外
javax.servlet.ServletException:PWC1391:Servlet .init()for servlet org.netbeans.rest.application.config.ApplicationConfig抛出异常
根本原因
com.sun.jersey.spi.inject.Errors $ ErrorMessagesException
查看glassfish事件日志,有两个严重错误:
以下错误和警告已检测到资源和/或提供程序类:
SEVERE:缺少方法的依赖关系public void service.TesttableFacadeREST.remove(service.TesttablePK)at index 0
参数SEVERE:方法public void service。 TesttableFacadeREST.remove(service.TesttablePK),注释用DELETE的资源,类service.TesttableFacadeREST,不被识别为有效的资源方法。
SEVERE:缺少方法public service.Testtable service.TesttableFacadeREST.find(service.TesttablePK)对索引0处参数的依赖性
SEVERE:方法public service.Testtable service.TesttableFacadeREST.find(service.TesttablePK ),用资源的GET注释,类service.TesttableFacadeREST,不被识别为有效的资源方法。
和
WebModule [/ tabletest] StandardWrapper.Throwable com.sun.jersey .spi.inject.Errors $ ErrorMessagesException
at com.sun.jersey.spi.inject.Errors.processErrorMessages(Errors.java:170)
at com.sun.jersey.spi.inject.Errors。 postprocess(Errors.java:136)
at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:199)
at com.sun.jersey.server.impl.application。 WebApplicationImpl.initiate(WebApplicationImpl.java:771)
at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:766)
at com.sun.jersey.spi。 container.servlet.ServletContainer.initiate(ServletContainer.java:488)
at com.sun.jersey.spi.container.servlet.ServletContainer $ InternalWebComponent.initiate(ServletContainer.java:318)
at com。 sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:609)
at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.ja va:210)
at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:373)
at com.sun.jersey.spi.container.servlet.ServletContainer。 init(ServletContainer.java:556)
at javax.servlet.GenericServlet.init(GenericServlet.java:244)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1453)
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:1093)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:189)
在org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
at org.apache .catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
at org.apache.catalina.connector .CoyoteAdapter.doService(CoyoteAdapter.java :331)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
at com.sun.enterprise.v3.services.impl.ContainerMapper $ AdapterCallable.call(ContainerMapper .java:317)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask .java:860)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056 )
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
at com.sun.grizzly.http。 HttpProtocolChain.execute(HttpProtocolChain.ja va:79)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
at com.sun.grizzly.util.AbstractThreadPool $ Worker.doWork(AbstractThreadPool.java:532)
at com.sun .grizzly.util.AbstractThreadPool $ Worker.run(AbstractThreadPool.java:513)$ b $在java.lang.Thread.run(Thread.java:722)
在我开始使用NetBeans提交错误报告之前,我只想看看这是否可能是开发者错误,而不是开发者工具集的错误。想法?
- 数据库:PostgreSQL 8.4
- 应用服务器:Glassfish 3.1.2.2
- IDE:NetBeans 7.2
- JDK:7更新7
- 添加一个接受单个String参数的构造函数。
- 或add一个名为valueOf或fromString的静态方法,它接受
单个字符串参数 - AbstractFacade.java
- Testtable.java
- TesttableREST.java
- TesttablePK.java
问题出现是因为remove和find方法都将TesttablePK类型与@PathParam一起使用,但Jersey无法找到将字符串从url转换为此类对象的方法。这可以通过修改TesttablePK类型来解决。您有两种选择:
因此,您需要决定如何进行将组合键表示为一个字符串并将此类字符串转换为TesttablePK类型。
I have a PostgreSQL table testtable
with a two part primary key (ID1
of type bigint, ID2
of type bigint) and a non-key field with a timestamp. I am trying to generate a RESTful webservice using the "New RESTful Web Services from Database" wizard and, except for the package name (service) selecting the default for all of the values. The wizard produces four files:
Deploying to the server, and selecting "Test RESTful Web Services", the test page fails to load with:
exception javax.servlet.ServletException: PWC1391: Servlet.init() for servlet org.netbeans.rest.application.config.ApplicationConfig threw exception root cause com.sun.jersey.spi.inject.Errors$ErrorMessagesException
Looking in the glassfish event log, there are two severe errors:
The following errors and warnings have been detected with resource and/or provider classes: SEVERE: Missing dependency for method public void service.TesttableFacadeREST.remove(service.TesttablePK) at parameter at index 0 SEVERE: Method, public void service.TesttableFacadeREST.remove(service.TesttablePK), annotated with DELETE of resource, class service.TesttableFacadeREST, is not recognized as valid resource method. SEVERE: Missing dependency for method public service.Testtable service.TesttableFacadeREST.find(service.TesttablePK) at parameter at index 0 SEVERE: Method, public service.Testtable service.TesttableFacadeREST.find(service.TesttablePK), annotated with GET of resource, class service.TesttableFacadeREST, is not recognized as valid resource method.
and
WebModule[/tabletest]StandardWrapper.Throwable com.sun.jersey.spi.inject.Errors$ErrorMessagesException at com.sun.jersey.spi.inject.Errors.processErrorMessages(Errors.java:170) at com.sun.jersey.spi.inject.Errors.postProcess(Errors.java:136) at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:199) at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:771) at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:766) at com.sun.jersey.spi.container.servlet.ServletContainer.initiate(ServletContainer.java:488) at com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.initiate(ServletContainer.java:318) at com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:609) at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:210) at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:373) at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:556) at javax.servlet.GenericServlet.init(GenericServlet.java:244) at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1453) at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:1093) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:189) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161) at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231) at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317) at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195) at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860) at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757) at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056) at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229) at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) at com.sun.grizzly.ContextTask.run(ContextTask.java:71) at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) at java.lang.Thread.run(Thread.java:722)
Before I go haring off to file a bug report with NetBeans, I just wanted to see if this was more likely a developer error rather than an error with the developer's toolset. Thoughts?
- Database: PostgreSQL 8.4
- App Server: Glassfish 3.1.2.2
- IDE: NetBeans 7.2
- JDK: 7 update 7
The problem arises because the remove and find method both use the TesttablePK type in conjunction with @PathParam but Jersey cannot find a way to convert the string from the url to such an object. This can be solved by modifying the TesttablePK type. You have two choices:
- add a constructor that accepts a single String argument.
- or add a static method named valueOf or fromString that accepts a single String argument
So you will need to decide how you are going to represent the composite key as a string and convert such a string to the TesttablePK type.
这篇关于Glassfish / PostgreSQL表与复合(两部分)主键生成com.sun.jersey.spi.inject.Errors的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!