Wojciech created CXF-7602:
-----------------------------

             Summary: HolderInInterceptor op.getOutput().getMessageParts() 
returns single Part with index = 1 causing Holder set within 
MessageContentsList (when It should not be)
                 Key: CXF-7602
                 URL: https://issues.apache.org/jira/browse/CXF-7602
             Project: CXF
          Issue Type: Bug
          Components: JAX-WS Runtime
    Affects Versions: 3.1.11
            Reporter: Wojciech
            Priority: Minor


I have walid wsdl containing following operations: 

<wsdl:message name="sendNotification">
    *<wsdl:part element="notifications:Notification" 
name="parameters"></wsdl:part>*
</wsdl:message>
<wsdl:message name="sendNotificationResponse">
    *<wsdl:part element="notifications:Notification" 
name="parameters"></wsdl:part>*
</wsdl:message>

First operation is input, second is output operation. 
>From some reason - output MessagePartInfo object from binding operation info 
>from exchange is being set with index = 1 (even if there is only one Part in 
>the out message) - this is causing creation of Holder in HolderInInterceptor. 

As a result of following test : 

MessageContentsList response = 
(MessageContentsList)producer.requestBody(to,TestApp.createNotification());

I will have response containing Notification object within MessageContentList - 
but not the fake response injected for test purposes, but rahter Notification 
which has been send by the producer (TestApp.createNotification()). Producer is 
from Apache Camel in here and 'to' is a CXF Endpoint working in POJO mode.

I have dealt with it by changing the type of resulting Notification (output 
message) to the Acknowledgment  by introducing another xsd schema next to 
Notification. Now when wsdl looks like this (not entire - just a part): 

<wsdl:message name="sendNotification">
    *<wsdl:part element="notifications:Notification" 
name="parameters"></wsdl:part>*
</wsdl:message>
<wsdl:message name="sendNotificationResponse">
    *<wsdl:part element="ack:Acknowledgement" name="parameters"></wsdl:part>*
</wsdl:message>

No holder is being created and everything works as expected. 
I am not aware of CXF internals, even do not know what purpose serves this 
Holder object but from my point of view above behaviour looks like a bug or is 
very non-intuitive. Also I think that if two different operations (in/out) with 
the same type of Part are not allowed - this should be somehow catched during 
wsdl2java validation, or even any kind of runtime exception should be thrown on 
runtime when processing messages. Current behaviour - which is - returning 
Notification object which has been sent to the endpoint doesn't look  correctly 
to me :) 

Of course I may be wrong as I'm quite new to CXF :) 



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to