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;
}
}
können Sie Code zur Verfügung stellen? Es ist eindeutig nicht genug, um dir zu helfen –