2016-10-07 20 views
1

私はURL paramsに応じてXMLで応答できるはずのREST Webサービスを開発しています。私はローカルとしてこのアプリケーションの最初のバージョンを持っていたので、XML処理を初期化したPOJOメインクラスがありました。問題は、リソースを見つけることができず、アプリケーションクラスの中にPOJOメインメソッドを置いたことが間違っている可能性があるということです。このURIはlocalhost:8090/org.CTAG.DATEX2RESTを使用していますが、ロケーションURLパスを追加しても機能しません。要求されたリソースが利用できないRESTfulなジャージー

PD:私はジャージの枠組み、達人、JAXBとTomcat8を使用しています

EDITED:私は、Applicationクラスを削除している、とPOJOのメインは今のServletContextListener

休憩クラスです。

package com.CTAG.rest; 

import java.util.LinkedList; 
import java.util.List; 
import java.util.Objects; 

import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.PathParam; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.MediaType; 
import javax.ws.rs.core.Response; 

import com.CTAG.core.Traslator; 
import eu.datex2.schema._2_0._2_3.D2LogicalModel; 
import eu.datex2.schema._2_0._2_3.Situation; 
import eu.datex2.schema._2_0._2_3.SituationPublication; 
import com.CTAG.filters.FilterByRoad; 
@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(); 
    } 
} 

Applicationクラス

package com.CTAG.application; 

import eu.datex2.schema._2_0._2_3.D2LogicalModel; 
import eu.datex2.schema._2_0._2_3.SituationRecord; 

import javax.ws.rs.ApplicationPath; 
import javax.ws.rs.core.Application; 
import javax.xml.bind.JAXBException; 
import javax.xml.parsers.ParserConfigurationException; 
import javax.xml.transform.TransformerConfigurationException; 

import com.CTAG.core.Traslator; 

import static java.lang.Thread.sleep; 

import java.io.IOException; 
import java.net.URL; 
import java.util.Collections; 
import java.util.HashMap; 
import java.util.Map; 
import java.util.Set; 
import java.util.stream.Collectors; 
import java.util.stream.Stream; 

/** 
* Configuration of the REST application. This class includes the resources and 
* configuration parameter used in the REST API of the application. 
* 
* @author Andoni Da Silva 
* 
*/ 

@ApplicationPath("/rest") 
public class ExchangeApplication extends Application{ 
    @Override 
    public Set<Class<?>> getClasses() { 
     return Stream.of(D2LogicalModel.class) 
       .collect(Collectors.toSet()); 
    } 

    //Old POJO main method 
    public static void init() throws InterruptedException { 

     try { 
      Map<SituationRecord, Integer> map = new HashMap<>(); 
      while (true) { 

       URL url = new URL (" http://infocar.dgt.es/datex2/dgt/SituationPublication/all/content.xml"); 
       Map<SituationRecord, Integer> copia = map; 
       map = Traslator.traslator (copia, url); 
       sleep (120000); 
       //Preubassleep(30000); 
      } 
     } catch (TransformerConfigurationException | JAXBException | ParserConfigurationException | IOException e) { 

      e.printStackTrace(); 

     } 
    } 
} 

の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" 
    id="WebApp_ID" version="3.1"> 

    <display-name>CTAG DATEX2</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> 

    <servlet> 
     <servlet-name>org.CTAG.DATEX2REST</servlet-name> 
     <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>jersey</servlet-name> 
     <url-pattern>/rest*</url-pattern> 
    </servlet-mapping> 

</web-app> 

答えて

0

は、以下のようなものである必要があり、あなたは、あなたがどこ注釈付きを選択するサーブレットを指示する必要があり、あなたはあなたがサーブレットマッピングが間違って持っているようです

<servlet> 
     <servlet-name>jersey</servlet-name> 
     <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
     <init-param> 
     <param-name>com.sun.jersey.config.property.packages</param-name> 
     <param-value>com.CTAG.rest</param-value> 
    </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>jersey</servlet-name> 
     <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping> 
+0

問題の一部になる可能性もありますが、問題は解決しません。ありがとうございます。 – Datex2

+0

あなたは何をしようとしていますか? – kuhajeyan

+0

localhost:8090/org.CTAG.DATEX2REST/rest/datex – Datex2

0
<!-- Auto scan REST service (false in case resteasy.resources is given) --> 
<context-param> 
    <param-name>resteasy.scan</param-name> 
    <param-value>false</param-value> 
</context-param> 

<!-- this need same with resteasy servlet url-pattern --> 
<context-param> 
    <param-name>resteasy.servlet.mapping.prefix</param-name> 
    <param-value>/rest</param-value> 
</context-param> 
<context-param> 
    <param-name>resteasy.resources</param-name> 
    <param-value>com.test.rest.service.HelloWorldService</param-value> 
</context-param> 
<!-- <listener> <listener-class> org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap 
    </listener-class> </listener> --> 

<servlet> 
    <servlet-name>resteasy-servlet</servlet-name> 
    <servlet-class> 
     org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>resteasy-servlet</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
</servlet-mapping> 
+0

この回答は何ですか? – Datex2

+0

これはweb.xmlでうまくいきます – gladiator

0

からクラス私はそれが私ヘクタールということでした、問題を解決しましたweb.xmlは間違ったディレクトリにあり、WebContent/WEB_INF/web.xmlになければなりません。したがって、web.xmlに達していないとmvnが失敗しなかったため無視されました。さらに、POJOメインクラスはServletContextListenerに置き換えられ、Applicationクラスも削除されました。

関連する問題