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)
