Bereitstellen von REST-web-service auf AWS?
Was muss getan werden?
Deploy-web-Anwendung mit web-service(REST) auf der AWS-Plattform. (Tomcat-server)
, Was ich getan habe?
Erstellung von web-Anwendungen mit REST-web-service. Getestet lokal erfolgreich.
Problem
Wenn ich jetzt bereitstellen, um die AWS elastic beanstalk geben 404-Fehler.
Meine Web-Service-code
@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-client-code
<%
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);
}
%>
Meinem server log sagt
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>
- Überprüfen Sie Ihre server-log, um zu sehen, warum der Einsatz wird scheitern
- Es sagt einfach nur diese "127.0.0.1 - - [09/Apr/2016:13:38:05 +0000] "POST /SecureStorage/api/abc/crunchifyService HTTP/1.1" 404 1070"
- Das ist Ihr access-log, nicht für Ihre Bereitstellung log
- Verlinkt meine log-Datei
- Dude... die Sie benötigen, um Sie zu löschen, es hat Ihr AWS-Schlüssel in es.
- Sie müssen auch gehen, löschen Sie die AWS-keys jetzt und neue zu schaffen.
- Schau dir all die Ausnahmen in Ihrer
/var/log/tomcat8/localhost.2016-04-09.log
ich fühlen, wie Sie sind, meine Zeit zu verschwenden und alle anderen auf dieser Website nicht auf der Suche auf Ihre log-Dateien und die Suche nach diesen Ausnahmen selbst. - Vielen Dank für alles
- Danke für die Lektion 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es gibt keinen Unterschied zwischen der Bereitstellung von web-Anwendung oder web-service auf AWS.
Erhalten Sie schönes tutorial auf der aws-website zum bereitstellen von web-Anwendung.
Was war mein problem?
Nach dem Aufruf von rest-client , es war mir 404-Fehler.
, Wie es gelöst wurde?.
Nach Anleitung in obigen Kommentaren , fand ich in meinem Logbuch.
War dies ein Tatsächliches problem. Diese Ausnahme tritt auf, wenn zwei verschiedene Versionen der Klasse, die auf Ihren Klassenpfad ein. Danach habe ich gelöscht, meine extra überlappende Glas.
Mehr Infos über oben genannten Ausnahme
Ein weiteres problem
Nach oben Verbesserung Es wurde erwartet, dass alles funktioniert Prima , aber es gibt noch 404 Fehler-code auf den service-Aufruf von rest-client.
Lösung
Meine client-url im folgenden format ein.
URLGivenByAWSWhereWebAppIsDepoyed/MyApplicationName/ResourcePath
Oben url-format wurde auf die lokale Adresse, also
localhost:8080/MyApplicationName/ResourcePath
Aber es hat nicht funktioniert nach der Bereitstellung.
Ich habe versucht, durch entfernen von Namen von MyApplicationName von oben-url und es funktionierte.
Arbeiten format
URLGivenByAWSWhereWebAppIsDepoyed/ResourcePath