从其他项目调用REST Web服务

时间:2015-11-24 14:25:28

标签: java eclipse rest

我在一个名为pmtv2的项目中实现了一个rest webservice java类,我想从另一个名为sigac的项目中的其他类中调用它,如图所示。enter image description here

这是pmtv2

中包中包含的WService类
package cat.diba.jee.pmtv2.ws.rest;

import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import net.sf.json.JSONObject;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import cat.diba.jee.pmtv2.ws.rest.manager.RealitzarExpedientManager;
import cat.diba.jee.pmtv2.ws.rest.manager.RealitzarTramitManager;
import cat.diba.jee.pmtv2.ws.rest.message.RestMessage;
import cat.diba.jee.pmtv2.ws.rest.object.RespostaExpedient;
import cat.diba.jee.pmtv2.ws.rest.object.RespostaRealitzarTramit;
import cat.diba.jee.pmtv2.ws.rest.utils.TokenUtils;

/**
 * The Class PmtRestWsService.
 */
@Path("/tramitacio")
public class PmtRestWsService {

    /**
     * The Constant CLASS_ID.
     */
    private static final String CLASS_ID = PmtRestWsService.class.getName();

    /**
     * Log de la classe.
     */
    private static final Log LOG = LogFactory.getLog(CLASS_ID);

    /**
     * The Constant PARAM_SESSION.
     */
    private static final String PARAM_SESSION = "session";

    /**
     * The Constant PARAM_TOKEN.
     */
    private static final String PARAM_TOKEN = "token";

    /**
     * The Constant PARAM_USERNAME.
     */
    private static final String PARAM_USERNAME = "username";

    /**
     * The Constant PARAM_TRAMITS.
     */
    private static final String PARAM_TRAMITS = "tramits";

    /**
     * The constants PARAM_EXPEDIENTS
     */
    private static final String PARAM_EXPEDIENTS = "expedients";

    /**
     * Realitzar tramit.
     *
     * @param params the params
     * @return the pmt expedient
     */
    @POST
    @Path("/realitzarTramit")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces("application/json,application/xml")
    public RespostaRealitzarTramit realitzarTramit(String params) {
        LOG.debug("Parametres = " + params);

        RealitzarTramitManager manager = new RealitzarTramitManager();
        RespostaRealitzarTramit resposta = new RespostaRealitzarTramit();

        JSONObject jsonObject = new JSONObject(params);
        try {
            if (validarParametresEntrada(jsonObject)) {
                String session = jsonObject.getString(PARAM_SESSION);
                String token = jsonObject.getString(PARAM_TOKEN);
                if (TokenUtils.validarToken(session, token)) {
                    resposta = manager.realitzarTramits(jsonObject, jsonObject.getString(PARAM_USERNAME));
                } else {
                    //Token no validat
                    resposta.setTramitOK(false);
                    resposta.setError(RestMessage.ERROR_TOKEN_INVALID.getMessage());
                }
            } else {
                //Paràmetres invàlids
                resposta.setTramitOK(false);
                resposta.setError(RestMessage.ERROR_REALITZAR_TRAMIT_PARAMETRES_ENTRADA.getMessage());
            }
        } catch (Exception e) {
            // Errors als paràmetres d'entrada
            LOG.error("ERROR : " + e.getMessage() + " - ORIGEN : " + e.getStackTrace()[0]);
            resposta.setTramitOK(false);
            resposta.setError(RestMessage.ERROR_REALITZAR_TRAMIT_NO_CONTROLAT.getMessage());
            return resposta;
        }
        return resposta;
    }

    /**
     * Realitzar tramit.
     *
     * @param params the params
     * @return the pmt expedient
     */
    @POST
    @Path("/expedient")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces("application/json,application/xml")
    public RespostaExpedient realitzarExpedient(String params) {
        LOG.debug("Parametres = " + params);

        RealitzarExpedientManager manager = new RealitzarExpedientManager();
        RespostaExpedient resposta = new RespostaExpedient();

        JSONObject jsonObject = new JSONObject(params);
        try {
            if (validarParametresEntradaExpedient(jsonObject)) {
                String session = jsonObject.getString(PARAM_SESSION);
                String token = jsonObject.getString(PARAM_TOKEN);
                if (TokenUtils.validarToken(session, token)) {
                    resposta = manager.realitzarExpedients(jsonObject, jsonObject.getString(PARAM_USERNAME));
                } else {
                    //Token no validat
                    resposta.setExpedientOK(false);
                    resposta.setCodiError(901);
                    resposta.setError(RestMessage.ERROR_TOKEN_INVALID.getMessage());
                }
            } else {
                //Paràmetres invàlids
                resposta.setExpedientOK(false);
                resposta.setCodiError(902);
                resposta.setError(RestMessage.ERROR_REALITZAR_EXPEDIENT_PARAMETRES_ENTRADA.getMessage());
            }
        } catch (Exception e) {
            // Errors als paràmetres d'entrada
            LOG.error("ERROR : " + e.getMessage() + " - ORIGEN : " + e.getStackTrace()[0]);
            resposta.setExpedientOK(false);
            resposta.setCodiError(998);
            resposta.setError(RestMessage.ERROR_REALITZAR_EXPEDIENT_NO_CONTROLAT.getMessage());
            return resposta;
        }
        return resposta;
    }

