26. oktober 2005 - 16:34Der er
21 kommentarer og 1 løsning
webservices og SOAP
Jeg skal lave en webservice. På denne skal jeg håndtere SOAP faults og SOAP exceptions så brugeren får pæne fejlmeddelelser, men hvor er det man gør det henne?
I den fil, som man har lavet ud fra sin webservice eller i den klasse fil som man har lavet sin webservice ud fra?
du kan vælge at lave dit web service API så du aldrig smider en exception og bare returner nogle værdier, så catcher du exception på server side og returnerer de værdier som client så kan teste på
du kan vælge at smide exception og så lade client have en try catch mekanisme og udskrive noget pænt til brugeren
client skal under alle omstændigheder håndtere fejl som ligger mellem din kode server side og client kode (altså fejl i servlet container, netværks fejl etc.)
SOAPException: faultCode=SOAP-ENV:IOException; msg=Connection refused: connect; targetException=java.net.ConnectException: Connection refused: connect] at org.apache.soap.SOAPException.<init>(SOAPException.java:78) at oracle.soap.transport.http.OracleSOAPHTTPConnection.send(OracleSOAPHTTPConnection.java:765) at org.apache.soap.rpc.Call.invoke(Call.java:261) at mypackage.SportKStub.tilmeld(SportKStub.java:97) at _Sporten._jspService(Sporten.jsp:11) [/Sporten.jsp] at oracle.jsp.runtime.HttpJsp.service(HttpJsp.java:139) at oracle.jsp.runtimev2.JspPageTable.service(JspPageTable.java:349) at oracle.jsp.runtimev2.JspServlet.internalService(JspServlet.java:509) at oracle.jsp.runtimev2.JspServlet.service(JspServlet.java:413) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].server.http.ResourceFilterChain.doFilter(ResourceFilterChain.java:65) at oracle.security.jazn.oc4j.JAZNFilter.doFilter(Unknown Source) at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:604) at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:317) at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:790) at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].server.http.HttpRequestHandler.run(HttpRequestHandler.java:270) at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].server.http.HttpRequestHandler.run(HttpRequestHandler.java:112) at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:192) at java.lang.Thread.run(Thread.java:534)
vil nemlig gerne håndtere alle fejl på en brugervenlig facon.
Sporten.jsp - Boolean status = connection.tilmeld(request.getParameter("fornavn"),request.getParameter("efternavn"),request.getParameter("cprnummer"),request.getParameter("telefon"),request.getParameter("kon"),request.getParameterValues("sportsgrene"));
hvor der ikke er try catch blok omkring det kald, men det skal der måske være selv om det er en JSP side?
i SportKStub er der try catch rundt om kaldet til databasen
DbConnection connection = new DbConnection(); ResultSet result; String query = ""; int medlemid = 0;
// Indsæt nyt medlem i database query = "INSERT INTO Medlem VALUES (medlemidnr.NEXTVAL,'"+ fornavn +"','"+ efternavn +"','"+ cprnummer +"','"+ kon + "','"+ telefon +"')"; try{ connection.executeUpdate(query); // indsættelse af nyt medlem færdig!
// hent nye medlems medlems ID. Det skal bruges når vi tilmelder ham sine sportsgrene query = "SELECT Medlemid FROM Medlem WHERE Cprnr = '"+ cprnummer +"'"; result = connection.executeQuery(query);
if(result.next()) { medlemid = result.getInt("Medlemid"); } // hentning af dette medlemsID færdig
// Indsættelse af sportsgrene og knytte dem til det nye medlem if(!sportsgrene[0].equalsIgnoreCase("")) { for (int i = 0; i < sportsgrene.length; i++) { query = "INSERT INTO Knytter VALUES ("+ Integer.parseInt(sportsgrene[i].toString()) +","+ medlemid +")"; connection.executeUpdate(query); } } return true; } catch(SQLException xx) { return false; }
}
Det er en underlig webserice ja, men viste ikke hvad man ellers kunne lave.
din client kode--(kald)--genererer stub kode--(netværk)--Tomcat kode--(kald)--generel web service servlet kode--(kald)--din server kode
din server kode kan ikke fange exceptions i kode til venstre for den og derfor skal der vær enoget fejl håndterings kode i din client kode uanset hvor pæn din server kode er
kunne ikke være bedre:) tak for hjælpen! og undskyld ventetiden jeg gør det altid
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.