找不到RESTful球衣404

时间:2016-10-10 08:08:15

标签: java rest maven jersey tomcat8

我正在使用jersey和Tomcat8开发一个ws,问题是@path没有被处理,因此生成的URL无法正常工作。

包和类说明:

eu.datex和eu.datex2软件包包含带有xml注释的Java类,用于JAXB。

Transformer类将xml数据转换为java,这个java类被处理并保存在新的datex2对象中,该对象将以http get的形式返回,以便用XML进行响应。

不起作用的网址 localhost:8090 / org.CTAG.DATEX2REST / rest / datex

这里我向您展示我的mvn项目结构和一些重要文件。

mvn结构:

enter image description here

这是ResourceConfig类:

package com.CTAG.application;
import javax.ws.rs.ApplicationPath;
import org.glassfish.jersey.server.ResourceConfig;


@ApplicationPath("/rest")
public class MyApplication extends ResourceConfig {

    public MyApplication() {
        packages("com.CTAG.rest;");
    }

}

的web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
  <display-name>org.CTAG.DATEX2REST</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>

  <display-name>CTAG DATEX2</display-name>

    <listener>
        <listener-class>
            com.CTAG.application.Init
        </listener-class>
    </listener>
</web-app>

此类使用JAXB初始化从xml数据(从服务器GET)到Java类的转换:

public class Init implements ServletContextListener {

    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
        System.out.println("ServletContextListener destroyed");
    }
    @Override
    public void contextInitialized(ServletContextEvent arg0) {
        System.out.println("----INITIALIZED----");
        try {
            Map<SituationRecord, Integer> map = new HashMap<>();

                URL url = new URL(" http://infocar.dgt.es/datex2/dgt/SituationPublication/all/content.xml");
                Map<SituationRecord, Integer> copia = map;
                map = Traslator.traslator(copia, url);
                System.out.println("----DATEX now available----");

                // Preubassleep(30000);

        } catch (TransformerConfigurationException | JAXBException | ParserConfigurationException | IOException e) {

            e.printStackTrace();
        }
    }
}

资源类(DataExchange),这必须返回一个将转换为XML的java类:

package com.CTAG.rest;


@Path("/datex")
@Produces(MediaType.APPLICATION_XML)
public class DataExchange {

    private D2LogicalModel datex2 = Traslator.d2;

    @GET
    @Produces(MediaType.APPLICATION_XML)
    public Response getDatex() {

        return Response.ok(this.datex2).build();
    }

    @GET
    @Path("/{road}")
    public Response getDatexByRoad(@PathParam("road") String roadName){

        SituationPublication payLoad = (SituationPublication)this.datex2.getPayloadPublication();
        FilterByRoad filter = new FilterByRoad(payLoad.getSituation());
        List<Situation> filteredList = new LinkedList<>();
        filteredList.addAll(filter.filterByRoad(roadName));
        payLoad.setSituation(filteredList);
        this.datex2.setPayloadPublication(payLoad);

        return Response.ok(this.datex2).build();
    }

2 个答案:

答案 0 :(得分:0)

替换

{

packages("com.CTAG.rest;");

}

{

packages("com.CTAG.rest");

}

这样可行。

答案 1 :(得分:0)

这是使用register()而不是packages()解决的,但是我无法理解为什么,谢谢。