client program doesn't get exception for a http 500 staus response

sg liu <[email protected]>
Newsgroups gmane.text.xml.axis.user
Message-ID <CACyz5HES+_rNeG_Ag=PaGjx7inNV8o+v44robRcBZdjzjdFsVQ@mail.gmail.com>
I'm working with axis2 1.5.1, and try to use it as webservice client.
when I try to invoke a oneway webservice operation, I found if the server
return http 500, I didn't got any exception in client side.
but for other status code, like, http 404, I can get an exception.
I made some study on axis2 source code.
and found the logic in following method,
org.apache.axis2.transport.http.HTTPSender.handleResponse(MessageContext,
HttpMethodBase):

for  HttpStatus.SC_INTERNAL_SERVER_ERROR || HttpStatus.SC_BAD_REQUE
if the operation is 2 way operation, set ProcessingFault to true for income
message.
but for one way operation, there is no special action, except just try to
process the response.
since 1 way operation doesn't expected a response soap message, the
response seems was discarded.
I want to know is there any special consideration for such behavior?
should't a exception be thrown out when response status code is 500 and
operation is of  one way?
I inline the method I mentioned for convenient review.
in addition, I checked source of axis2 1.6, and found the behavior is as
the same.



     * Used to handle the HTTP Response
     *
     * @param msgContext - The MessageContext of the message
     * @param method     - The HTTP method used
     * @throws IOException - Thrown in case an exception occurs
     */
    private void handleResponse(MessageContext msgContext,
                                HttpMethodBase method) throws IOException {
        int statusCode = method.getStatusCode();
        log.trace("Handling response - " + statusCode);
        if (statusCode == HttpStatus.SC_OK) {
            processResponse(method, msgContext);
        } else if (statusCode == HttpStatus.SC_ACCEPTED) {
        } else if (statusCode == HttpStatus.SC_INTERNAL_SERVER_ERROR ||
                statusCode == HttpStatus.SC_BAD_REQUEST) {
            Header contenttypeHeader =

method.getResponseHeader(HTTPConstants.HEADER_CONTENT_TYPE);
            String value = null;
            if (contenttypeHeader != null) {
                value = contenttypeHeader.getValue();
            }
             OperationContext opContext = msgContext.getOperationContext();
            if(opContext!=null){
                MessageContext inMessageContext =

opContext.getMessageContext(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
                if(inMessageContext!=null){
                    inMessageContext.setProcessingFault(true);
                }
            }
            if (value != null) {

                processResponse(method, msgContext);
            }
            //should't a exception be thrown out here in a else branch like
            //else{
                    // throw new
AxisFault(Messages.getMessage("transportError", String.valueOf(statusCode),
 method.getStatusText()));
            //}



            Object isTransportNonBlocking = msgContext.getProperty(
                    MessageContext.TRANSPORT_NON_BLOCKING);
            if (isTransportNonBlocking != null &&
(Boolean)isTransportNonBlocking) {
                throw new AxisFault(Messages.getMessage("transportError",
                        String.valueOf(statusCode),
                        method.getStatusText()));
            }
        } else {
            throw new AxisFault(Messages.getMessage("transportError",

String.valueOf(statusCode),

method.getStatusText()));
        }
    }
thanks
ysliu
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.