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

Reply via email to