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)

Reply via email to