Hi,

I am writing a router servlet. I use HttpClient to invoke a target
service in response for an end client's request. The following is my
code.
This code sometimes works, but sometimes fails. When it fails, the end
client cannot get the response back.

I have stumbed on this for a whole week. Could anyone give me some
clue what is wrong in my code? Thank you for any comments.

The following is the code.


// This method extracts SOAP request message from HttpServletRequest, and
// invokes the real end target service at epr using HttpClient.
// The return result (SOAP response) is then packaged into HttpServletResponse
// and returned to the end client.

public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
String epr = "some valid end service epr";

HttpClient client = new HttpClient();
PostMethod method = new PostMethod(epr);

log.debug("Prepare Request Headers: ");
Enumeration headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
        String name = (String) headerNames.nextElement();
        Enumeration values = request.getHeaders(name);
        while(values.hasMoreElements()) {
                String value = (String) values.nextElement();
                log.debug(name + ":" + value + "\n");
                method.addRequestHeader(name, value);
        }
}
                
// prepare parameters
log.debug("Prepare Request Parameters: ");
Enumeration params = request.getParameterNames();
while(params.hasMoreElements()) {
        String name = (String) params.nextElement();
        String[] values = request.getParameterValues(name);
        
        for(int i = 0; i < values.length; i++) {
                method.addParameter(name, values[i]);   
        }                       
}

// prepare attributes
log.debug("Prepare Request Attributes: ");
Enumeration attrs = request.getAttributeNames();
while(attrs.hasMoreElements()) {
        String name = (String) attrs.nextElement();
        Object value = request.getAttribute(name);
        log.debug(name + ":" + value);
}

// prepare inner request body

try {
        InputStream is = request.getInputStream();
        method.setRequestEntity(new InputStreamRequestEntity(is));
        
        log.debug("ExecuteMethod...");
        int status = client.executeMethod(method);
                                
        is.close();
        
        log.debug("Response Headers after executeMethod...");
                                
        // prepare response header
                                
        Header[] headers = method.getResponseHeaders();                 
        int headerSize = headers.length;
        for (int i = 0; i < headerSize; i++) {
                log.debug(headers[i].getName() + ":-" + headers[i].getValue());
                response.addHeader(headers[i].getName(), headers[i].getValue());
        }
        
        String resCharSet = method.getResponseCharSet();
        log.debug("response char set: " + resCharSet);
        
        long resContentLength = method.getResponseContentLength();
        log.debug("response length: " + resContentLength);
        
        log.debug("Response footers");
        Header[] footers = method.getResponseFooters();
        int footerSize = footers.length;
        for (int i = 0; i < footerSize; i++) {
                log.debug(footers[i].getName() + ":-" + footers[i].getValue());
                response.setHeader(footers[i].getName(), footers[i].getValue());
        }
                                
        InputStream bodyStream = method.getResponseBodyAsStream();
        ServletOutputStream sos = response.getOutputStream();
        int buf;
        while((buf = bodyStream.read()) != -1) {
                sos.write(buf);
        }                       
        sos.flush();
        sos.close();
        bodyStream.close();
        
} finally {
        method.releaseConnection();
}


Regards,

Xinjun

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to