Date: Thu, 6 Aug 2015 17:09:07 +0800 Subject: client program doesn't get exception for a http 500 staus response From: [email protected] To: [email protected] 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_REQUEif 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? MG>One way-operation in the west means as you soon as request arrives at destination you never return MG>Is One-way-operation classified differently in the East? 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())); } }thanksysliu
