Hi

Is there any other tricks or tips that can be tried? I would have thought
that other have done this before me, intercepting the message in their own
interceptors and read out both the soap header and soap body.


thanks,
Håkon
2009/10/27 Håkon Sagehaug <[email protected]>

> Hi
>
> I now have this in my xbean
>
> <cxfbc:inInterceptors>
>         <bean
>                 class="org.apache.cxf.interceptor.LoggingInInterceptor" />
>             <bean
>
> class="no.uib.bccs.esysbio.hakont.soap.interceptor.SoapHeaderInterceptor" />
>         </cxfbc:inInterceptors>
>
> as opposed to this before
>
> <cxfbc:inInterceptors>
>             <bean
>
> class="no.uib.bccs.esysbio.hakont.soap.interceptor.SoapHeaderInterceptor" />
>         </cxfbc:inInterceptors>
>
> But I get the same error message.  My costructor for the interceptor calls
> looks like this
>
>   public SoapHeaderInterceptor() {
>     super(Phase.READ);
>
>     }
>
> Do I add my interceptor in the wrong phase or?
>
>
> Håkon
>
> 2009/10/27 Freeman Fang <[email protected]>
>
>> Hi,
>>
>> I think you need an interceptor to save re-readable inputstream(just like
>> LoggingInInterceptor do)  at very early phase,  before create
>> XMLStreamReader(you can see this class is actually used to extract soap body
>> in getBodyElement()method) from the InputStream.
>>
>> So just add LoggingInInterceptor with your customer interceptor for
>> inInterceptors list and do a quick test.
>>
>> Freeman
>>
>> On 2009-10-27, at 下午5:10, Håkon Sagehaug wrote:
>>
>>  Hi,
>>>
>>> No luck still the same error. I think I tried this before also.  I'm
>>> using
>>> smx 3.3.1 and the logging interceptor is working fine for me, any other
>>> tips
>>> ;) ?
>>>
>>> Håkon
>>> 2009/10/27 Freeman Fang <[email protected]>
>>>
>>>  Hi,
>>>>
>>>> You need set re-readable inputstream before the the getBodyElement
>>>>
>>>>
>>>>
>>>> On 2009-10-27, at 下午4:38, Håkon Sagehaug wrote:
>>>>
>>>> Hi
>>>>
>>>>>
>>>>> thanks for the pointer, but it did not seem to help fro some reason,
>>>>> the
>>>>> content of the message is always null i seems. This is how it looks in
>>>>> my
>>>>> code
>>>>>
>>>>> //Get the stream
>>>>> InputStream is = arg0.getContent(InputStream.class);
>>>>>     CachedOutputStream bos = null;
>>>>>     if (is != null) {
>>>>>
>>>>>         bos = new CachedOutputStream();
>>>>>         //Copy it to the cachedoutput stream
>>>>>         IOUtils.copy(is, bos);
>>>>>         log.info("Set the new content ");
>>>>>
>>>>>     }
>>>>>
>>>>>  so add
>>>>
>>>> bos.flush();
>>>>     is.close();
>>>>   // Set the new content
>>>>     arg0.setContent(InputStream.class, bos.getInputStream());
>>>>     bos.close();
>>>> before getBodyElement (as this method actually will consume the
>>>> inputstream, if the inputstream isn't re-readable, then you get null
>>>> afterwords)
>>>>
>>>> Freeman
>>>>
>>>>      //Get the content for the body
>>>>
>>>>>     log.info("body info {}", getBodyElement(arg0));
>>>>>
>>>>>     bos.flush();
>>>>>     is.close();
>>>>>   // Set the new content
>>>>>     arg0.setContent(InputStream.class, bos.getInputStream());
>>>>>     bos.close();
>>>>>
>>>>>
>>>>> I'm I doing anything wrong here? Tried to place the point where I
>>>>> extract
>>>>> the body almost everywhere in my code, but nothing seems to help. If I
>>>>> remove the getBodyElement call everything works fine.
>>>>>
>>>>> Håkon
>>>>>
>>>>>
>>>>> 2009/10/27 Freeman Fang <[email protected]>
>>>>>
>>>>> Hi,
>>>>>
>>>>>>
>>>>>> I think the error comes from that the inputstream of message is not
>>>>>> re-readable, so if you want to read the message content yourself,
>>>>>> ensure
>>>>>> that you already copy the inputstream and save it before hand,
>>>>>> something
>>>>>> like
>>>>>>
>>>>>>    InputStream is = message.getContent(InputStream.class);
>>>>>>    if (is != null) {
>>>>>>        CachedOutputStream bos = new CachedOutputStream();
>>>>>>        try {
>>>>>>            IOUtils.copy(is, bos);
>>>>>>
>>>>>>            bos.flush();
>>>>>>            is.close();
>>>>>>
>>>>>>            message.setContent(InputStream.class,
>>>>>> bos.getInputStream());
>>>>>>
>>>>>>
>>>>>>            bos.close();
>>>>>>        } catch (IOException e) {
>>>>>>            throw new Fault(e);
>>>>>>        }
>>>>>>    }
>>>>>>
>>>>>> You can take a look at LoggingInInterceptor[1] as an example, this
>>>>>> interceptor just print out the message content when receive it and
>>>>>> will
>>>>>> not
>>>>>> affect other process afterwords, it's should be similar as your
>>>>>> requirement
>>>>>> [1]
>>>>>>
>>>>>>
>>>>>> https://svn.apache.org/repos/asf/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/LoggingInInterceptor.java
>>>>>>
>>>>>> Freeman
>>>>>>
>>>>>>
>>>>>> On 2009-10-27, at 上午12:12, Håkon Sagehaug wrote:
>>>>>>
>>>>>> hi,
>>>>>>
>>>>>>
>>>>>>> I copied the method and i was able to extract the message, but then I
>>>>>>> got
>>>>>>> a
>>>>>>> new exception, this one
>>>>>>>
>>>>>>> ERROR - CxfBcComponent                 - Error processing exchange
>>>>>>> InOut[
>>>>>>> id: ID:129.177.20.229-12490bff30f-2:27
>>>>>>> status: Active
>>>>>>> role: provider
>>>>>>> interface: {http://www.bccs.uib.no/
>>>>>>> EchoService.wsdl}EchoServicePortType
>>>>>>> service: 
>>>>>>> {http://www.bccs.uib.no/EchoService.wsdl}EchoService<http://www.bccs.uib.no/EchoService.wsdl%7DEchoService>
>>>>>>> <http://www.bccs.uib.no/EchoService.wsdl%7DEchoService>
>>>>>>> <http://www.bccs.uib.no/EchoService.wsdl%7DEchoService>
>>>>>>> endpoint: EchoServiceProxy
>>>>>>> operation: 
>>>>>>> {http://www.bccs.uib.no/EchoService.wsdl}SayHi<http://www.bccs.uib.no/EchoService.wsdl%7DSayHi>
>>>>>>> <http://www.bccs.uib.no/EchoService.wsdl%7DSayHi>
>>>>>>> <http://www.bccs.uib.no/EchoService.wsdl%7DSayHi>
>>>>>>>
>>>>>>> in: null
>>>>>>> ]
>>>>>>>
>>>>>>>
>>>>>>> I guess the message for outgoing for some reason is null, so I looked
>>>>>>> at
>>>>>>> [1]
>>>>>>> some more and added this to my code
>>>>>>>
>>>>>>> Document messageDocument = DomUtil.createDocument();
>>>>>>>
>>>>>>>   Element soapEnv = DomUtil.createElement(messageDocument,
>>>>>>>       new QName(soapVersion.getEnvelope().getNamespaceURI(),
>>>>>>>           soapVersion.getEnvelope().getLocalPart(),
>>>>>>>           soapVersion.getPrefix()));
>>>>>>>   Element soapBody = DomUtil.createElement(soapEnv, new QName(
>>>>>>>       soapVersion.getBody().getNamespaceURI(), soapVersion
>>>>>>>           .getBody().getLocalPart(), soapVersion
>>>>>>>           .getPrefix()));
>>>>>>>   soapEnv.appendChild(soapBody);
>>>>>>>   Element body = getBodyElement(arg0);
>>>>>>>
>>>>>>>   soapBody.appendChild(soapBody.getOwnerDocument().importNode(
>>>>>>>       body, true));
>>>>>>>
>>>>>>>   arg0.setContent(Source.class, new DOMSource(messageDocument));
>>>>>>>
>>>>>>> But this gives also gives me an error,
>>>>>>>
>>>>>>> INFO  - PhaseInterceptorChain          - Interceptor has thrown
>>>>>>> exception,
>>>>>>> unwinding now null
>>>>>>>
>>>>>>> Not sure what to do, I've tried changing the Phase I have my
>>>>>>> Interceptor,
>>>>>>> first I had it in Phase.READ, and tried some others but no luck.
>>>>>>>
>>>>>>> Any tips on how to solve it??
>>>>>>>
>>>>>>> cheers, Håkon
>>>>>>>
>>>>>>> 2009/10/26 Freeman Fang <[email protected]>
>>>>>>>
>>>>>>> Hi,
>>>>>>>
>>>>>>>
>>>>>>>> You can take a look at JbiInWsdl1Interceptor.getBodyElement() [1] as
>>>>>>>> an
>>>>>>>> example.
>>>>>>>> [1]
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> https://svn.apache.org/repos/asf/servicemix/components/bindings/servicemix-cxf-bc/trunk/src/main/java/org/apache/servicemix/cxfbc/interceptors/JbiInWsdl1Interceptor.java
>>>>>>>>
>>>>>>>> Freeman
>>>>>>>>
>>>>>>>>
>>>>>>>> On 2009-10-26, at 下午10:09, Håkon Sagehaug wrote:
>>>>>>>>
>>>>>>>> Hi all,
>>>>>>>>
>>>>>>>>
>>>>>>>>  I know this is not a specific servicemix question, but hopefully
>>>>>>>>> someone
>>>>>>>>> can
>>>>>>>>> answer it. I'm having cxf-bc that proxy out a web service, and
>>>>>>>>> having
>>>>>>>>> a
>>>>>>>>> interceptor in he xbean configuration for  looking for a pattern in
>>>>>>>>> the
>>>>>>>>> soap
>>>>>>>>> message. I can extract the soap header in the soap envelope fine,
>>>>>>>>> but
>>>>>>>>> I
>>>>>>>>> couldn't figure out how to extract the soap body. So does anyone
>>>>>>>>> have
>>>>>>>>> a
>>>>>>>>> tip
>>>>>>>>> how to easily extracting the soap body inside the cxf interceptor?
>>>>>>>>>
>>>>>>>>> cheers, Håkon
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> Håkon Sagehaug, Scientific Programmer
>>>>>>>>> Parallab, Bergen Center for Computational Science (BCCS)
>>>>>>>>> UNIFOB AS (University of Bergen Research Company)
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>  --
>>>>>>>> Freeman Fang
>>>>>>>> ------------------------
>>>>>>>> Open Source SOA: http://fusesource.com
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>  --
>>>>>>> Håkon Sagehaug, Scientific Programmer
>>>>>>> Parallab, Bergen Center for Computational Science (BCCS)
>>>>>>> UNIFOB AS (University of Bergen Research Company)
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>> --
>>>>>> Freeman Fang
>>>>>> ------------------------
>>>>>> Open Source SOA: http://fusesource.com
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>> --
>>>>> Håkon Sagehaug, Scientific Programmer
>>>>> Parallab, Bergen Center for Computational Science (BCCS)
>>>>> UNIFOB AS (University of Bergen Research Company)
>>>>>
>>>>>
>>>>
>>>> --
>>>> Freeman Fang
>>>> ------------------------
>>>> Open Source SOA: http://fusesource.com
>>>>
>>>>
>>>>
>>>
>>> --
>>> Håkon Sagehaug, Scientific Programmer
>>> Parallab, Bergen Center for Computational Science (BCCS)
>>> UNIFOB AS (University of Bergen Research Company)
>>>
>>
>>
>> --
>> Freeman Fang
>> ------------------------
>> Open Source SOA: http://fusesource.com
>>
>>
>
>
> --
> Håkon Sagehaug, Scientific Programmer
> Parallab, Bergen Center for Computational Science (BCCS)
> UNIFOB AS (University of Bergen Research Company)
>



-- 
Håkon Sagehaug, Scientific Programmer
Parallab, Bergen Center for Computational Science (BCCS)
UNIFOB AS (University of Bergen Research Company)
[email protected], phone +47 55584125

Reply via email to