L.S.,

The most likely explanation is that you the incoming MessageExchange uses streaming for the message body (e.g. with a StreamSource, StaxSource or the like). However, the stream is being read when you call the new SourceTransformer()).toString(content); At that moment, the String variable contains the message body, but the original stream itself has been closed.

Later on in your code, you copy the message content from 'in' to 'out', but the in (and out) message content is the closed stream now, causing problems when you try to read this thing again. The best way to solve this is by calling setContent() on the out message and passing in a new Source object (e.g. a new StringSource(body)) to make sure you have a re-readable message.
Could you give that a try?

Regards,

Gert


FreshAir wrote:

Edell Nolan wrote:
Hi,

I have tried this and for me to get it to go through and work I needed to
define a target namespace.

e.g

<?xml version="1.0" encoding="UTF-8"?>
<e:Envelope xmlns:e="http://schemas.xmlsoap.org/soap/envelope/";
xmlns="http://schemas.xmlsoap.org/soap/envelope/";>
  <e:Body>
   <test id="1">ok
   </test>
  </e:Body>
</e:Envelope>

Can you give this a try ?

thanks, Edell.

On Thu, Aug 21, 2008 at 2:35 AM, FreshAir <[EMAIL PROTECTED]> wrote:


Edell Nolan wrote:
Hi,

I have tested this out and it works for me.

I am just wondering how you send the actual message.

I sent the request as follows from an onMessageExchange of a Service

        QName cbrServiceName = new QName(SERVICE_NAMESPACE,
"contentEnricher");
        ServiceEndpoint se = getContext().getEndpoint(cbrServiceName,
"enricherEndpoint");

        InOnly eipInOnly =
channel.createExchangeFactory().createInOnlyExchange();

        eipInOnly.setEndpoint(se);
        NormalizedMessage msg = eipInOnly.createMessage();
        msg.setContent(setMessageContent());

        eipInOnly.setMessage(msg, "in");
        eipInOnly.setService(cbrServiceName);
        channel.sendSync(eipInOnly);



then setMessageContent is

 private StringSource setupMsg() {
      StringBuffer buf = new StringBuffer();
      buf.append("<test id=\"1\">ok</test>");
      return new StringSource(buf.toString());
    }

and it then goes through the additionalInformationExtracter and another
service that I setup as the target and I do get the message content
from
it.

Edell.


On Wed, Aug 20, 2008 at 8:27 AM, FreshAir <[EMAIL PROTECTED]>
wrote:
Hi,
I tested the servicemix-eip, and its content-enricher part appears
rather
confusing.
The following is my xbean.xml using content-enricher:
<eip:content-enricher service="test:contentEnricher"
endpoint="endpoint">
 <eip:enricherTarget>
   <eip:exchange-target
service="test:additionalInformationExtracter"/>
 </eip:enricherTarget>
 <eip:target>
   <eip:exchange-target service="test:trace3" />
 </eip:target>
</eip:content-enricher>

the exchange-target of enricherTarget is simply a servicemix-bea, the
onMessageExchange method of which is as follows:

 public void onMessageExchange(MessageExchange exchange) throws
MessagingException {
       if (exchange.getStatus() == ExchangeStatus.ACTIVE) {

               NormalizedMessage message = exchange.getMessage("in");
                       Source content = message.getContent();
                       //process content according to your logic
                       //e.g. to access the message body as a String
use
                       try{
                       String body = (new
SourceTransformer()).toString(content);
message.setContent(content);
                       System.out.println("Routed to Enricher!");
                       System.out.println("received: " + body);

                       exchange.setMessage(message, "out");
                       channel.send(exchange);
                       }catch(Exception e) {
                               e.printStackTrace();
                       }
       }
   }
As you see, it can not be simpler which just echo the message.
The target part is similar and equally simple. I used a http bc to
post
a
soap message to the content-enricher like this:

<?xml version="1.0" encoding="UTF-8"?>
<e:Envelope xmlns:e="http://schemas.xmlsoap.org/soap/envelope/";>
 <e:Body>
  <test id="1">ok
  </test>
 </e:Body>
</e:Envelope>

But it gave me the following error:

Routed to Enricher!
received: <?xml version="1.0" encoding="UTF-8"?><test
xmlns:e="http://schemas.xm
lsoap.org/soap/envelope/" id="1">ok
  </test>
