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>
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)
--
Freeman Fang
------------------------
Open Source SOA: http://fusesource.com