2016-04-09 74 views
3

需要做什麼?如何將REST Web服務部署到AWS?

在AWS上部署帶有Web服務(REST)的Web應用程序。 (Tomcat服務器)

我做了什麼?

使用REST Web服務構建Web應用程序。經過本地測試成功。

問題

現在,當我使用彈性魔豆給404錯誤將其部署到AWS。

我的web服務代碼

@Path("/abc") 
public class registerService { 
    @POST 
    @Path("/crunchifyService") 
    @Consumes(MediaType.APPLICATION_JSON) 
    public Response crunchifyREST(InputStream incomingData) { 
     StringBuilder crunchifyBuilder = new StringBuilder(); 
     try { 
      BufferedReader in = new BufferedReader(new InputStreamReader(incomingData)); 
      String line = null; 
      while ((line = in.readLine()) != null) { 
       crunchifyBuilder.append(line); 
      } 
     } catch (Exception e) { 
      System.out.println("Error Parsing: - "); 
     } 
     System.out.println("Data Received: " + crunchifyBuilder.toString()); 

     User userObject = new Gson().fromJson(crunchifyBuilder.toString(), User.class); 
     System.out.println("JSon object: " + userObject.getSurname()); 
     int status = RegisterDao.register(userObject); 
     if(status == 1) 
     { 



     }else{ 
      System.out.println("Failed again"); 

     } 

     // return HTTP response 200 in case of success 
     return Response.status(200).entity(crunchifyBuilder.toString()).build(); 
    } 

    @GET 
    @Path("/verify") 
    @Produces(MediaType.TEXT_PLAIN) 
    public Response verifyRESTService(InputStream incomingData) { 
     String result = "CrunchifyRESTService Successfully started.."; 

     // return HTTP response 200 in case of success 
     return Response.status(200).entity(result).build(); 
    } 


    @GET 
     @Path("/users") 
     @Produces(MediaType.TEXT_PLAIN) 
     public Response getUsers(){ 
      return Response.status(200).entity("Done").build(); 
     } 
} 

REST客戶端代碼

<% 

String json = new Gson().toJson(u); 
System.out.println(json); 

try { 
    URL url = new URL("http://storageserver-env.sa-east-1.elasticbeanstalk.com/MyApplicationName/api/abc/crunchifyService"); 
    URLConnection connection = url.openConnection(); 
    connection.setDoOutput(true); 
    connection.setRequestProperty("Content-Type", "application/json"); 
    connection.setConnectTimeout(5000); 
    connection.setReadTimeout(5000); 
    OutputStreamWriter out1 = new OutputStreamWriter(connection.getOutputStream()); 
    out1.write(json); 
    out1.close(); 

    BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); 

    while (in.readLine() != null) { 
    } 
    System.out.println("\nCrunchify REST Service Invoked Successfully.."); 
    in.close(); 
} catch (Exception e) { 
    System.out.println("\nError while calling Crunchify REST Service"); 
    System.out.println(e); 
} 

%> 

我的服務器日誌說

127.0.0.1 - - [09/Apr/2016:13:38:05 +0000] "POST /SecureStorage/api/abc/crunchifyService HTTP/1.1" 404 1070

**

web.xml中

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 
    <display-name>SecureStorage</display-name> 
    <welcome-file-list> 
    <welcome-file> 
    createTable.jsp</welcome-file> 
    </welcome-file-list> 

    <servlet> 
     <servlet-name>Application</servlet-name> 
     <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <param-name>jersey.config.server.provider.packages</param-name> 
      <param-value>registration</param-value> 
     </init-param> 
     </servlet> 
    <servlet-mapping> 
    <servlet-name>Application</servlet-name> 
     <url-pattern>/api/*</url-pattern> 
    </servlet-mapping> 
</web-app> 
+0

檢查你的服務器日誌,看看爲什麼部署失敗 –

+0

@MarkB它只是這個「127.0.0.1說 - - [09 /四月/ 2016:13:38:05 +0000]「POST/SecureStorage/api/abc/crunchifyService HTTP/1.1」404 1070「 – swapnil7

+0

這是您的訪問日誌,而不是您的部署日誌 –

回答

1

在AWS上部署Web應用程序或Web服務沒有區別。

您將在aws網站上獲得關於如何部署Web應用程序的不錯教程。

我的問題是什麼?

從其餘客戶端調用後,它給我404錯誤。

它是如何解決的?

在上面的評論部分中的說明後,我在我的日誌中找到。

SEVERE [http-nio-8080-exec-8] org.apache.catalina.core.StandardWrapperValve.invoke Allocate exception for servlet Application java.lang.NoSuchMethodError: javax.ws.rs.core.Application.getProperties()Ljava/util/Map;

這是一個實際的問題。當您的類路徑中有兩個不同版本的類時,會發生此異常。在此之後,我刪除了額外的重疊jar。 More info about above exception

另一個問題 上述改進後,預計一切都將正常工作,但在從靜止客戶服務呼叫仍有404錯誤代碼。

解決方案

我的客戶使用的URL的格式如下。

" http://storageserver-env.sa-east-1.elasticbeanstalk.com/MyApplicationName/api/abc/crunchifyService "

URLGivenByAWSWhereWebAppIsDepoyed/MyApplicationName/ResourcePath

上面的URL格式正在對本地地址即 的locahost:8080/MyApplicationName/ResourcePath

,但它不是在部署後的工作。

我試圖通過從上面的url中刪除MyApplicationName的名稱,它的工作。

工作格式

URLGivenByAWSWhereWebAppIsDepoyed/ResourcePath

+0

我面臨同樣的問題。在我的情況下,我得到了一個204響應,但「crunchifyREST」方法沒有被調用。我試圖記錄響應,但它沒有達到該方法。任何想法是什麼問題?服務器日誌中沒有例外 –