ERROR - EIPComponent                   - Error processing exchange
InOnly[
 id: ID:172.16.253.122-11bdeb9b38c-12:8
 status: Active
 role: provider
 service: {http://test}contentEnricher
 endpoint: endpoint
 operation: test
 in: <?xml version="1.0" encoding="UTF-8"?>
]
java.lang.NullPointerException
       at org.apache.xerces.dom.CoreDocumentImpl.importNode(Unknown
Source)
       at org.apache.xerces.dom.CoreDocumentImpl.importNode(Unknown
Source)
       at
com.intervision.interesb.eip.patterns.ContentEnricher.combineToDOMDoc
ument(ContentEnricher.java:208)
       at
com.intervision.interesb.eip.patterns.ContentEnricher.process(Content
Enricher.java:156)
       at
com.intervision.interesb.common.AsyncBaseLifeCycle.doProcess(AsyncBas
eLifeCycle.java:526)
       at
com.intervision.interesb.common.AsyncBaseLifeCycle.processExchange(As
yncBaseLifeCycle.java:478)
       at
com.intervision.interesb.common.BaseLifeCycle.onMessageExchange(BaseL
ifeCycle.java:34)
       at
com.intervision.interesb.jbi.messaging.DeliveryChannelImpl.processInB
ound(DeliveryChannelImpl.java:598)
       at
com.intervision.interesb.jbi.nmr.flow.AbstractFlow.doRouting(Abstract
Flow.java:158)
       at
com.intervision.interesb.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlo
w.java:155)
       at
com.intervision.interesb.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.
java:122)
       at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExec
utor.java:886)
       at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor
.java:908)
       at java.lang.Thread.run(Thread.java:619)
WARN  - jetty                          - Nested in
javax.servlet.ServletExceptio
n: Failed to process request: java.lang.Exception:
java.lang.NullPointerExceptio
n:
java.lang.Exception: java.lang.NullPointerException
       at
com.intervision.interesb.http.processors.ConsumerProcessor.process(Co
nsumerProcessor.java:182)
       at
com.intervision.interesb.http.HttpBridgeServlet.doPost(HttpBridgeServ
let.java:59)
       at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
       at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
       at
org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487
)
       at
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:3
62)
       at
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:7
12)
       at
org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHand
lerCollection.java:211)
       at
org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.
java:114)
       at
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:1
39)
       at org.mortbay.jetty.Server.handle(Server.java:313)
       at
org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:50
6)
       at
org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:375)
       at
org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.ja
va:396)
       at
org.mortbay.jetty.nio.SelectChannelConnector$RetryContinuation.run(Se
lectChannelConnector.java:511)
       at
org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool
.java:442)
Caused by: java.lang.NullPointerException
       at org.apache.xerces.dom.CoreDocumentImpl.importNode(Unknown
Source)
       at org.apache.xerces.dom.CoreDocumentImpl.importNode(Unknown
Source)
       at
com.intervision.interesb.eip.patterns.ContentEnricher.combineToDOMDoc
ument(ContentEnricher.java:208)
       at
com.intervision.interesb.eip.patterns.ContentEnricher.process(Content
Enricher.java:156)
       at
com.intervision.interesb.common.AsyncBaseLifeCycle.doProcess(AsyncBas
eLifeCycle.java:526)
       at
com.intervision.interesb.common.AsyncBaseLifeCycle.processExchange(As
yncBaseLifeCycle.java:478)
       at
com.intervision.interesb.common.BaseLifeCycle.onMessageExchange(BaseL
ifeCycle.java:34)
       at
com.intervision.interesb.jbi.messaging.DeliveryChannelImpl.processInB
ound(DeliveryChannelImpl.java:598)
       at
com.intervision.interesb.jbi.nmr.flow.AbstractFlow.doRouting(Abstract
Flow.java:158)
       at
com.intervision.interesb.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlo
w.java:155)
       at
com.intervision.interesb.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.
java:122)
       at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExec
utor.java:886)
       at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor
.java:908)
       at java.lang.Thread.run(Thread.java:619)
WARN  - jetty                          - /eip-enricher/
java.lang.Exception: java.lang.NullPointerException
       at
com.intervision.interesb.http.processors.ConsumerProcessor.process(Co
nsumerProcessor.java:182)
       at
com.intervision.interesb.http.HttpBridgeServlet.doPost(HttpBridgeServ
let.java:59)
       at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
       at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
       at
org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487
)
       at
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:3
62)
       at
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:7
12)
       at
org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHand
lerCollection.java:211)
       at
org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.
java:114)
       at
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:1
39)
       at org.mortbay.jetty.Server.handle(Server.java:313)
       at
org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:50
6)
       at
org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:375)
       at
org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.ja
va:396)
       at
org.mortbay.jetty.nio.SelectChannelConnector$RetryContinuation.run(Se
lectChannelConnector.java:511)
       at
org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool
.java:442)
Caused by: java.lang.NullPointerException
       at org.apache.xerces.dom.CoreDocumentImpl.importNode(Unknown
Source)
       at org.apache.xerces.dom.CoreDocumentImpl.importNode(Unknown
Source)
       at
