2016-08-21 3 views
0

UriInfo을 클라이언트에 주입해야하지만 해결 방법을 찾을 수 없습니다. 주요 목표는 WebTarget을 만들 때 기본 URI (localhost : port)를 얻는 것입니다. 사실은 다른 웹 클라이언트가 응용 프로그램을 사용하고 명시적인 URI가 필요하다는 것입니다. Client-Resource 통신을 테스트하고 싶습니다. 따라서 엄격한 URI를 테스트 클래스로 가져와야합니다. 응용 프로그램은 다중 모듈 Maven 프로젝트입니다. 리소스와 클라이언트는 서로 다른 모듈에 있습니다.저지 2 - 클라이언트의 기본 URI를 얻으십시오.

--service-module 
     \Resource.java 
     \web.xml 
--client-module 
     \Client.java 
--client-test-module 
     \ClientResourceIntegrationTest.java 

Client.java를

public class Client { 

    @Context 
    UriInfo uriInfo; 

    public Result getResult(String userName, Filter queryFilter) { 
     ClientConfig clientConfig = new ClientConfig(); 
     clientConfig.register(Filter.class); 
     Client client = ClientBuilder.newClient(clientConfig); 

     WebTarget webTarget = client 
       //need to change on dynamically retrieved URI 
       .target("http://localhost:1234/") 
       .path("all/") 
       .path(userName); 

     Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_JSON); 
     Response response = invocationBuilder.post(Entity.entity(queryFilter, MediaType.APPLICATION_JSON)); 
     int responseStatus = response.getStatus(); 
     Result queryResult = response.readEntity(Result.class); 
     response.close(); 
     return queryResult; 
    } 

} 

: -
내가 (이 간단한 형태로 묘사되는 폴더 구조에 관심을 지불하지 마십시오) 아래의 프로젝트 구조를 설명 썰매의 명확하게하려면 Resource.java

@Path("/") 
public class Resource { 

    @Context 
    UriInfo uriInfo; 

    @POST 
    @Path("all/{user}") 
    @Produces(MediaType.APPLICATION_JSON) 
    public Result getAll(@PathParam("user") String userName, Filter filter) { 
     List<Map<String, Object>> attributes = new ArrayList<Map<String, Object>>(); 
     Map<String, Object> values = new HashMap<String, Object>(); 
     values.put("value", 1); 
     attributes.add(values); 

     Result result = new Result(attributes); 
     return result; 
    } 

} 

저지의 Ser vletContainer는 service-module에있는 web.xml에 정의되어 있습니다. 스캔 된 패키지는이 모듈에있는 리소스 만 사용합니다 (따라서 UriInfo이 Resource 객체에 주입됩니다). 클라이언트를 포함하는 나머지 클래스의 인스턴스는 IoC 컨테이너없이 생성됩니다 (분명히 UriInfo은 null 임). 그래서, 나는 그 경우에 URI를 얻는 방법을 모른다. 그것을 읽을 곳이나 방법을 제안 할 곳이 있다면 - 코멘트를 남겨주세요.

답변

1

귀하의 질문에 대한 확신이 없습니다. 웹 응용 프로그램을 배포 할 때 EAR 파일에서 컨텍스트 루트를 정의 할 수 있습니다. 배포자가 다른 컨텍스트 루트를 구성하지 않는 한 다른 응용 프로그램 서버에 동일한 EAR을 설치하면 컨텍스트 루트가 변경되지 않습니다.

클라이언트는 잠재적으로 다른 시스템에서 실행될 수 있으므로 서버를 찾을 수있는 위치 정보로 클라이언트를 구성하는 방법을 찾아야합니다. 이것은 대개 특성 파일이나 데이터베이스의 구성 테이블에 의해 수행됩니다. 모든 적합한 환경에 대한 설정 파일을 설정하고 클라이언트에 제공하십시오.

+0

응답 해 주셔서 감사합니다. 나는 그것이 맞는 지 잘 모르겠다. 나는 Jersey의 DI를 사용하여 컨텍스트에 액세스 할 수 있도록 결정했습니다. – aime