Changeset 1614


Ignore:
Timestamp:
07/15/14 13:45:31 (10 years ago)
Author:
pharms
Message:
  • bugfix and test for correct query handling
Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/autoquest-httpmonitor-test/src/test/java/de/ugoe/cs/autoquest/httpmonitor/AbstractTC.java

    r1567 r1614  
    1818import static org.junit.Assert.assertNotNull; 
    1919import static org.junit.Assert.assertTrue; 
     20import static org.junit.Assert.fail; 
    2021 
    2122import java.io.BufferedReader; 
     
    188189     * 
    189190     */ 
    190     protected String sendDummyMessage(String type, String message, String respMsg) 
     191    protected String sendDummyMessage(String type, String query, String message, String respMsg) 
    191192        throws Exception 
    192193    { 
     
    197198        HttpRequestBase httpRequest = null; 
    198199         
     200        String uri = "http://localhost:" + PROXY_PORT + "/dummyServlet"; 
     201         
     202        if (query != null) { 
     203            uri += "?" + query; 
     204        } 
     205         
    199206        if ("POST".equals(type)) { 
    200             httpRequest = new HttpPost("http://localhost:" + PROXY_PORT + "/dummyServlet"); 
     207            httpRequest = new HttpPost(uri); 
    201208            HttpEntity entity = new StringEntity(message, ContentType.TEXT_PLAIN); 
    202209            ((HttpPost) httpRequest).setEntity(entity); 
    203210        } 
    204211        else if ("GET".equals(type)) { 
    205             httpRequest = new HttpGet("http://localhost:" + PROXY_PORT + "/dummyServlet"); 
     212            httpRequest = new HttpGet(uri); 
    206213        } 
    207214         
     
    210217             
    211218            assertEquals(message, dummyServlet.getRequest()); 
     219            assertEquals(query, dummyServlet.getQuery()); 
    212220            System.err.println(response.getStatusLine()); 
    213221            String responseStr = readStreamContentToString(response.getEntity().getContent()); 
     
    223231     * 
    224232     */ 
    225     protected void assertEvent(Event event, String method, String message, String response) { 
     233    protected void assertEvent(Event  event, 
     234                               String method, 
     235                               String query, 
     236                               String message, 
     237                               String response) 
     238    { 
    226239        assertNotNull(event); 
    227240        assertNotNull(event.getType()); 
     
    231244        assertTrue(event.getTarget() instanceof HTTPTarget); 
    232245         
    233         HttpExchange exchange = ((HTTPEventType) event.getType()).getExchange(); 
    234          
     246        assertExchange(((HTTPEventType) event.getType()).getExchange(), 
     247                       method, query, message, response); 
     248    } 
     249     
     250    /** 
     251     * 
     252     */ 
     253    protected void assertExchange(HttpExchange exchange, 
     254                                  String       method, 
     255                                  String       query, 
     256                                  String       message, 
     257                                  String       response) 
     258    { 
    235259        assertEquals(Method.fromValue(method), exchange.getRequest().getMethod()); 
     260         
     261        if (query != null) { 
     262            assertEquals(query, exchange.getRequest().getQuery()); 
     263        } 
     264        else if (exchange.getRequest().getQuery() != null) { 
     265            System.err.println(exchange.getRequest().getQuery()); 
     266            fail("unexpected query"); 
     267        } 
    236268         
    237269        if (message != null) { 
  • trunk/autoquest-httpmonitor-test/src/test/java/de/ugoe/cs/autoquest/httpmonitor/DummyServlet.java

    r1567 r1614  
    3131     
    3232    /** */ 
     33    private String query; 
     34     
     35    /** */ 
    3336    private String requestMessage; 
    3437     
     
    4346        throws ServletException, IOException 
    4447    { 
     48        query = request.getQueryString(); 
    4549        requestMessage = AbstractTC.readStreamContentToString(request.getInputStream()); 
    4650         
     
    5660        throws ServletException, IOException 
    5761    { 
     62        query = request.getQueryString(); 
    5863        requestMessage = AbstractTC.readStreamContentToString(request.getInputStream()); 
    5964         
     
    6974        throws ServletException, IOException 
    7075    { 
     76        query = request.getQueryString(); 
    7177        requestMessage = AbstractTC.readStreamContentToString(request.getInputStream()); 
    7278         
     
    8894        return this.requestMessage; 
    8995    } 
     96 
     97    /** 
     98     *  
     99     */ 
     100    String getQuery() { 
     101        return this.query; 
     102    } 
    90103} 
  • trunk/autoquest-httpmonitor-test/src/test/java/de/ugoe/cs/autoquest/httpmonitor/HttpMonitorTest.java

    r1561 r1614  
    9898    } 
    9999     
     100    /** 
     101     * 
     102     */ 
    100103    @Test 
    101104    public void test_SimulatedSession_MonitorOnly() throws Exception { 
     
    158161        System.out.println("\n\n"); 
    159162    } 
    160  
     163     
     164    /** 
     165     * 
     166     */ 
    161167    @Test 
    162168    public void test_SimpleText_ProxyAndMonitor() throws Exception { 
     
    175181        String message = "dummy message"; 
    176182        String expectedResponse = "response content"; 
    177         String response = sendDummyMessage("POST", message, expectedResponse); 
     183        String response = sendDummyMessage("POST", null, message, expectedResponse); 
    178184         
    179185        assertEquals(expectedResponse, response); 
     
    207213        assertEquals(1, sequence.size()); 
    208214 
    209         assertEvent(sequence.get(0), "POST", message, response); 
    210     } 
    211  
     215        assertEvent(sequence.get(0), "POST", null, message, response); 
     216    } 
     217     
     218    /** 
     219     * 
     220     */ 
    212221    @Test 
    213222    public void test_XMLMessage_ProxyAndMonitor() throws Exception { 
     
    259268            "</httpEvent>"; 
    260269 
    261         String response = sendDummyMessage("POST", message, expectedResponse); 
     270        String response = sendDummyMessage("POST", null, message, expectedResponse); 
    262271         
    263272        assertEquals(expectedResponse, response); 
     
    291300        assertEquals(1, sequence.size()); 
    292301 
    293         assertEvent(sequence.get(0), "POST", message, response); 
    294     } 
    295  
     302        assertEvent(sequence.get(0), "POST", null, message, response); 
     303    } 
     304     
     305    /** 
     306     * 
     307     */ 
    296308    @Test 
    297309    public void test_SOAP_ProxyAndMonitor() throws Exception { 
     
    348360        assertEquals(2, sequence.size()); 
    349361 
    350         assertEvent(sequence.get(0), "GET", null, null); // get WSDL 
    351         assertEvent(sequence.get(1), "POST", null, null); // send request 
    352     } 
    353      
     362        assertEvent(sequence.get(0), "GET", "wsdl", null, null); // get WSDL 
     363        assertEvent(sequence.get(1), "POST", null, null, null); // send request 
     364    } 
     365     
     366    /** 
     367     * 
     368     */ 
     369    @Test 
     370    public void test_LargeRequest_ProxyAndMonitor() throws Exception { 
     371        monitor = new HttpMonitor(new String[] { LOG_FILE_DIR, MONITOR_PORT + "" }); 
     372 
     373        monitor.init(); 
     374        monitor.start(); 
     375 
     376        proxy = new HttpMonitoringProxy 
     377            (new String[] { LOG_FILE_DIR, PROXY_PORT + "", 
     378                            "localhost:" + DUMMY_SERVER_PORT, "localhost:" + MONITOR_PORT }); 
     379 
     380        proxy.init(); 
     381        proxy.start(); 
     382         
     383        StringBuffer message = new StringBuffer(); 
     384        StringBuffer expectedResponse = new StringBuffer(); 
     385         
     386        for (int i = 0; i < 1000; i++) { 
     387            message.append(" # " + i + " test request data"); 
     388            expectedResponse.append(" # " + i + " test response data"); 
     389        } 
     390         
     391        String response = 
     392            sendDummyMessage("POST", null, message.toString(), expectedResponse.toString()); 
     393         
     394        assertEquals(expectedResponse.toString(), response); 
     395         
     396        // the monitor needs some time to receive the exchange --> give it 
     397        Thread.sleep(1000); 
     398         
     399        monitor.stop(); 
     400        monitor = null; 
     401 
     402        File logFile = new File(LOG_FILE_DIR + File.separator + "httpmonitor_000.log"); 
     403         
     404        assertTrue(logFile.exists()); 
     405         
     406        HTTPLogParser parser = new HTTPLogParser(); 
     407 
     408        parser.parseFile(logFile); 
     409 
     410        // check the sequences 
     411        Collection<List<Event>> sequences = parser.getSequences(); 
     412 
     413        assertNotNull(sequences); 
     414 
     415        Iterator<List<Event>> iterator = sequences.iterator(); 
     416        assertTrue(iterator.hasNext()); 
     417 
     418        List<Event> sequence = iterator.next(); 
     419        assertFalse(iterator.hasNext()); 
     420 
     421        assertNotNull(sequence); 
     422        assertEquals(1, sequence.size()); 
     423 
     424        assertEvent(sequence.get(0), "POST", null, message.toString(), response); 
     425    } 
     426     
     427    /** 
     428     * 
     429     */ 
     430    @Test 
     431    public void test_Query_ProxyAndMonitor() throws Exception { 
     432        monitor = new HttpMonitor(new String[] { LOG_FILE_DIR, MONITOR_PORT + "" }); 
     433 
     434        monitor.init(); 
     435        monitor.start(); 
     436 
     437        proxy = new HttpMonitoringProxy 
     438            (new String[] { LOG_FILE_DIR, PROXY_PORT + "", 
     439                            "localhost:" + DUMMY_SERVER_PORT, "localhost:" + MONITOR_PORT }); 
     440 
     441        proxy.init(); 
     442        proxy.start(); 
     443         
     444        String message = "dummy message"; 
     445        String query = "key=value&key2=value2&key3=%3E%3CXXX"; 
     446        String expectedResponse = "response content"; 
     447        String response = sendDummyMessage("POST", query, message, expectedResponse); 
     448         
     449        assertEquals(expectedResponse, response); 
     450         
     451        // the monitor needs some time to receive the exchange --> give it 
     452        Thread.sleep(1000); 
     453         
     454        monitor.stop(); 
     455        monitor = null; 
     456 
     457        File logFile = new File(LOG_FILE_DIR + File.separator + "httpmonitor_000.log"); 
     458         
     459        assertTrue(logFile.exists()); 
     460         
     461        HTTPLogParser parser = new HTTPLogParser(); 
     462 
     463        parser.parseFile(logFile); 
     464 
     465        // check the sequences 
     466        Collection<List<Event>> sequences = parser.getSequences(); 
     467 
     468        assertNotNull(sequences); 
     469 
     470        Iterator<List<Event>> iterator = sequences.iterator(); 
     471        assertTrue(iterator.hasNext()); 
     472 
     473        List<Event> sequence = iterator.next(); 
     474        assertFalse(iterator.hasNext()); 
     475 
     476        assertNotNull(sequence); 
     477        assertEquals(1, sequence.size()); 
     478 
     479        assertEvent(sequence.get(0), "POST", query, message, response); 
     480    } 
     481 
    354482    /** 
    355483     * 
  • trunk/autoquest-httpmonitor-test/src/test/java/de/ugoe/cs/autoquest/httpmonitor/HttpMonitoringProxyTest.java

    r1563 r1614  
    4848import de.ugoe.cs.autoquest.plugin.http.HTTPLogParser; 
    4949import de.ugoe.cs.autoquest.plugin.http.logdata.HttpExchange; 
    50 import de.ugoe.cs.autoquest.plugin.http.logdata.Method; 
    5150import dummyservice.DummyService; 
    5251import dummyservice.DummyServicePortType; 
     
    111110    } 
    112111     
     112    /** 
     113     * 
     114     */ 
    113115    @Test(expected=java.lang.IllegalArgumentException.class) 
    114116    public void test_InvalidInitialization_01() throws Exception { 
     
    116118    } 
    117119     
     120    /** 
     121     * 
     122     */ 
    118123    @Test 
    119124    public void test_SimpleText_Local() throws Exception { 
     
    127132        String message = "dummy message"; 
    128133        String expectedResponse = "response content"; 
    129         String response = sendDummyMessage("POST", message, expectedResponse); 
     134        String response = sendDummyMessage("POST", null, message, expectedResponse); 
    130135         
    131136        assertEquals(expectedResponse, response); 
     
    156161        assertEquals(1, sequence.size()); 
    157162 
    158         assertEvent(sequence.get(0), "POST", message, expectedResponse); 
    159     } 
    160  
     163        assertEvent(sequence.get(0), "POST", null, message, expectedResponse); 
     164    } 
     165     
     166    /** 
     167     * 
     168     */ 
    161169    @Test 
    162170    public void test_SimpleText_Remote() throws Exception { 
     
    170178        String message = "dummy message"; 
    171179        String expectedResponse = "response content"; 
    172         String response = sendDummyMessage("POST", message, expectedResponse); 
     180        String response = sendDummyMessage("POST", null, message, expectedResponse); 
    173181         
    174182        assertEquals(expectedResponse, response); 
     
    176184        // give the proxy some time to send the copy of the message 
    177185        while(messages.size() < 1) { 
     186            System.out.println("waiting for message to be send by the proxy"); 
    178187            Thread.sleep(1000); 
    179188        } 
     
    188197            (JAXBElement<HttpExchange>) unmarshaller.unmarshal(new StringReader(messages.get(0))); 
    189198         
    190         HttpExchange exchange = jaxObject.getValue(); 
    191          
    192         assertEquals(message, exchange.getRequest().getContent().getData()); 
    193         assertEquals(response, exchange.getResponse().getContent().getData()); 
    194     } 
    195      
     199        assertExchange(jaxObject.getValue(), "POST", null, message, expectedResponse); 
     200    } 
     201     
     202    /** 
     203     * 
     204     */ 
    196205    @Test 
    197206    public void test_XMLMessage_Local() throws Exception { 
     
    238247            "</httpEvent>"; 
    239248 
    240         String response = sendDummyMessage("POST", message, expectedResponse); 
     249        String response = sendDummyMessage("POST", null, message, expectedResponse); 
    241250         
    242251        assertEquals(expectedResponse, response); 
     
    267276        assertEquals(1, sequence.size()); 
    268277 
    269         assertEvent(sequence.get(0), "POST", message, expectedResponse); 
    270     } 
    271      
     278        assertEvent(sequence.get(0), "POST", null, message, expectedResponse); 
     279    } 
     280     
     281    /** 
     282     * 
     283     */ 
    272284    @Test 
    273285    public void test_XMLMessage_Remote() throws Exception { 
     
    314326            "</httpEvent>"; 
    315327 
    316         String response = sendDummyMessage("POST", message, expectedResponse); 
     328        String response = sendDummyMessage("POST", null, message, expectedResponse); 
    317329         
    318330        assertEquals(expectedResponse, response); 
     
    320332        // give the proxy some time to send the copy of the message 
    321333        while(messages.size() < 1) { 
     334            System.out.println("waiting for message to be send by the proxy"); 
    322335            Thread.sleep(1000); 
    323336        } 
     
    332345            (JAXBElement<HttpExchange>) unmarshaller.unmarshal(new StringReader(messages.get(0))); 
    333346         
    334         HttpExchange exchange = jaxObject.getValue(); 
    335          
    336         assertEquals(message, exchange.getRequest().getContent().getData()); 
    337         assertEquals(response, exchange.getResponse().getContent().getData()); 
    338     } 
    339      
     347        assertExchange(jaxObject.getValue(), "POST", null, message, expectedResponse); 
     348    } 
     349     
     350    /** 
     351     * 
     352     */ 
    340353    @Test 
    341354    public void test_SOAP_Local() throws Exception { 
     
    384397        assertEquals(2, sequence.size()); 
    385398 
    386         assertEvent(sequence.get(0), "GET", null, null); // get WSDL 
    387         assertEvent(sequence.get(1), "POST", null, null); // send request 
    388     } 
    389      
     399        assertEvent(sequence.get(0), "GET", "wsdl", null, null); // get WSDL 
     400        assertEvent(sequence.get(1), "POST", null, null, null); // send request 
     401    } 
     402     
     403    /** 
     404     * 
     405     */ 
    390406    @SuppressWarnings("unchecked") 
    391407    @Test 
     
    415431        // give the proxy some time to send the copy of the message 
    416432        while(messages.size() < 1) { 
     433            System.out.println("waiting for message to be send by the proxy"); 
    417434            Thread.sleep(1000); 
    418435        } 
     
    426443            (JAXBElement<HttpExchange>) unmarshaller.unmarshal(new StringReader(messages.get(0))); 
    427444         
    428         HttpExchange exchange = jaxObject.getValue(); 
    429          
    430         assertEquals(Method.GET, exchange.getRequest().getMethod()); 
    431  
    432         assertNull(exchange.getRequest().getContent()); 
    433         assertNotNull(exchange.getResponse().getContent().getData()); 
     445        assertExchange(jaxObject.getValue(), "GET", "wsdl", null, null); 
    434446 
    435447        jaxObject = 
    436448            (JAXBElement<HttpExchange>) unmarshaller.unmarshal(new StringReader(messages.get(1))); 
    437449             
    438         exchange = jaxObject.getValue(); 
    439              
    440         assertEquals(Method.POST, exchange.getRequest().getMethod()); 
    441  
    442         assertNotNull(exchange.getRequest().getContent().getData()); 
    443         assertNotNull(exchange.getResponse().getContent().getData()); 
    444     } 
    445      
     450        assertExchange(jaxObject.getValue(), "POST", null, null, null); 
     451    } 
     452     
     453    /** 
     454     * 
     455     */ 
    446456    @Test 
    447457    public void test_LargeRequest_Local() throws Exception { 
     
    461471        } 
    462472         
    463         String response = sendDummyMessage("POST", message.toString(), expectedResponse.toString()); 
     473        String response = 
     474            sendDummyMessage("POST", null, message.toString(), expectedResponse.toString()); 
    464475         
    465476        assertEquals(expectedResponse.toString(), response); 
     
    490501        assertEquals(1, sequence.size()); 
    491502 
    492         assertEvent(sequence.get(0), "POST", message.toString(), expectedResponse.toString()); 
    493     } 
    494  
     503        assertEvent(sequence.get(0), "POST", null, message.toString(), expectedResponse.toString()); 
     504    } 
     505     
     506    /** 
     507     * 
     508     */ 
    495509    @Test 
    496510    public void test_LargeRequest_Remote() throws Exception { 
     
    511525        } 
    512526         
    513         String response = sendDummyMessage("POST", message.toString(), expectedResponse.toString()); 
     527        String response = 
     528            sendDummyMessage("POST", null, message.toString(), expectedResponse.toString()); 
    514529         
    515530        assertEquals(expectedResponse.toString(), response); 
     
    517532        // give the proxy some time to send the copy of the message 
    518533        while(messages.size() < 1) { 
     534            System.out.println("waiting for message to be send by the proxy"); 
    519535            Thread.sleep(1000); 
    520536        } 
     
    529545            (JAXBElement<HttpExchange>) unmarshaller.unmarshal(new StringReader(messages.get(0))); 
    530546         
    531         HttpExchange exchange = jaxObject.getValue(); 
    532          
    533         assertEquals(message.toString(), exchange.getRequest().getContent().getData()); 
    534         assertEquals(response.toString(), exchange.getResponse().getContent().getData()); 
     547        assertExchange(jaxObject.getValue(), "POST", null, 
     548                       message.toString(), expectedResponse.toString()); 
     549    } 
     550     
     551    /** 
     552     * 
     553     */ 
     554    @Test 
     555    public void test_Query_Local() throws Exception { 
     556        proxy = new HttpMonitoringProxy 
     557            (new String[] { LOG_FILE_DIR, PROXY_PORT + "", "localhost:" + DUMMY_SERVER_PORT, 
     558                            "local" }); 
     559 
     560        proxy.init(); 
     561        proxy.start(); 
     562         
     563        String message = "dummy message"; 
     564        String expectedResponse = "response content"; 
     565        String query = "key=value&key2=value2&key3=%3E%3CXXX"; 
     566        String response = sendDummyMessage("POST", query, message, expectedResponse); 
     567         
     568        assertEquals(expectedResponse, response); 
     569         
     570        proxy.stop(); 
     571        proxy = null; 
     572 
     573        File logFile = new File(LOG_FILE_DIR + File.separator + "httpmonitor_000.log"); 
     574         
     575        assertTrue(logFile.exists()); 
     576         
     577        HTTPLogParser parser = new HTTPLogParser(); 
     578 
     579        parser.parseFile(logFile); 
     580 
     581        // check the sequences 
     582        Collection<List<Event>> sequences = parser.getSequences(); 
     583 
     584        assertNotNull(sequences); 
     585 
     586        Iterator<List<Event>> iterator = sequences.iterator(); 
     587        assertTrue(iterator.hasNext()); 
     588 
     589        List<Event> sequence = iterator.next(); 
     590        assertFalse(iterator.hasNext()); 
     591 
     592        assertNotNull(sequence); 
     593        assertEquals(1, sequence.size()); 
     594 
     595        assertEvent(sequence.get(0), "POST", query, message, expectedResponse); 
     596    } 
     597     
     598    /** 
     599     * 
     600     */ 
     601    @Test 
     602    public void test_Query_Remote() throws Exception { 
     603        proxy = new HttpMonitoringProxy 
     604            (new String[] { LOG_FILE_DIR, PROXY_PORT + "", 
     605                            "localhost:" + DUMMY_SERVER_PORT, "localhost:" + MONITOR_PORT }); 
     606 
     607        proxy.init(); 
     608        proxy.start(); 
     609         
     610        String message = "dummy message"; 
     611        String expectedResponse = "response content"; 
     612        String query = "key=value&key2=value2&key3=%3E%3CXXX"; 
     613        String response = sendDummyMessage("POST", query, message, expectedResponse); 
     614         
     615        assertEquals(expectedResponse, response); 
     616         
     617        // give the proxy some time to send the copy of the message 
     618        while(messages.size() < 1) { 
     619            System.out.println("waiting for message to be send by the proxy"); 
     620            Thread.sleep(1000); 
     621        } 
     622         
     623        assertEquals(1, messages.size()); 
     624         
     625        JAXBContext jaxbContext = JAXBContext.newInstance(HttpExchange.class.getPackage().getName()); 
     626        Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); 
     627         
     628        @SuppressWarnings("unchecked") 
     629        JAXBElement<HttpExchange> jaxObject = 
     630            (JAXBElement<HttpExchange>) unmarshaller.unmarshal(new StringReader(messages.get(0))); 
     631         
     632        assertExchange(jaxObject.getValue(), "POST", query, message, expectedResponse); 
    535633    } 
    536634 
     
    553651             
    554652            resp.setStatus(HttpServletResponse.SC_OK); 
     653            System.out.println("send ok response"); 
    555654        } 
    556655         
  • trunk/autoquest-httpmonitor/src/main/java/de/ugoe/cs/autoquest/httpmonitor/proxy/HttpMonitorRemoteExchangeHandler.java

    r1561 r1614  
    142142     */ 
    143143    @Override 
    144     public void handleHttpExchange(HttpExchange httpExchange) { 
     144    public synchronized void handleHttpExchange(HttpExchange httpExchange) { 
    145145        // send the exchange to the server and wait for completion 
    146         synchronized (openRequests) { 
    147             Request httpMonitorRequest = httpClient.newRequest(httpMonitorServer, httpMonitorPort); 
    148             httpMonitorRequest.method(HttpMethod.POST); 
    149             httpMonitorRequest.version(HttpVersion.HTTP_1_1); 
    150  
    151             OutputStreamContentProvider out = new OutputStreamContentProvider(); 
    152             httpMonitorRequest.content(out); 
    153             httpMonitorRequest.send(this); 
    154  
    155             try { 
    156                 JAXBContext jaxbContext = 
    157                         JAXBContext.newInstance(HttpExchange.class.getPackage().getName()); 
    158                 Marshaller marshaller = jaxbContext.createMarshaller(); 
    159  
    160                 OutputStreamWriter writer = new OutputStreamWriter(out.getOutputStream(), "UTF-8"); 
    161                 marshaller.marshal(new ObjectFactory().createHttpExchange(httpExchange), writer); 
    162  
    163                 out.getOutputStream().close(); 
    164             } 
    165             catch (JAXBException e) { 
    166                 Console.printerrln("could not convert request and response to XML string: " + e); 
    167                 Console.logException(e); 
    168             } 
    169             catch (IOException e) { 
    170                 Console.printerrln 
     146        Request httpMonitorRequest = httpClient.newRequest(httpMonitorServer, httpMonitorPort); 
     147        httpMonitorRequest.method(HttpMethod.POST); 
     148        httpMonitorRequest.version(HttpVersion.HTTP_1_1); 
     149 
     150        OutputStreamContentProvider out = new OutputStreamContentProvider(); 
     151        httpMonitorRequest.content(out); 
     152         
     153        openRequests.add(httpMonitorRequest); 
     154        httpMonitorRequest.send(this); 
     155 
     156        try { 
     157            JAXBContext jaxbContext = 
     158                JAXBContext.newInstance(HttpExchange.class.getPackage().getName()); 
     159            Marshaller marshaller = jaxbContext.createMarshaller(); 
     160 
     161            OutputStreamWriter writer = new OutputStreamWriter(out.getOutputStream(), "UTF-8"); 
     162            marshaller.marshal(new ObjectFactory().createHttpExchange(httpExchange), writer); 
     163 
     164            out.getOutputStream().close(); 
     165        } 
     166        catch (JAXBException e) { 
     167            Console.printerrln("could not convert request and response to XML string: " + e); 
     168            Console.logException(e); 
     169        } 
     170        catch (IOException e) { 
     171            Console.printerrln 
    171172                ("could not close the stream for sending data to the HTML monitor: " + e); 
    172                 Console.logException(e); 
    173             } 
    174              
    175             openRequests.add(httpMonitorRequest); 
    176              
    177             try { 
    178                 // wait for the request to be removed fromt the list asynchronously 
    179                 while (openRequests.contains(httpMonitorRequest)) { 
    180                     openRequests.wait(); 
     173            Console.logException(e); 
     174        } 
     175 
     176        try { 
     177            // wait for the request to be removed from the list asynchronously 
     178            int count = 30; 
     179            while (openRequests.contains(httpMonitorRequest)) { 
     180                this.wait(1000); 
     181                 
     182                if (--count == 0) { 
     183                    // after 30 seconds, cancel the sending of the loggin request 
     184                    openRequests.remove(httpMonitorRequest); 
     185                    break; 
    181186                } 
    182187            } 
    183             catch (InterruptedException e) { 
    184                 // ignore, as this may only happen on system shutdown 
    185             } 
     188        } 
     189        catch (InterruptedException e) { 
     190            // ignore, as this may only happen on system shutdown 
    186191        } 
    187192    } 
     
    191196     */ 
    192197    @Override 
    193     public void onComplete(Result result) { 
     198    public synchronized void onComplete(Result result) { 
    194199        if (result.isFailed()) { 
    195200            Console.traceln 
     
    198203        } 
    199204         
    200         synchronized (openRequests) { 
    201             openRequests.remove(result.getRequest()); 
    202             openRequests.notify(); 
    203         } 
     205        openRequests.remove(result.getRequest()); 
     206        this.notify(); 
    204207    } 
    205208 
  • trunk/autoquest-httpmonitor/src/main/java/de/ugoe/cs/autoquest/httpmonitor/proxy/HttpMonitoringProxyServlet.java

    r1567 r1614  
    1919import java.net.URI; 
    2020import java.net.URISyntaxException; 
     21import java.net.URLDecoder; 
    2122import java.net.URLEncoder; 
    2223import java.nio.ByteBuffer; 
     
    99100    protected URI rewriteURI(HttpServletRequest request) { 
    100101        try { 
     102            String query = request.getQueryString(); 
     103             
     104            if (query != null) { 
     105                query = URLDecoder.decode(query, "UTF-8"); 
     106            } 
     107             
    101108            return new URI(request.getScheme(), null, proxiedServer, proxiedPort, 
    102                            request.getPathInfo(), request.getQueryString(), null); 
     109                           request.getPathInfo(), query, null); 
    103110        } 
    104111        catch (URISyntaxException e) { 
     112            Console.printerrln("could not rewrite URI: " + e); 
     113            Console.logException(e); 
     114            return null; 
     115        } 
     116        catch (UnsupportedEncodingException e) { 
    105117            Console.printerrln("could not rewrite URI: " + e); 
    106118            Console.logException(e); 
     
    365377                } 
    366378            } 
    367             return result.toString(); 
     379             
     380            if (result.length() <= 0) { 
     381                return null; 
     382            } 
     383            else { 
     384                return result.toString(); 
     385            } 
    368386        } 
    369387 
Note: See TracChangeset for help on using the changeset viewer.