com.intervision.interesb.eip.patterns.ContentEnricher.combineToDOMDoc
ument(ContentEnricher.java:208)
       at
com.intervision.interesb.eip.patterns.ContentEnricher.process(Content
Enricher.java:156)
       at
com.intervision.interesb.common.AsyncBaseLifeCycle.doProcess(AsyncBas
eLifeCycle.java:526)
       at
com.intervision.interesb.common.AsyncBaseLifeCycle.processExchange(As
yncBaseLifeCycle.java:478)
       at
com.intervision.interesb.common.BaseLifeCycle.onMessageExchange(BaseL
ifeCycle.java:34)
       at
com.intervision.interesb.jbi.messaging.DeliveryChannelImpl.processInB
ound(DeliveryChannelImpl.java:598)
       at
com.intervision.interesb.jbi.nmr.flow.AbstractFlow.doRouting(Abstract
Flow.java:158)
       at
com.intervision.interesb.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlo
w.java:155)
       at
com.intervision.interesb.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.
java:122)
       at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExec
utor.java:886)
       at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor
.java:908)
       at java.lang.Thread.run(Thread.java:619)

Obviously the enricher-target had recieved the message but when routed
to
the target, the "in" part of the message had mysteriously gone(that's
why
a
NullpointerException was invited).
Any suggestion would be greatly appreciated.
Thanks in advance!
--
View this message in context:

http://www.nabble.com/Confused-about-the-EIPComponent-content-Enricher-tp19064169p19064169.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.


Hi,
My http request part was like this,the xbean.xml which defines a http bc:
 <http:endpoint service="test:http8"
                endpoint="endpoint"
                targetService="test:contentEnricher"
                role="consumer"
                locationURI="http://0.0.0.0:8192/eip-enricher/";
                defaultMep="http://www.w3.org/2004/08/wsdl/in-only";
                                soap="true"/>

and I modified an example in servicemix3.2.1 distribution that is a
client.html to post request(as I attached).would you please tell me if I
missed something?
Thanks! http://www.nabble.com/file/p19081101/client-enricher.html
client-enricher.html
--
View this message in context:
http://www.nabble.com/Confused-about-the-EIPComponent-content-Enricher-tp19064169p19081101.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.



Sir,
I don't know how you got it through, for me it is still giving errors like
there were no actual payload in the sent message by that http bc to the
contentEnricher as follows(note the "in" part):
Routed to Enricher!
received: <?xml version="1.0" encoding="UTF-8"?><test
xmlns="http://schemas.xmls
oap.org/soap/envelope/" xmlns:e="http://schemas.xmlsoap.org/soap/envelope/";
id="
1">ok
   </test>
ERROR - EIPComponent                   - Error processing exchange InOnly[
  id: ID:172.16.253.122-11be8193dc7-9:6
  status: Active
  role: provider
  service: {http://test}contentEnricher
  endpoint: endpoint
  operation: {http://schemas.xmlsoap.org/soap/envelope/}test
  in: <?xml version="1.0" encoding="UTF-8"?>
]
java.lang.NullPointerException
        at org.apache.xerces.dom.CoreDocumentImpl.importNode(Unknown Source)
        at org.apache.xerces.dom.CoreDocumentImpl.importNode(Unknown Source)
        at
com.intervision.interesb.eip.patterns.ContentEnricher.combineToDOMDoc
ument(ContentEnricher.java:208)
        at
com.intervision.interesb.eip.patterns.ContentEnricher.process(Content
Enricher.java:156)
...

Is there any difference between defining a namespace and without one in the
request xml?
Anyway, I think it is http bc that causes problem, since when I produce a
Inonly message in a servicemix-bean's onMessageExchangeListener and send it
to that contentEnricher(defining QName), it works like:
Routed to Enricher!
received: <test id="1">ok</test>
Received exchange: InOnly[
  id: ID:172.16.253.122-11be8207141-13:2
  status: Active
  role: provider
  service: {http://test}trace3
  endpoint: endpoint
  in: <?xml version="1.0" encoding="UTF-8"?><enricher><request><test
id="1">ok</
test></request><result><test id="1">ok</test></result></enricher>
]
here I dont enrich any content so it remains the same.
It is noticeable, however, that in the former the enricher bean recieved
something like: <?xml version="1.0" encoding="UTF-8"?><test xmlns="http://schemas.xmls
oap.org/soap/envelope/" xmlns:e="http://schemas.xmlsoap.org/soap/envelope/";
id="
1">ok
   </test>
and for the latter:
<test id="1">ok</test>

The non-http request is written as you told me in the last reply.
So I was indeed wondering what's wrong with my http-bc.
Thanks.

Reply via email to