2015-11-04 4 views
0

Я работаю на веб-услуг и отдыха клиента с помощью CXF 3.1.2, и у меня есть несколько разъяснений, как показано ниже,Использование client.reset в клиенте CXF Rest

Услуги:

import javax.jws.WebService; 
    import javax.ws.rs.Consumes; 
    import javax.ws.rs.GET; 
    import javax.ws.rs.POST; 
    import javax.ws.rs.Path; 
    import javax.ws.rs.PathParam; 
    import javax.ws.rs.Produces; 
    import javax.ws.rs.core.MediaType; 
    public class GenServiceImpl { 

    @GET 
    @Produces(MediaType.TEXT_PLAIN) 
    @Consumes(MediaType.TEXT_PLAIN) 
    @Path("/agentLogin/{ext}") 

    public String agentLogin(@PathParam("ext") Integer ext) { 
    return "EventAgentLoggedIn"; 
    } 

    @POST 
    @Produces(MediaType.TEXT_PLAIN) 
    @Consumes({"application/xml", MediaType.TEXT_PLAIN}) 
    @Path("/agentLogout") 
    public String agentLogout(String ext) { 
    return "EventAgentLoggedOut"; 
    } 

    } 

Клиент:

import javax.ws.rs.core.Response; 
    import org.apache.cxf.jaxrs.client.WebClient; 
    public class TestClient { 
    static final String REST_URI = "http://localhost:8080/RestfulSample/Restful"; 
    public static void main(String[] args) { 
    WebClient client = WebClient.create(REST_URI); 

    //Get 
    client.path("agentLogin").path(new Integer(1234)).accept(MediaType.TEXT_PLAIN); 
    String agentLoginResponse = client.get(String.class); 
    System.out.println(agentLoginResponse); 
    client.reset(); 

    //Post 
    client.path("agentLogout").accept(MediaType.TEXT_PLAIN); 
    Response agentLogoutResponse = client.post("10245"); 
    System.out.println(agentLogoutResponse.readEntity(String.class)); 
    client.reset(); 
    } 

Разъяснения:

  1. В моем примере выше - в методе почтового сервиса класса (agentLogout), я получаю ошибку, если я заменяю @Consumes({"application/xml", MediaType.TEXT_PLAIN})
    с @Consumes(MediaType.TEXT_PLAIN), тогда как он отлично работает в методе Get (agentLogin), могу я знать, почему это так?

  2. Это право использовать client.reset(); - Здесь я пытаюсь использовать один WebClient для доступа ко всем моим методам.

  3. Не могли бы вы сообщить мне, что я попробовал в моем примере, это лучшая практика? и это будет понятно, если бы вы могли исправить меня здесь

Спасибо,

+0

Вы используете пружину на стороне клиента? –

+0

Нет, я не использую пружину на стороне клиента. – sasikals26

ответ

0

Ниже приведены разъяснения.

  1. Установить тип содержимого для текста/plain при публикации. И вы можете установить на своих серверах класс стороны @Consumes(MediaType.TEXT_PLAIN)

    client.replaceHeader («Content-Type», MediaType.TEXT_PLAIN);

  2. Да, вы можете использовать метод отдыха, здесь есть ява док

При повторном использовании одного экземпляра WebClient для нескольких вызовов, один может появиться желание сбросить свое состояние с помощью сброса (), , например, когда необходимо изменить значение заголовка Accept, а текущий URI необходимо сбрасывать в baseURI (в качестве альтернативы вызову back (true) ). Метод resetQuery() может использоваться для сброса только значений запроса . Оба параметра доступны и для прокси.

  1. Я бы предпочел использовать прокси-сервер и получить доступ к REST больше как OOPS.

Вы можете создать интерфейс для указанного класса сервера (Вообще-то я careate определение REST как интерфейс, а затем реализовать интерфейс (больше как SOAP кстати)), которые могут быть автоматически генерируемый с помощью WADLToJava Maven плагин от WADL.

Ниже приведен пример интерфейса для выше сервера класса на стороне отдыха

public interface GenService { 

    @GET 
    @Produces(MediaType.TEXT_PLAIN) 
    @Consumes(MediaType.TEXT_PLAIN) 
    @Path("/agentLogin/{ext}") 

    public String agentLogin(@PathParam("ext") Integer ext); 

    @POST 
    @Produces(MediaType.TEXT_PLAIN) 
    @Consumes(MediaType.TEXT_PLAIN) 
    @Path("/agentLogout") 
    public String agentLogout(String ext); 

} 

Поскольку вы не используете весной, я создам одноэлементный класс

public class CxfRestSingleton { 

    public static GenService obj; 

    public static GenService getInstance() { 

     if (obj == null) { 
      obj = JAXRSClientFactory.create("http://localhost:8080/RestfulSample/Restful", GenService.class); 
     } 
     return obj; 
    } 

} 

И вы можете получить доступ к остальным, используя ниже код ,

public static void main(String[] args) 
    { 
     System.out.println(CxfRestSingleton.getInstance().agentLogin(12345)); 
    } 
+0

Спасибо @ Karthik. Итак, из вышеупомянутой архитектуры вы подразумеваете, что мне нужно создать класс GenService в клиентской стороне приложения? – sasikals26

+0

Нет необходимости создавать интерфейс в клиентском приложении, приведенный выше фрагмент кода предназначен для клиентской стороны. –

Смежные вопросы