2017-01-10 1 views
0

Ich habe eine Reihe von RESTful-Webdiensten, die normalerweise in einem Glassfish-Server bereitgestellt werden. Die Sache ist, dass der Ort, an dem ich arbeite, nur mit Apache funktioniert, also musste ich wechseln und jetzt kommen die Probleme. Ich habe es geschafft, ein paar RESTful-Ressourcen bereitzustellen und sie funktionieren gut (alles, was sie tun, ist, Informationen aus einer Datenbank abzurufen und diese Informationen in einer ArrayList von POJOs zurückzugeben). Beispiel für den Code:TomEE mit Jersey RESTful-Webdienst

@Path("/FH01T02") 
public class FH01T02Resource { 

@Context 
private UriInfo context; 

/** 
* Creates a new instance of FH01T02Resource 
*/ 
public FH01T02Resource() { 
} 

/** 
* Retrieves representation of an instance of WS_Resources.FH01T02Resource 
* 
* @return an instance of java.lang.String 
*/ 
@GET 
@Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON) 
public Response FH01T02() throws SQLException { 
    try { 
     ArrayList<Coche_FH01T02> lista = new ArrayList<>(); 
     com.ibm.db2.jcc.DB2SimpleDataSource ds = new com.ibm.db2.jcc.DB2SimpleDataSource(); 

     // set connection properties 
     ds.setServerName("l42fis25"); 
     ds.setPortNumber(12040); 
     ds.setDatabaseName("FH044201"); 
     ds.setDriverType(4); 

     // get connection 
     java.sql.Connection con = ds.getConnection("ufhadm", "UFHADM"); 
     System.out.println("Successful connection to 'fh044201' using JDBC Type 4 driver"); 
     ResultSet rs = null; 
     Statement stmt = con.createStatement(rs.TYPE_SCROLL_INSENSITIVE, rs.CONCUR_READ_ONLY); 
     String query = "SELECT * FROM FH01T02"; 
     rs = stmt.executeQuery(query); 
     while (rs.next()) { 
      Coche_FH01T02 coche = new Coche_FH01T02(); 
      coche.setWerk(rs.getString("WERK")); 
      coche.setSpj(rs.getString("SPJ")); 
      coche.setKanr(rs.getString("PZ")); 
      coche.setWerk0(rs.getString("WERK0")); 
      coche.setSpj0(rs.getString("SPJ0")); 
      coche.setKnr0(rs.getString("KNR0")); 
      coche.setWerk1(rs.getString("WERK1")); 
      coche.setStatus1(rs.getString("STATUS1")); 
      coche.setFgstwelt(rs.getString("FGSTWELT")); 
      coche.setFgstspez(rs.getString("FGSTSPEZ")); 
      coche.setFgsttm(rs.getString("FGSTTM")); 
      coche.setFgstpz(rs.getString("FGSTPZ")); 
      coche.setFgstmj(rs.getString("FGSTMJ")); 
      coche.setFgstwk(rs.getString("FGSTWK")); 
      coche.setFgstlfd(rs.getString("FGSTLFD")); 
      coche.setMotornummer(rs.getString("MOTORNUMMER")); 
      coche.setKmodell(rs.getString("KMODELL")); 
      coche.setPlatz(rs.getString("PLATZ")); 
      coche.setRpk_nr(rs.getString("RPK_NR")); 
      coche.setTpvk(rs.getString("TPVK")); 
      coche.setWerk_rl(rs.getString("WERK_RL")); 
      coche.setRohbaulinie(rs.getString("ROHBAULINIE")); 
      coche.setWerk_ml(rs.getString("WERK_ML")); 
      coche.setMontagelinie(rs.getString("MONTAGELINIE")); 
      coche.setWerk_ll(rs.getString("WERK_LL")); 
      coche.setLacklinie(rs.getString("LACKLINIE")); 
      coche.setKarossenzustand(rs.getString("KAROSSENZUSTAND")); 
      coche.setExt_waggonnr(rs.getString("EXT_WAGGONNR")); 
      coche.setExt_waggon_lfd(rs.getString("EXT_WAGGON_LFD")); 
      coche.setExt_waggon_pos(rs.getString("EXT_WAGGON_POS")); 
      coche.setExt_ist_seq(rs.getString("EXT_IST_SEQ")); 
      lista.add(coche); 
     } 
     rs.close(); 
     stmt.close(); 
     con.close(); 
     return Response.status(200).entity(lista).build(); 
    } catch (Exception e) { 
     return Response.status(200).entity(e.getMessage()).build(); 
    } 
} 

    /** 
    * PUT method for updating or creating an instance of FH01T02Resource 
    * 
    * @param content representation for the resource 
    */ 
    @PUT 
    @Consumes(MediaType.APPLICATION_XML) 
    public void putXml(String content) { 
    } 
} 

Das Problem kommt, wenn ich Jersey verwende Kunden auf diese Ressourcen zu schaffen, um von einer JSP aufgerufen werden (dies alles getan, um eine Reihe von Web-Seiten zu dienen) und ich bekomme diese Fehler:

org.apache.jasper.JasperException: java.lang.RuntimeException: java.lang.ClassNotFoundException: org.glassfish.jersey.client.JerseyClientBuilder org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:479) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339) javax.servlet.http.HttpServlet.service(HttpServlet.java:731) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

ich habe Bibliotheken manuell eingestellt, heruntergeladen auch das verdammte JerseyClientBuilder aber nichts davon funktioniert. Vielen Dank im Voraus

Antwort

0

Zunächst einmal müssen Sie einige Bibliotheken in Ihrem Classpath der Jersy hinzufügen JSP und Annotation Konfiguration zu genügen:

Maven Artefakte:

<dependency> 
     <groupId>org.eclipse.jetty</groupId> 
     <artifactId>apache-jsp</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>org.eclipse.jetty</groupId> 
     <artifactId>jetty-plus</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>org.eclipse.jetty</groupId> 
     <artifactId>jetty-annotations</artifactId> 
    </dependency> 

Und wenn Sie verwenden Jersy eingebettet , müssen Sie natürlich seine JSP-Unterstützung konfigurieren.

+0

Die Sache ist, dass ich Maven nicht verwende und daher habe ich keine Mavenartefakte. Was mich verrückt macht, ist, dass dieses Setup in Glassfish ganz gut funktioniert und nicht in TomEE. Ich weiß auch nicht, wie ich diese Bibliotheken zu Jersey's Klassenpfad hinzufügen soll. Trotzdem danke – Asiertxo

0

Wenn Sie tomee 1 verwenden, können Sie die Jaxrs-Client-API nicht verwenden, aber wenn Sie tomee 7 verwenden, ist es zwar integriert, basiert aber auf CXF. Entfernen Sie alle Jersey und Jaxrs api Gläser aus Ihrer Webapp und Sie werden es reibungslos laufen lassen. Ihr Code scheint tragbar genug zu sein, um sich nicht darum zu kümmern, kein Trikot zu verwenden.

+0

Es gibt mir nicht nur Kompilierungsfehler, sondern wirft auch einige neue Ausnahmen, funktioniert nicht – Asiertxo

+0

sollten Sie es dann teilen, der Code, den Sie kopiert, arbeitet auf Tomee 7 ohne Trikot/Jaxrs Abhängigkeit überhaupt. –