尝试将JAX-RS资源类放入库中不起作用

时间:2016-12-31 20:22:58

标签: java web-services netbeans glassfish jax-rs

我编写了一个非常简单的聊天JAX-RS应用程序,该应用程序在Netbeans中使用glassfish 4.1进行部署,具有以下来源:

practica2/Message.java                   // entity from MySQL DataBase
practica2/service/AbstractFacade.java
                  ApplicationConfig.java
                  MessageFacadeREST.java // resource class

这些源文件是针对具有以下属性的MySQL数据库消息从Netbeans的“数据库RESTful Web服务”向导执行的:

- id          INT(11)     flags: PK NN AI
- content     VARCHAR(250)       NN
- user_sender VARCHAR(45)        NN
- date        DATETIME           NN

MessageFacadeREST.java中的服务包含两种方法:createretrieveFromDate

@POST
@Override
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public void create(Message entity) {
    super.create(entity);
}

@POST
@Path("from")
@Consumes({"application/xml","application/json"})
@Produces({"application/xml", "application/json"})
public List<Message> retrieveFromDate(Message message) {
    // retrieves list of messages newer than message
}

服务器运行良好,聊天客户端(主要是android)创建和检索服务器的消息。

由于我的学生必须完成retrieveFromDate,我想在库中为他们提供二进制MessageFacadeREST.class存档。我准备了一个server2文件夹:

server2/practica2/service/MessageFacadeREST.class

将此文件夹添加为库并从源中删除相应的.java。然后它停止工作。我注意到的是,Netbeans不再在MessageFacadeREST.class方法中添加addRestResourceClasses()。如果我尝试手动加载它:

@javax.ws.rs.ApplicationPath("webresources")
public class ApplicationConfig extends Application {

    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> resources = new java.util.HashSet<>();
        //addRestResourceClasses(resources);
        resources.add(practica2.service.MessageFacadeREST.class);
        return resources;
    }

    /**
     * Do not modify addRestResourceClasses() method.
     * It is automatically populated with
     * all resources defined in the project.
     * If required, comment out calling this method in getClasses().
     */
    //private void addRestResourceClasses(Set<Class<?>> resources) {
    //}
}

我明白了:

GlassFish Server (1), deploy, null, false
/home/francesc/NetBeansProjects/WebApplication1/nbproject/build-impl.xml:1049: The module has not been deployed.
See the server log for details.
BUILD FAILED (total time: 0 seconds)

然后问题是:如何在源和二进制类库之间拆分工作的JAX-RS应用程序?

(解决): 首先,感谢@John Ament和@OndrejM的宝贵意见。在我原来的帖子中,我几乎找到了解决方案。要考虑两点:

1.-在将资源分配为.class时,请确保注册到JAX-RS运行时:必须手动加载MessageFacadeREST.class

2.-在Netbeans中,似乎运行选项未正确重新部署('模块尚未部署'错误)。必须使用部署选项(而不是运行)

现在可行。

1 个答案:

答案 0 :(得分:0)

Netbeans可能会在您从项目中删除源文件后删除.class文件。

您必须将.class文件复制到Netbeans搜索资源文件的文件夹中。

在经典的Netbeans Java Web项目中,默认情况下WEB-INF位于web/WEB-INF文件夹中src/main/resources。您还可以将类复制到任何其他文件夹,并在“编译”选项卡(在项目属性对话框中)中将文件夹添加为库。

如果项目是基于maven的项目,只需将带有类的文件夹复制到char文件夹中。