Webサービスのv2を作成しようとしています。このため、私は新しいパッケージcom.package.v2を作成しました。ここでは、リモートインタフェースが宣言されています。 v2のクラス名をv1と同じにすると、glassfishサーバーへの配備中にエラーが発生します。REST Webサービスの複数のバージョン - 実装エラー
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.|#]
v2クラスの名前を別の名前に変更すると、すべて正常に動作します。同じ名前の両方のバージョンをどのように保つことができるか教えてください。
詳細: INFO | glassfish3.1.2 | com.sun.jersey.api.core.ScanningResourceConfig | _ThreadID = 61; _ThreadName =スレッド-2; |ルートリソースクラスが見つかりました:
インターフェースcom.package .v2.TestRESTServiceBA
インタフェースcom.package.v1.TestRESTServiceBA
追加コード:
版1つのインタフェース
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();
}
版1実施
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;
}
}
バージョン2インタフェース パッケージ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();
}
バージョン2実装 package 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;
}
}
コードを入力できますか?あなたを助けることは明らかに不十分です –