2017-01-10 2 views
0

У меня есть набор веб-сервисов RESTful, которые обычно развертываются на сервере Glassfish. Дело в том, что место, где я работаю, работает только с Apache, поэтому мне пришлось переключаться, и теперь возникают проблемы. Мне удалось развернуть пару RESTful-ресурсов, и они работают очень хорошо (все, что они делают, это получение информации из базы данных и возврат этой информации в ArrayList POJO). Пример кода:TomEE с Джерси RESTful Web Service

@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) { 
    } 
} 

Проблема возникает, когда я использую Джерси для создания клиентов к этим ресурсам для того, чтобы быть вызван из JSP (все это делается, чтобы служить ряд веб-страниц), и я получаю это ошибка:

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)

я вручную установить библиотеки, даже скачал проклятый JerseyClientBuilder, но ничего из этого работает. Спасибо заранее

ответ

0

Прежде всего, вы должны добавить несколько библиотек в пути к классам Jersy для поддержки JSP и аннотаций конфигурации:

Maven артефакты:

<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> 

И если вы используете Jersy внедренного , вы должны, конечно, настроить его поддержку JSP.

+0

Дело в том, что я не использую Maven, и поэтому у меня нет артефактов Maven. Что сводит меня с ума, так это то, что эта установка отлично работает в Glassfish, и это не в TomEE. Я не знаю, как добавить эти библиотеки в путь класса Джерси. Спасибо в любом случае – Asiertxo

0

Если вы используете tomee 1, вы не можете использовать API-интерфейс jaxrs, но если вы используете tomee 7, он встроен, но основан на CXF. Конкретно удалите все jersey и jaxrs api jars из вашего webapp, и вы получите его бесперебойно. Ваш код кажется достаточно переносным, чтобы не заботиться о том, чтобы не использовать майку.

+0

Это не просто дает мне ошибки компиляции, но также выдает некоторые новые исключения, не работает – Asiertxo

+0

вам следует поделиться им, код, который вы скопировали, работает на tomee 7 без зависимости от jersey/jaxrs. –

Смежные вопросы