camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Freeman Fang <freeman.f...@gmail.com>
Subject Re: Camel CXF component: SOAP 1.1 & 1.2 support
Date Mon, 17 Oct 2011 12:45:21 GMT
FYI, I create CAMEL-4553 to track it.

[1]https://issues.apache.org/jira/browse/CAMEL-4553
Freeman
On 2011-10-17, at 下午8:14, Freeman Fang wrote:

> Hi,
>
> Thanks for the confirmation, could you please create an jira for  
> this issue, I think we need address it for camel-cxf anyway.
>
> Freeman
> On 2011-10-17, at 下午8:07, Andrei Shakirin wrote:
>
>> Hi Freeman,
>>
>> Yep, interceptor fixes the problem!
>>
>> Regards,
>> Andrei.
>>
>> -----Original Message-----
>> From: Freeman Fang [mailto:freeman.fang@gmail.com]
>> Sent: 17 October 2011 13:28
>> To: users@camel.apache.org
>> Subject: Re: Camel CXF component: SOAP 1.1 & 1.2 support
>>
>> Hi,
>>
>> My gut feeling is that this issue is kinda of similar with the one  
>> I encountered with servicemix-cxf-bc JBI component(which means only  
>> determine soap version from the servicemodel but ignore the real  
>> incoming message), could you do a quick test here?
>> You can add an outInterceptor for your camel-cxf endpoint, the  
>> interceptor should be like
>>
>> import org.apache.cxf.binding.soap.SoapMessage;
>> import  
>> org.apache.cxf.binding.soap.interceptor.AbstractSoapInterceptor;
>> import org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor;
>> import org.apache.cxf.interceptor.Fault; import  
>> org.apache.cxf.phase.Phase;
>>
>> public class SetSoapVersionInterceptor extends  
>> AbstractSoapInterceptor {
>>
>>     public SetSoapVersionInterceptor() {
>>         super(Phase.WRITE);
>>         addBefore(SoapOutInterceptor.class.getName());
>>     }
>>     public void handleMessage(SoapMessage message) throws Fault {
>>         if (message.getExchange() != null) {
>>             if (message.getExchange().getInMessage() instanceof
>> SoapMessage) {
>>
>> ((SoapMessage
>> )message
>> ).setVersion
>> (((SoapMessage)message.getExchange().getInMessage()).getVersion());
>>             }
>>         }
>>     }
>>
>> }
>>
>> Tell me if this can fix it.
>>
>> Freeman
>>
>> On 2011-10-17, at 下午6:50, Andrei Shakirin wrote:
>>
>>> Hi,
>>>
>>> I have a small issue with Camel CXF component supporting both SOAP
>>> bindings: 1.1 and 1.2.
>>>
>>> If I take pure CXF service and specify:
>>>
>>> @ServiceMode(value = Service.Mode.MESSAGE) @BindingType(value =
>>> "http://www.w3.org/2003/05/soap/bindings/HTTP/")
>>>
>>> this CXF Service accepts both kind of requests: SOAP 1.1 & SOAP 1.2
>>> and expects appropriate responses: SOAP 1.1 response for SOAP 1.1
>>> request and SOAP 1.2 response for SOAP 1.1 request. It works as
>>> expected.
>>>
>>> If I take Camel CXF component and  specify the same annotations for
>>> the interface, I have the following behavior:
>>> all requests (1.1 & 1.2) is still accepted, but I can provide ONLY
>>> 1.2 responses and faults.
>>> If I try to set 1.1 response as answer for 1.1 request:
>>> exchange.getOut().setBody(response, StaxSource.class); the following
>>> exception is throwing:
>>>
>>> 11:46:27,411 | WARN  | qtp25691505-91   |
>>> PhaseInterceptorChain            | ache.cxf.comm
>>> on.logging.LogUtils  371 |  -  -  | Interceptor for
>>> {http://com.dpdhl/cig/facade/v1 }WSFaca
>>> de#{http://facade.cig.dpdhl.com/}invoke has thrown exception,
>>> unwinding now
>>> org.w3c.dom.DOMException: HIERARCHY_REQUEST_ERR: An attempt was made
>>> to insert a node wher e it is not permitted.
>>>       at
>>> com
>>> .sun
>>> .org
>>> .apache.xerces.internal.dom.CoreDocumentImpl.insertBefore(CoreDocume
>>> ntImpl.java:391)[:1.6.0_22]
>>>       at
>>> com
>>> .sun
>>> .org.apache.xerces.internal.dom.NodeImpl.appendChild(NodeImpl.java:
>>> 235)[
>>> :1.6.0_22]
>>>       at
>>> com
>>> .sun
>>> .xml.messaging.saaj.soap.SOAPPartImpl.appendChild(SOAPPartImpl.java:
>>> 502)
>>> [67:org.apache.servicemix.bundles.saaj-impl:1.3.2.2]
>>>       at
>>> org
>>> .apache
>>> .cxf.staxutils.W3CDOMStreamWriter.setChild(W3CDOMStreamWriter.java: 
>>> 11
>>> 4)[132:org.apache.cxf.bundle:2.4.2]
>>>
>>> Absolutely the same exception is thrown in pure CXF provider if I  
>>> send
>>> wrong version of response (for example 1.1 response for 1.2  
>>> request).
>>>
>>> Question: is there any possibility to say Camel CXF component that  
>>> it
>>> should accept SOAP 1.1 Response as answer to SOAP 1.1 Request?
>>> Sample code illustrating the problem can be provided if necessary.
>>>
>>> Regards,
>>> Andrei.
>>>
>>
>> ---------------------------------------------
>> Freeman Fang
>>
>> FuseSource
>> Email:ffang@fusesource.com
>> Web: fusesource.com
>> Twitter: freemanfang
>> Blog: http://freemanfang.blogspot.com
>>
>>
>>
>>
>>
>>
>>
>>
>>
>
> ---------------------------------------------
> Freeman Fang
>
> FuseSource
> Email:ffang@fusesource.com
> Web: fusesource.com
> Twitter: freemanfang
> Blog: http://freemanfang.blogspot.com
>
>
>
>
>
>
>
>
>

---------------------------------------------
Freeman Fang

FuseSource
Email:ffang@fusesource.com
Web: fusesource.com
Twitter: freemanfang
Blog: http://freemanfang.blogspot.com










Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message