[ 
https://issues.apache.org/jira/browse/CAMEL-4279?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13256621#comment-13256621
 ] 

Babak Vahdat commented on CAMEL-4279:
-------------------------------------

Following a feedback of mine regarding the provided patch for CAMEL-4998 which 
went live together with the patch provided by this ticket:

- There's *now* a regression failure by 
ProducerRemoteRouteTimeOutTest.callStockQuoteWebserviceJDKWith5000MillSecondsTimeout()
 which
doesn't pass anymore. On CI-Server of course we don't see this as we've got 
@Ignore annotation on those tests. Reason of the failure is that now we do no 
more rely on instanceof but reference-equality by 
HttpUrlConnectionMessageSender.class, so following is what's going on: If you 
run the tests inside your IDE or directly through maven then as the test 
callStockQuoteWebserviceJDKWith3MillSecondsTimeout gets invoked beforehand it 
sets an instance of AbstractHttpWebServiceMessageSenderDecorator as 
WebServiceMessageSender with the timeout of 3 milliseconds. Later on it's 
callStockQuoteWebserviceJDKWith5000MillSecondsTimeout turn to be run and as 
*none* of the conditions below holds the 
AbstractHttpWebServiceMessageSenderDecorator from previous test still remains 
inside WebServiceTemplate as the single WebServiceMessageSender:

{code}
if (messageSender instanceof CommonsHttpMessageSender)
{code}

{code}
 else if (messageSender.getClass().equals(HttpUrlConnectionMessageSender.class))
{code}

So actually we asked for a timeout of 5 seconds but in fact there was a 3 
milliseconds timeout getting into the account. Which causes the test failure. 
Another proof of this explanation is (in case you don't want to debug into the 
code) if you only run the test 
callStockQuoteWebserviceJDKWith5000MillSecondsTimeout *alone* then it will pass!

- Resetting the timeout back to 0 is currently missing if we *once* set the 
timeout to a value > 0 then the timeout is spiked to that value *forever*. 
Consider the following trivial case where we use *the same* WebServiceTemplate 
for 2 different webservice calls inside a route:

{code}
from(...)
  ...
   ...
    
to("spring-ws:http://xyz?timeout=3000&webServiceTemplate=#myWebServiceTemplate";)
     ...
      ...
       to("spring-ws:http://abc?webServiceTemplate=#myWebServiceTemplate";)
  ...
{code}

With the current logic in place the second call to "http://abc"; get's also 
invoked with a read timeout of 3 seconds as well which is completely wrong! The 
reason for this is similar to the previous point I did already mention above, 
however the difference here is that now in contrast to the regression case 
above where the second call asked to 5000 milliseconds here we do *not* ask for 
a timeout at all, but still we get one, in this case 3 seconds!

Also currently we don't own a test case for this where we use the same 
WebServiceTemplate object once with and once without an explicit timeout. To 
remedy this behaviour the logic should set the timeout *explicitly* to 0 if no 
timeout option has been given. That's the logic should *clear out* any possibly 
set timeout value *done previously*.

Some tiny cosmetic points:

- SSLContextParametersLocalRouteTest-context.xml runs a sun-jdk specific 
HttpsServer:

{code}
sun.net.httpserver.HttpsServerImpl
{code}

This class could be missing on other JDKs (like IBM one) and it's behaviour 
*will be dependent* on the JDK *build number*. We should better never & ever 
use sun.* packages and for example use jetty (the same version as used in camel 
trunk itself):

http://www.oracle.com/technetwork/java/faq-sun-packages-142232.html
 
- In contrast to AbstractHttpWebServiceMessageSender which is *really abstract* 
the class AbstractHttpWebServiceMessageSenderDecorator is not abstract at all, 
so better remove the Abstract prefix by it's name to avoid any missunderstanding

- In the method SpringWebserviceProducer.prepareMessageSenders() we have got 
both the "instanceof" as well as "reference equality" usage (java.lang.Class 
doesn't override java.lang.Object.equals() method):

{code}
if (messageSender instanceof CommonsHttpMessageSender) {
{code}

{code}
} else if 
(messageSender.getClass().equals(HttpUrlConnectionMessageSender.class)) {
{code}

But my understanding was that the new logic will avoid any "instanceof" usage 
as we don't want to get sub-classes that might have been otherwise injected. 
But this could be the case for CommonsHttpMessageSender as well! Do I miss 
something here?

I hope you could follow my poor english!

                
> Add support for the new TLS for spring-ws if possible
> -----------------------------------------------------
>
>                 Key: CAMEL-4279
>                 URL: https://issues.apache.org/jira/browse/CAMEL-4279
>             Project: Camel
>          Issue Type: Improvement
>          Components: camel-spring-ws
>    Affects Versions: 2.8.0
>            Reporter: Claus Ibsen
>            Assignee: David Valeri
>              Labels: security
>             Fix For: 2.10.0
>
>
> David do you mind checking if its possible to add support for the new TLS you 
> did, for spring-ws component as well?
> See nabble
> http://camel.465427.n5.nabble.com/need-some-advice-on-cxf-or-spring-ws-tp4643001p4643001.html

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to