Yeah, you're right. I don't see *MUST* in my reference either. They *must* /pun 
intended/ have dropped the language for SOAP 1.2. A little vague, with this 
table, though the table implicitly states that it *MUST* be 400 or 500 since 
there is no other code that and it is a complete table.

I said *MUST* because SOAP 1.1 explicitly states it [1]:


"In case of a SOAP error while processing the request, the SOAP HTTP server 
MUST issue an HTTP 500 "Internal Server Error" response and include a SOAP 
message in the response containing a SOAP Fault element (see section 4.4) 
indicating the SOAP processing error."


George

[1] http://www.w3.org/TR/2000/NOTE-SOAP-20000508/#_Toc478383529

-----Original Message-----
From: André Warnier [mailto:a...@ice-sa.com] 
Sent: Monday, June 29, 2015 8:56 AM
To: Tomcat Users List
Subject: Re: [OT] Re: Filter behaviour

George Stanchev wrote:
> For SOAP, you *MUST* send back 500 or 400 with your SOAP fault back.
> 
> [1] http://www.w3.org/TR/soap12-part2/#tabresstatereccodes

Not to start a fight on SOAP on this Tomcat forum, but in the wording of the 
section referenced above, I definitely do not see that you *MUST* send a 5xx or 
4xx Status Code back.
One should start reading a bit earlier, at "7.5.2.2 Receiving".
The gist seems to be : send a 2xx code back, along with a SOAP envelope 
containing the SOAP fault, or if you cannot, then use one of the HTTP error 
codes below.
But sending /only/ a HTTP error code is, in my view, confusing for the client, 
because it would not be able to distinguish between a HTTP transport error, and 
a service-level error.

> 
> -----Original Message-----
> From: Leo Donahue [mailto:donahu...@gmail.com] 
> Sent: Saturday, June 27, 2015 11:45 PM
> To: Tomcat Users List
> Subject: [OT] Re: Filter behaviour
> 
> On Sat, Jun 27, 2015 at 8:37 AM, Konstantin Kolinko <knst.koli...@gmail.com>
> wrote:
> 
>>>     public void doFilter(ServletRequest request, ServletResponse
>> response,
>>> FilterChain chain) throws IOException, ServletException
>>>     {
>>>         boolean iAmNotAuthorized = true;
>>>
>>>         if (iAmNotAuthorized)
>>>         {
>>>             // generate the HTTP Servlet Response for a 403 status code
>>>             HttpServletResponse httpResponse = (HttpServletResponse) 
>>> response;
>>>             //httpResponse.sendError(HttpServletResponse.SC_FORBIDDEN);
>>>             httpResponse.setStatus(HttpServletResponse.SC_FORBIDDEN);
>>>             httpResponse.setHeader("WWW-Authenticate", "Basic");
>> "WWW-Authenticate" header is usually used with 401 response.
>>
>> It is unusual to use it with 403 one, though the spec does not forbid 
>> it. (I am not sure how browsers react here, though)
>>
>> http://tools.ietf.org/html/rfc7235#section-4.1
>>
>>
>> Best regards,
>> Konstantin Kolinko
>>
>>
> http://tools.ietf.org/html/rfc7231#section-6.5.3
> 
> And we "may" send a 404 to hide the existence of a forbidden target.  It's 
> misleading.  That seems to open the door for any kind of response, or no 
> response.
> 
> I am on the fence about sending 401 or 403 responses from a web service.
> They both indicate "something is there, you just can't get to it".
> 
> The 401 alludes that something is wrong with your username/password.
> 
> The 403 is more vague.  You "may" have the right username and password (and 
> I'm not going to bother to tell you), but your account "may" not have the 
> correct role associated with using this service, so rather than say anymore, 
> I'll just let you know you are forbidden.  Users have no idea, other than 
> there is something good at the end of this request for me to be forbidden.
> 
> From the perspective of troubleshooting customer requests to your published 
> web service, developers can log the unsuccessful attempt (Authentication or
> Authorization) and review the log files for answers to trouble shooting, but 
> sending back a status code doesn't seem to always make sense depending on 
> what types of application clients your customers are using.
> 
> For example:
> 
> Suppose you call a SOAP web service that takes an object as a parameter and 
> that service returns another type of object.  When customers expect an 
> object, they may get a HTTP status code of 401 or 403 if they botched sending 
> the correct username/password in the authentication header.  And maybe, their 
> password is merely expired.  In situations like those, it seems more 
> reasonable to send back a Soap Fault of some kind as defined in the schema.  
> The message could be as simple as: Authorization failed.
> 
> It seems easier for clients to know that a soap web service may throw a 
> ClientAuthorizationException for example, rather than parse out a HTTP status 
> code response?
> 
> I don't know though.
> 
> Leo
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: users-h...@tomcat.apache.org
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to