2016-05-16 12 views
0

Ich versuche, eine v2 eines Web-Service zu erstellen. Dazu habe ich ein neues Paket com.package.v2 erstellt, in dem die Remote-Schnittstelle deklariert wurde. Wenn ich den Klassennamen von v2 als v1 behalte, erhalte ich einen Fehler während der Bereitstellung auf dem Glassfish-Server.Mehrere Versionen von REST-Web-Service - Implementierungsfehler

SEVERE|glassfish3.1.2|com.sun.jersey.spi.inject.Errors|_ThreadID=61;_ThreadName=Thread-2;|The following errors and warnings have been detected with resource and/or provider classes: 
SEVERE: The class com.package.v2.TestRESTServiceBA is an interface and cannot be instantiated.|#] 

Wenn ich die Klasse v2 in einen anderen Namen umbenennen, dann funktioniert alles gut. Können Sie mir bitte mitteilen, wie ich die Version mit dem gleichen Namen behalten kann?

Weitere Details: INFO | glassfish3.1.2 | com.sun.jersey.api.core.ScanningResourceConfig | _threadid = 61; _ThreadName = Thread-2; | Root-Ressourcenklassen gefunden:

Schnittstelle com.package .v2.TestRESTServiceBA

Schnittstelle com.package.v1.TestRESTServiceBA

Hinzufügen von Code:

Version 1 Schnittstelle

package com.package.v1; 

import java.util.Map; 
import javax.ejb.Remote; 
import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 
import com.package.common.dto.ResponseDTO; 

@Remote 
@Path("/v1/test") 
public interface TestRESTServiceBA { 

    @GET 
    @Path("/headers") 
    @Produces("application/json") 
    ResponseDTO<Map<String, String>> getAllHeaders(); 
} 

Version 1 Implementation

package com.package.v1; 

import java.util.Enumeration; 
import java.util.HashMap; 
import java.util.Map; 
import javax.ejb.Stateless; 
import javax.servlet.http.HttpServletRequest; 
import javax.ws.rs.core.Context; 
import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 
import com.package.common.dto.ResponseDTO; 
import com.package.v1.TestRESTServiceBA; 

@Stateless 
public class TestRESTServiceBABean implements TestRESTServiceBA { 

    private static final Log LOG = LogFactory.getLog(TestRESTServiceBABean.class); 

    @Context 
    private HttpServletRequest request; 

    public TestRESTServiceBABean() { 
    } 

    @Override 
    public ResponseDTO<Map<String, String>> getAllHeaders() { 
     LOG.info("GET:v1/test/headers requested!"); 
     final ResponseDTO<Map<String, String>> response = new ResponseDTO<>(); 
     return response; 
    } 
} 

Version 2 Schnittstelle Paket com.package.v2;

import java.util.Map; 
import javax.ejb.Remote; 
import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 
import com.package.common.dto.ResponseDTO; 

@Remote 
@Path("/v2/test") 
public interface TestRESTServiceBA2 { 

    @GET 
    @Path("/headers") 
    @Produces("application/json") 
    ResponseDTO<Map<String, String>> getAllHeaders(); 
} 

Version 2 Ausführung Paket com.package.v2;

import java.util.HashMap; 
import java.util.Map; 
import javax.ejb.Stateless; 
import javax.servlet.http.HttpServletRequest; 
import javax.ws.rs.core.Context; 
import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 
import com.package.common.dto.ResponseDTO; 
import com.package.common.model.DealerSpeedUser; 
import com.package.v2.TestRESTServiceBA2; 


@Stateless 
public class TestRESTServiceBABean implements TestRESTServiceBA { 

    private static final Log LOG = LogFactory.getLog(TestRESTServiceBABean2.class); 

    @Context 
    private HttpServletRequest request; 

    public TestRESTServiceBABean2() { 
    } 

    @Override 
    public ResponseDTO<Map<String, String>> getAllHeaders() { 
     LOG.info("GET:v2/test/headers requested!"); 

     final ResponseDTO<Map<String, String>> response = new ResponseDTO<>(); 
     return response; 
    } 
} 
+0

können Sie Code zur Verfügung stellen? Es ist eindeutig nicht genug, um dir zu helfen –

Antwort

0

Der Fehler Sie sagt es eine Instanz einer Schnittstelle nicht schaffen können, weil Sie die Klassen @Path@GET, @Produces usw. Anmerkungen auf die Schnittstelle gesteckt haben. Verschieben Sie diese Anmerkungen stattdessen in die TestRESTServiceBABean-Klassen.