Glassfish / PostgreSQL表与复合(两部分)主键生成com.sun.jersey.spi.inject.Errors [英] Glassfish / PostgreSQL table with composite (two-part) primary key generating com.sun.jersey.spi.inject.Errors

查看:93
本文介绍了Glassfish / PostgreSQL表与复合(两部分)主键生成com.sun.jersey.spi.inject.Errors的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用bigint类型的两部分主键( ID1 ,<$ c>),我有一个PostgreSQL表 testtable $ c> ID2 类型为bigint)和一个带键值的非键字段。我正尝试使用从数据库中新建的REST风格的Web服务向导生成REST风格的Web服务,并且除了为所有值选择默认值的包名称(服务)之外。该向导生成四个文件:


  • AbstractFacade.java

  • Testtable.java

  • TesttableREST.java

  • TesttablePK.java



部署到服务器,并选择测试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


  • 解决方案

    问题出现是因为remove和find方法都将TesttablePK类型与@PathParam一起使用,但Jersey无法找到将字符串从url转换为此类对象的方法。这可以通过修改TesttablePK类型来解决。您有两种选择:


    • 添加一个接受单个String参数的构造函数。

    • 或add一个名为valueOf或fromString的静态方法,它接受
      单个字符串参数



    因此,您需要决定如何进行将组合键表示为一个字符串并将此类字符串转换为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:

    • AbstractFacade.java
    • Testtable.java
    • TesttableREST.java
    • TesttablePK.java

    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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