2016-05-16 12 views
0

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; 
    } 
} 
+0

コードを入力できますか?あなたを助けることは明らかに不十分です –

答えて

0

エラーは、インターフェイスクラスの@Path@GET@Producesなどの注釈を入れているので、それはインターフェースのインスタンスを作成することはできませんあなたを語っています。その注釈を代わりにTestRESTServiceBABeanクラスに移動します。

関連する問題