2017-01-10 39 views
0

我有一套通常部署在Glassfish服务器中的REST风格的Web服务。 问题是我工作的地方只能和Apache一起工作,所以我不得不切换,现在是问题出现的地方。 我设法部署了几个RESTful资源,它们工作得很好(他们所做的只是从数据库中检索信息并返回POJO的ArrayList中的信息)。代码示例:TomEE与Jersey REST风格的Web服务

@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的classpath支持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中。我不知道如何将这些库添加到Jersey的classpath中。无论如何感谢 – Asiertxo

0

如果您使用tomee 1,您不能使用jaxrs客户端API,但如果您使用tomee 7,它是内置的,但基于CXF。具体从您的web应用程序中删除所有泽西和jaxrs api罐子,你会得到它顺利运行。你的代码看起来足够便携,不用关心不使用球衣。

+0

它不只是给我编译错误,但也会抛出一些新的例外,不起作用 – Asiertxo

+0

你应该分享它,那么你复制的代码工作在tomee 7没有泽西/ jaxrs依赖。 –