Benjamin Gniza created CAMEL-5234:
-------------------------------------

             Summary: Spring-WS does neither set message body nor message 
headers if exchange is not outCapable
                 Key: CAMEL-5234
                 URL: https://issues.apache.org/jira/browse/CAMEL-5234
             Project: Camel
          Issue Type: Bug
          Components: camel-spring-ws
    Affects Versions: 2.9.2, 2.9.1, 2.9.0, 2.8.4, 2.8.3, 2.8.2, 2.8.1, 2.7.5, 
2.7.4, 2.8.0, 2.7.3
            Reporter: Benjamin Gniza


Spring-WS component does not behave as expected from pipes and filters pattern 
if exchange is not _outCapable_.
If _ExchangeHelper_._isOutCapable_ returns false for the given _exchange_ the 
IN-message is returned instead of the WS-Response.
Example:
{code:title=ExampleRoute}
        from("timer://foo?fixedRate=true&period=1000")//
                .setBody().simple("<ex:getExampleResponse 
xmlns:ex=\"http://example.com/\";>" //
                        + "       <id>1</id>" //
                        + "     </ex:getExampleResponse>")//
                .to("spring-ws:http://localhost:9000/Example";)//
                .to("file://responses");
{code}

In the example above I would expect the WS-response written to the files in the 
responses directory. Currently (since 2.7.3) the IN message is written to the 
files.
This is caused by _SpringWebserviceProducer#process_ because it only sets 
headers and body for the OUT-message if _isOutCapable_ is _true_.

Workaround (maybe this has side effects!):
{code:title=ExampleRoute}
                from("timer://foo?fixedRate=true&period=1000")//
                .setExchangePattern(ExchangePattern.InOut) // <-- Override with 
InOut Pattern
                .setBody().simple("<ex:getExampleResponse 
xmlns:ex=\"http://example.com/\";>" //
                        + "       <id>1</id>" //
                        + "     </ex:getExampleResponse>")//
                .to("spring-ws:http://localhost:9000/Example";)//
                .to("file://responses");
{code}

This behavior has been implemented to fix CAMEL-3974. From my point of view its 
counter intuitive since other processing-steps don't check the exchange's 
_outCapability_.
It took me several hours to find out why I always got the IN message back, 
although the webservice was called correctly and returned correct results.
Maybe an option should be provided to control this behavior. At least a 
log-message should be written to explain, that the webservice-reponse is thrown 
away.



--
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