    /**
     * validacio de entrada de expedients
     * 
     * @param jsonObject
     * @return
     */
    private boolean validarParametresEntradaExpedient(JSONObject jsonObject) {
        LOG.debug("validarPeticio(jsonObject) - Inici");

        boolean result = true;
        try {
            jsonObject.getJSONArray(PARAM_EXPEDIENTS);
            jsonObject.getString(PARAM_USERNAME);
            jsonObject.getString(PARAM_SESSION);
            jsonObject.getString(PARAM_TOKEN);
        } catch (Exception e) {
            result = false;
        }

        LOG.debug("validarParametresEntrada(jsonObject) - Fi");
        return result;
    }

    /**
     * Validar parametres entrada.
     *
     * @param jsonObject the json object
     * @return true, if successful
     */
    private boolean validarParametresEntrada(final JSONObject jsonObject) {
        LOG.debug("validarPeticio(jsonObject) - Inici");

        boolean result = true;
        try {
            jsonObject.getJSONArray(PARAM_TRAMITS);
            jsonObject.getString(PARAM_USERNAME);
            jsonObject.getString(PARAM_SESSION);
            jsonObject.getString(PARAM_TOKEN);
        } catch (Exception e) {
            result = false;
        }

        LOG.debug("validarParametresEntrada(jsonObject) - Fi");
        return result;
    }
}

有什么办法吗?

4 个答案:

答案 0 :(得分:1)

你应该有一个应用服务器,你可以在localhost上使用tomcat,你可以在你的其他项目上发送àRequeston your rest url:localhost [portNumber] / [yourRestService]

你可以看到:How to send HTTP request in java?

答案 1 :(得分:1)

JAX-RS客户端API

您可以尝试JAX-RS Client API,它提供了一个用于访问任何REST资源的高级API。客户端API在javax.ws.rs.client包中定义。

要使用客户端API访问REST资源,您需要执行以下步骤:

  1. 获取javax.ws.rs.client.Client界面的实例。
  2. 使用目标配置Client实例。
  3. 根据目标创建请求。
  4. 调用请求。
  5. 实施例

    尝试以下操作来访问您的网络服务(只需根据您的需要更改URI路径):

    Client client = ClientBuilder.newClient();
    WebTarget target = client.target("http://localhost:8080")
                             .path("pmtv2")
                             .path("api")
                             .path("tramitacio")
                             .path("realitzarTramit");
    
    RespostaExpedient response = target.request(MediaType.APPLICATION_JSON)
                                       .post(Entity.json(data)), RespostaExpedient.class);
    

    更多信息

    您需要JAX-RS Client API的实施,例如JerseyRESTEasy

答案 2 :(得分:0)

您可以使用必需的参数对您的网络服务进行http getrequest。为此,您需要在项目中添加httpclient jar。

要使httpget请求起作用,您必须在应用服务器上部署Web服务,如tomcat或jboss或glassfish。

//Creating http client
    HttpClient client = HttpClientBuilder.create().build();


    HttpGet request = new HttpGet("localhost:8080/pmtv2/tramitacio/realitzarTramit?params="+params); // call to your webservice with required parameters

    // add request header
    request.addHeader("User-Agent", USER_AGENT);
    HttpResponse response = client.execute(request);

//receiving response
    System.out.println("Response Code : " 
                + response.getStatusLine().getStatusCode());

    BufferedReader rd = new BufferedReader(
        new InputStreamReader(response.getEntity().getContent()));

    StringBuffer result = new StringBuffer();
    String line = "";
    while ((line = rd.readLine()) != null) {
        result.append(line);
    }

答案 3 :(得分:0)

在应用服务器(Tomcat?)中发布应用程序,获取发布它的URL并使用这样的代码来调用它:

HttpURLConnection huc = (HttpURLConnection) url.openConnection();
URL url = new URL(desturl);
huc.setRequestMethod("GET");
byte[] postData = null; 
int postDataLength; 
huc.setDoOutput(true);
postData = data.getBytes( StandardCharsets.UTF_8 );
postDataLength = postData.length;
huc.setRequestProperty( "Content-Type", "application/x-www-form-urlencoded"); 
huc.setRequestProperty( "charset", "utf-8");
huc.setRequestProperty( "Content-Length", Integer.toString( postDataLength ));
huc.connect();
rd = new BufferedReader(new InputStreamReader(huc.getInputStream()));
retcode = huc.getResponseCode();