程序挂起来调用REST服务

时间:2014-10-19 02:25:10

标签: java jsp rest tomcat

我正在REST上运行Tomcat服务,并从Eclipse运行客户服务。

我的程序在第二次运行时会一直停止。我在运行Tomcat

的控制台中没有收到任何例外

第一次调用Controller时,没有问题,一切正常。在Controller中执行完所有操作后,用户将重定向回JSP页面。在JSP页面上点击按钮后,再次运行下面显示的Controller代码。

但是这次,程序在函数中停止:

getOrderDetails(id, order, service);
执行该行时

String orderXML = service.path("rest").path("coffee").header("user", "customer-123").accept(MediaType.APPLICATION_XML_TYPE).get(String.class);

这一行调用REST服务,该服务将与我的SQLite数据库交互,然后返回一些`XML。

我真的无法理解为什么它会在第二次尝试时停止!

对此的任何帮助都将非常感激!

谢谢!

Update 1:如果它有任何意义,我发现当程序挂起时,我不仅需要退出Eclipse并重新启动它,而且还需要重新启动服务器。否则,客户端程序将无法正常工作。

Update 2:我只定义了一个ClientResponse,用于程序中的所有点。

Update 3:我在每次请求后都使用ClientResponse.close()

NOTE: Code updated to reflect comment below

Controller:

 static ClientConfig config = new DefaultClientConfig();
 static Client client = Client.create(config);
 static WebResource service = client.resource(getBaseURI());
ClientResponse clientResp;

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {      
    processRequest(request,response);
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {      
    processRequest(request, response);
}

private void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        

    // Get All Coffee Orders
    clientResp = service.path("rest").path("coffee").header("user", "customer-123").type(MediaType.APPLICATION_FORM_URLENCODED_TYPE).get(ClientResponse.class);

    String orderXML = clientResp.getEntity(String.class);

    clientResp.close();         

    try {
        Document document = loadXMLFromString(orderXML);
        NodeList nodeList = document.getDocumentElement().getChildNodes();

        for (int i = 0; i < nodeList.getLength(); i++) {                      
            Node node = nodeList.item(i);
            if (node.getNodeType() == Node.ELEMENT_NODE) {                       
                Element elem = (Element) node;

                CoffeeOrder order = new CoffeeOrder();

                // Set ID
                String id = elem.getElementsByTagName("id").item(0).getChildNodes().item(0).getNodeValue();
                order.setId(id);

                // Get ALL Order Details
                getOrderDetails(id, order);

                // Get ALL Payment Details
                getPaymentDetails(id, order);                                                   


                // If order has not been cancelled, add to open orders
                if (!order.getOrderStatus().equals("cancelled")){
                    openOrders.add(order);
                    // If order has been cancelled, add to cancelled orders.
                } else {
                    cancelledOrders.add(order);
                }

            }
        }
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/index.jsp");
    dispatcher.forward(request, response);  
}


    // Get all Order Details
private void getOrderDetails(String id, CoffeeOrder order){

    // PROGRAM STOPS HERE ON SECOND RUN THROUGH 

    clientResp = service.path("rest").path("coffee").path(id).header("user", "customer-123").type(MediaType.APPLICATION_FORM_URLENCODED_TYPE).get(ClientResponse.class);

    orderXML = clientResp.getEntity(String.class);

    clientResp.close();

    // Do Things here with XML

    } catch (Exception e){
        e.printStackTrace();
    }

}

// Get all Payment Details
private void getPaymentDetails(String id, CoffeeOrder order){

    clientResp = service.path("rest").path("payment").path(id).header("user", "customer-123").type(MediaType.APPLICATION_FORM_URLENCODED_TYPE).get(ClientResponse.class);

    orderXML = clientResp.getEntity(String.class);

    clientResp.close();

    // Do Things here with XML


    } catch (Exception e){
        e.printStackTrace();
    }

}

1 个答案:

答案 0 :(得分:0)

我终于意识到问题是什么......

它与在服务器端打开的多个数据库连接有关!这导致了这个问题,一旦我处理了问题,问题就解决了。

感谢您的帮助!