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를 얻는 방법을 모른다. 그것을 읽을 곳이나 방법을 제안 할 곳이 있다면 - 코멘트를 남겨주세요.
응답 해 주셔서 감사합니다. 나는 그것이 맞는 지 잘 모르겠다. 나는 Jersey의 DI를 사용하여 컨텍스트에 액세스 할 수 있도록 결정했습니다. – aime