You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@servicemix.apache.org by Bence <be...@vass.at> on 2008/04/07 15:48:50 UTC
SOAP + drools problem
Hi,
I am trying to create the easiest drools routing of SOAP messages example.
At the moment i have 2 SUs:
service-router-su - from the maven archetype servicemix-drools-service-unit
service-router-http-su - from the maven archetype
servicemix-http-consumer-service-unit
I only want to send a SOAP message to the BC, and have it routed back to
another endpoint in the same BC no matter what.
So I have this rule:
rule "anything"
when
eval(true)
then
jbi.route( "service::test:httpprovider" );
end
in the BC I have 2 endpoints:
<http:endpoint service="test:httplistener"
endpoint="listenerEndpoint"
role="consumer"
locationURI="http://localhost:8192/servicerouter/"
defaultMep="http://www.w3.org/2004/08/wsdl/in-out"
targetService="test:servicerouter"
targetEndpoint="servicerouterEndpoint"
soap="true" />
<http:endpoint service="test:httpprovider"
endpoint="providerEndpoint"
role="provider"
locationURI="http://localhost:8080/testservice />
The drools endpoint is:
<drools:endpoint service="test:servicerouter"
endpoint="servicerouterEndpoint"
ruleBaseResource="classpath:router.drl"
namespaceContext="#nsContext" />
Now this is not really working, and there are a few things which I don't
understand.
Since the SOAP message is routed to a webservice outside of servicemix, how
would the drools SU expose teh WSDL of that service? What kind of SOAP
message do I have to write so that it gets recognized by drools and routed
forward to that other service?
Thanks in advance
--
View this message in context: http://www.nabble.com/SOAP-%2B-drools-problem-tp16537434p16537434.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.
Re: SOAP + drools problem
Posted by Guillaume Nodet <gn...@gmail.com>.
I see there is a http provider endpoint registered as
accesslayer:httpprovider, so it may be that the accesslayer prefix is
incorrectly bound to the namespace uri, or the opposite (the drools router
uri is wrong).
The drools uri uses "service:accesslayer:httpprovider" which means it will
send the JBI exchange to a service identified by the qname ("accesslayer",
"httpprovider"), whereas the http provider endpoint has a QName of (xxx,
"httpprovider") where xxx is the uri mapped to the "acesslayer" prefix in
the xml.
If you change your xbean.xml for servicemix-http to include the following:
<beans xmlns:accesslayer="accesslayer">
it should work better.
On Thu, Apr 10, 2008 at 2:48 PM, Lars Heinemann <la...@compart.net>
wrote:
> The error message is clear: There is no service with the servicename
> {accesslayer}httpprovider registered in the bus.
>
> Regards
> Lars
>
>
>
>
> Bence schrieb:
> > Hi,
> >
> > Thanks for the reply. You are correct, that's the flow that I am aiming
> for.
> > But I just can't get it right apperently.
> >
> > The messages just doesn't get routed through, and I can't really make
> any
> > sense of the error message. This is what I get in the log when I try
> with
> > the client.html from the wsdl-first example (with the personservice as
> the
> > target):
> > HTTP ERROR: 500</h2><pre>org.drools.spi.ConsequenceException:
> > javax.jbi.messaging.MessagingException: Could not find route for
> exchange:
> > InOut[
> > id: ID:192.168.240.224-1193844d13c-6:22
> > status: Active
> > role: provider
> > service: {accesslayer}httpprovider
> > in: <?xml version="1.0" encoding="UTF-8"?><tns:GetPerson
> > xmlns:tns="http://servicemix.apache.org/samples/wsdl-first/types"
> > xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
> > <tns:personId>world</tns:personId>
> > </tns:GetPerson>
> > ]
> >
> > The whole thing:
> > STATUS: 500
> > <html>
> > <head>
> > <meta http-equiv="Content-Type" content="text/html;
> charset=ISO-8859-1"/>
> > <title>Error 500 </title>
> > </head>
> > <body><h2>HTTP ERROR: 500</h2><pre>org.drools.spi.ConsequenceException:
> > javax.jbi.messaging.MessagingException: Could not find route for
> exchange:
> > InOut[
> > id: ID:192.168.240.224-1193844d13c-6:22
> > status: Active
> > role: provider
> > service: {accesslayer}httpprovider
> > in: <?xml version="1.0" encoding="UTF-8"?><tns:GetPerson
> > xmlns:tns="http://servicemix.apache.org/samples/wsdl-first/types"
> > xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
> > <tns:personId>world</tns:personId>
> > </tns:GetPerson>
> > ] for service: {accesslayer}httpprovider and interface: null</pre>
> > <p>RequestURI=/servicerouter/</p><h3>Caused
> > by:</h3><pre>java.lang.Exception: org.drools.spi.ConsequenceException:
> > javax.jbi.messaging.MessagingException: Could not find route for
> exchange:
> > InOut[
> > id: ID:192.168.240.224-1193844d13c-6:22
> > status: Active
> > role: provider
> > service: {accesslayer}httpprovider
> > in: <?xml version="1.0" encoding="UTF-8"?><tns:GetPerson
> > xmlns:tns="http://servicemix.apache.org/samples/wsdl-first/types"
> > xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
> > <tns:personId>world</tns:personId>
> > </tns:GetPerson>
> > ] for service: {accesslayer}httpprovider and interface: null
> > at
> >
> org.apache.servicemix.http.processors.ConsumerProcessor.process(ConsumerProcessor.java:194)
> > at
> >
> org.apache.servicemix.http.HttpBridgeServlet.doPost(HttpBridgeServlet.java:71)
> > 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:362)
> > at
> org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
> > at
> >
> org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:211)
> > at
> >
> org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
> > at
> org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
> > at org.mortbay.jetty.Server.handle(Server.java:313)
> > at
> org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:506)
> > at
> org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:375)
> > at
> >
> org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:396)
> > at
> >
> org.mortbay.jetty.nio.SelectChannelConnector$RetryContinuation.run(SelectChannelConnector.java:511)
> > at
> >
> org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442)
> > Caused by: org.drools.spi.ConsequenceException:
> > javax.jbi.messaging.MessagingException: Could not find route for
> exchange:
> > InOut[
> > id: ID:192.168.240.224-1193844d13c-6:22
> > status: Active
> > role: provider
> > service: {accesslayer}httpprovider
> > in: <?xml version="1.0" encoding="UTF-8"?><tns:GetPerson
> > xmlns:tns="http://servicemix.apache.org/samples/wsdl-first/types"
> > xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
> > <tns:personId>world</tns:personId>
> > </tns:GetPerson>
> > ] for service: {accesslayer}httpprovider and interface: null
> > at org.drools.common.DefaultAgenda.fireActivation(Unknown Source)
> > at org.drools.common.DefaultAgenda.fireNextItem(Unknown Source)
> > at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
> Source)
> > at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
> Source)
> > at
> >
> org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:182)
> > at
> >
> org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:173)
> > at
> >
> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:538)
> > at
> >
> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:490)
> > at
> >
> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
> > at
> >
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:610)
> > at
> >
> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:170)
> > at
> >
> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:167)
> > at
> >
> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
> > at
> >
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
> > at
> >
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
> > at java.lang.Thread.run(Thread.java:595)
> > Caused by: javax.jbi.messaging.MessagingException: Could not find route
> for
> > exchange: InOut[
> > id: ID:192.168.240.224-1193844d13c-6:22
> > status: Active
> > role: provider
> > service: {accesslayer}httpprovider
> > in: <?xml version="1.0" encoding="UTF-8"?><tns:GetPerson
> > xmlns:tns="http://servicemix.apache.org/samples/wsdl-first/types"
> > xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
> > <tns:personId>world</tns:personId>
> > </tns:GetPerson>
> > ] for service: {accesslayer}httpprovider and interface: null
> > at
> >
> org.apache.servicemix.jbi.nmr.DefaultBroker.sendExchangePacket(DefaultBroker.java:297)
> > at
> >
> org.apache.servicemix.jbi.security.SecuredBroker.sendExchangePacket(SecuredBroker.java:81)
> > at
> >
> org.apache.servicemix.jbi.container.JBIContainer.sendExchange(JBIContainer.java:830)
> > at
> >
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:395)
> > at
> >
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:470)
> > at
> >
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:442)
> > at
> >
> org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDeliveryChannel.java:95)
> > at
> org.apache.servicemix.drools.model.JbiHelper.route(JbiHelper.java:109)
> > at
> >
> org.apache.servicemix.drools.Rule_anything_0.consequence(Rule_anything_0.java:11)
> > at
> >
> org.apache.servicemix.drools.Rule_anything_0ConsequenceInvoker.evaluate(Rule_anything_0ConsequenceInvoker.java:19)
> > ... 16 more
> > </pre>
> > <h3>Caused by:</h3><pre>org.drools.spi.ConsequenceException:
> > javax.jbi.messaging.MessagingException: Could not find route for
> exchange:
> > InOut[
> > id: ID:192.168.240.224-1193844d13c-6:22
> > status: Active
> > role: provider
> > service: {accesslayer}httpprovider
> > in: <?xml version="1.0" encoding="UTF-8"?><tns:GetPerson
> > xmlns:tns="http://servicemix.apache.org/samples/wsdl-first/types"
> > xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
> > <tns:personId>world</tns:personId>
> > </tns:GetPerson>
> > ] for service: {accesslayer}httpprovider and interface: null
> > at org.drools.common.DefaultAgenda.fireActivation(Unknown Source)
> > at org.drools.common.DefaultAgenda.fireNextItem(Unknown Source)
> > at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
> Source)
> > at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
> Source)
> > at
> >
> org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:182)
> > at
> >
> org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:173)
> > at
> >
> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:538)
> > at
> >
> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:490)
> > at
> >
> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
> > at
> >
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:610)
> > at
> >
> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:170)
> > at
> >
> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:167)
> > at
> >
> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
> > at
> >
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
> > at
> >
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
> > at java.lang.Thread.run(Thread.java:595)
> > Caused by: javax.jbi.messaging.MessagingException: Could not find route
> for
> > exchange: InOut[
> > id: ID:192.168.240.224-1193844d13c-6:22
> > status: Active
> > role: provider
> > service: {accesslayer}httpprovider
> > in: <?xml version="1.0" encoding="UTF-8"?><tns:GetPerson
> > xmlns:tns="http://servicemix.apache.org/samples/wsdl-first/types"
> > xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
> > <tns:personId>world</tns:personId>
> > </tns:GetPerson>
> > ] for service: {accesslayer}httpprovider and interface: null
> > at
> >
> org.apache.servicemix.jbi.nmr.DefaultBroker.sendExchangePacket(DefaultBroker.java:297)
> > at
> >
> org.apache.servicemix.jbi.security.SecuredBroker.sendExchangePacket(SecuredBroker.java:81)
> > at
> >
> org.apache.servicemix.jbi.container.JBIContainer.sendExchange(JBIContainer.java:830)
> > at
> >
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:395)
> > at
> >
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:470)
> > at
> >
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:442)
> > at
> >
> org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDeliveryChannel.java:95)
> > at
> org.apache.servicemix.drools.model.JbiHelper.route(JbiHelper.java:109)
> > at
> >
> org.apache.servicemix.drools.Rule_anything_0.consequence(Rule_anything_0.java:11)
> > at
> >
> org.apache.servicemix.drools.Rule_anything_0ConsequenceInvoker.evaluate(Rule_anything_0ConsequenceInvoker.java:19)
> > ... 16 more
> > </pre>
> > <h3>Caused by:</h3><pre>javax.jbi.messaging.MessagingException: Could
> not
> > find route for exchange: InOut[
> > id: ID:192.168.240.224-1193844d13c-6:22
> > status: Active
> > role: provider
> > service: {accesslayer}httpprovider
> > in: <?xml version="1.0" encoding="UTF-8"?><tns:GetPerson
> > xmlns:tns="http://servicemix.apache.org/samples/wsdl-first/types"
> > xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
> > <tns:personId>world</tns:personId>
> > </tns:GetPerson>
> > ] for service: {accesslayer}httpprovider and interface: null
> > at
> >
> org.apache.servicemix.jbi.nmr.DefaultBroker.sendExchangePacket(DefaultBroker.java:297)
> > at
> >
> org.apache.servicemix.jbi.security.SecuredBroker.sendExchangePacket(SecuredBroker.java:81)
> > at
> >
> org.apache.servicemix.jbi.container.JBIContainer.sendExchange(JBIContainer.java:830)
> > at
> >
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:395)
> > at
> >
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:470)
> > at
> >
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:442)
> > at
> >
> org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDeliveryChannel.java:95)
> > at
> org.apache.servicemix.drools.model.JbiHelper.route(JbiHelper.java:109)
> > at
> >
> org.apache.servicemix.drools.Rule_anything_0.consequence(Rule_anything_0.java:11)
> > at
> >
> org.apache.servicemix.drools.Rule_anything_0ConsequenceInvoker.evaluate(Rule_anything_0ConsequenceInvoker.java:19)
> > at org.drools.common.DefaultAgenda.fireActivation(Unknown Source)
> > at org.drools.common.DefaultAgenda.fireNextItem(Unknown Source)
> > at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
> Source)
> > at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
> Source)
> > at
> >
> org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:182)
> > at
> >
> org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:173)
> > at
> >
> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:538)
> > at
> >
> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:490)
> > at
> >
> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
> > at
> >
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:610)
> > at
> >
> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:170)
> > at
> >
> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:167)
> > at
> >
> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
> > at
> >
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
> > at
> >
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
> > at java.lang.Thread.run(Thread.java:595)
> > </pre>
> > <p><small> http://jetty.mortbay.org/ Powered by Jetty://
> </small></p><br/>
> > <br/>
> > <br/>
> > <br/>
> > <br/>
> > <br/>
> > <br/>
> > <br/>
> > <br/>
> > <br/>
> > <br/>
> > <br/>
> > <br/>
> > <br/>
> > <br/>
> > <br/>
> > <br/>
> > <br/>
> > <br/>
> > <br/>
> >
> > </body>
> > </html>
> >
> >
> > This is my rule now:
> > rule "anything"
> > when
> > eval(true)
> > then
> > jbi.route( "service:accesslayer:httpprovider" );
> > // jbi.fault( "<fault>Id must be > 0</fault>" );
> > end
> >
> > This is my drools endpoint:
> > <drools:endpoint service="accesslayer:servicerouter"
> > endpoint="servicerouterEndpoint"
> > ruleBaseResource="classpath:router.drl"
> > namespaceContext="#nsContext" />
> >
> > These are my http endpoints:
> > <http:endpoint service="accesslayer:httplistener"
> > endpoint="listenerEndpoint"
> > role="consumer"
> > locationURI="http://localhost:8192/servicerouter/"
> > defaultMep="http://www.w3.org/2004/08/wsdl/in-out"
> > targetService="accesslayer:servicerouter"
> > targetEndpoint="servicerouterEndpoint"
> > soap="true" >
> > <http:policies />
> > </http:endpoint>
> > <http:endpoint service="accesslayer:httpprovider"
> > endpoint="providerEndpoint"
> > role="provider"
> > locationURI="http://localhost:8192/PersonService"
> > soap="true" >
> > <http:policies />
> > </http:endpoint>
> >
> >
> >
> > lhein wrote:
> >
> >> Bence,
> >>
> >> if it's correct what you wrote then your flow is the following:
> >>
> >> 1. Somebody calls the webservice "http://localhost:8192/servicerouter/"
> >> 2. the soap call will be forwarded to the drools SU
> >> 3. Rule "anything" is executed
> >> 4. the soap call is routed to "http://localhost:8080/testservice"
> >>
> >> If you turn on Debug Mode in <smx install folder>/conf/log4j.xml you
> will
> >> see the message flow.
> >> It might be a problem that the incoming soap message from
> /servicerouter/
> >> is not compatible to use as soap request for /testservice/ so you need
> to
> >> put a transformation somewhere between I suppose.
> >>
> >> Regards,
> >> Lars
> >>
> >>
> >>
> >>
> >>
> >> Bence wrote:
> >>
> >>> Hi,
> >>>
> >>> I am trying to create the easiest drools routing of SOAP messages
> >>> example.
> >>>
> >>> At the moment i have 2 SUs:
> >>> service-router-su - from the maven archetype
> >>> servicemix-drools-service-unit
> >>> service-router-http-su - from the maven archetype
> >>> servicemix-http-consumer-service-unit
> >>>
> >>> I only want to send a SOAP message to the BC, and have it routed back
> to
> >>> another endpoint in the same BC no matter what.
> >>> So I have this rule:
> >>> rule "anything"
> >>> when
> >>> eval(true)
> >>> then
> >>> jbi.route( "service::test:httpprovider" );
> >>> end
> >>>
> >>> in the BC I have 2 endpoints:
> >>> <http:endpoint service="test:httplistener"
> >>> endpoint="listenerEndpoint"
> >>> role="consumer"
> >>> locationURI="http://localhost:8192/servicerouter/"
> >>> defaultMep="http://www.w3.org/2004/08/wsdl/in-out"
> >>> targetService="test:servicerouter"
> >>> targetEndpoint="servicerouterEndpoint"
> >>> soap="true" />
> >>> <http:endpoint service="test:httpprovider"
> >>> endpoint="providerEndpoint"
> >>> role="provider"
> >>> locationURI="http://localhost:8080/testservice />
> >>>
> >>> The drools endpoint is:
> >>> <drools:endpoint service="test:servicerouter"
> >>> endpoint="servicerouterEndpoint"
> >>> ruleBaseResource="classpath:router.drl"
> >>> namespaceContext="#nsContext" />
> >>>
> >>> Now this is not really working, and there are a few things which I
> don't
> >>> understand.
> >>>
> >>> Since the SOAP message is routed to a webservice outside of
> servicemix,
> >>> how would the drools SU expose teh WSDL of that service? What kind of
> >>> SOAP message do I have to write so that it gets recognized by drools
> and
> >>> routed forward to that other service?
> >>>
> >>> Thanks in advance
> >>>
> >>>
> >>
> >
> >
>
--
Cheers,
Guillaume Nodet
------------------------
Blog: http://gnodet.blogspot.com/
Re: SOAP + drools problem
Posted by Lars Heinemann <la...@compart.net>.
The error message is clear: There is no service with the servicename {accesslayer}httpprovider registered in the bus.
Regards
Lars
Bence schrieb:
> Hi,
>
> Thanks for the reply. You are correct, that's the flow that I am aiming for.
> But I just can't get it right apperently.
>
> The messages just doesn't get routed through, and I can't really make any
> sense of the error message. This is what I get in the log when I try with
> the client.html from the wsdl-first example (with the personservice as the
> target):
> HTTP ERROR: 500</h2><pre>org.drools.spi.ConsequenceException:
> javax.jbi.messaging.MessagingException: Could not find route for exchange:
> InOut[
> id: ID:192.168.240.224-1193844d13c-6:22
> status: Active
> role: provider
> service: {accesslayer}httpprovider
> in: <?xml version="1.0" encoding="UTF-8"?><tns:GetPerson
> xmlns:tns="http://servicemix.apache.org/samples/wsdl-first/types"
> xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
> <tns:personId>world</tns:personId>
> </tns:GetPerson>
> ]
>
> The whole thing:
> STATUS: 500
> <html>
> <head>
> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
> <title>Error 500 </title>
> </head>
> <body><h2>HTTP ERROR: 500</h2><pre>org.drools.spi.ConsequenceException:
> javax.jbi.messaging.MessagingException: Could not find route for exchange:
> InOut[
> id: ID:192.168.240.224-1193844d13c-6:22
> status: Active
> role: provider
> service: {accesslayer}httpprovider
> in: <?xml version="1.0" encoding="UTF-8"?><tns:GetPerson
> xmlns:tns="http://servicemix.apache.org/samples/wsdl-first/types"
> xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
> <tns:personId>world</tns:personId>
> </tns:GetPerson>
> ] for service: {accesslayer}httpprovider and interface: null</pre>
> <p>RequestURI=/servicerouter/</p><h3>Caused
> by:</h3><pre>java.lang.Exception: org.drools.spi.ConsequenceException:
> javax.jbi.messaging.MessagingException: Could not find route for exchange:
> InOut[
> id: ID:192.168.240.224-1193844d13c-6:22
> status: Active
> role: provider
> service: {accesslayer}httpprovider
> in: <?xml version="1.0" encoding="UTF-8"?><tns:GetPerson
> xmlns:tns="http://servicemix.apache.org/samples/wsdl-first/types"
> xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
> <tns:personId>world</tns:personId>
> </tns:GetPerson>
> ] for service: {accesslayer}httpprovider and interface: null
> at
> org.apache.servicemix.http.processors.ConsumerProcessor.process(ConsumerProcessor.java:194)
> at
> org.apache.servicemix.http.HttpBridgeServlet.doPost(HttpBridgeServlet.java:71)
> 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:362)
> at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
> at
> org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:211)
> at
> org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
> at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
> at org.mortbay.jetty.Server.handle(Server.java:313)
> at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:506)
> at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:375)
> at
> org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:396)
> at
> org.mortbay.jetty.nio.SelectChannelConnector$RetryContinuation.run(SelectChannelConnector.java:511)
> at
> org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442)
> Caused by: org.drools.spi.ConsequenceException:
> javax.jbi.messaging.MessagingException: Could not find route for exchange:
> InOut[
> id: ID:192.168.240.224-1193844d13c-6:22
> status: Active
> role: provider
> service: {accesslayer}httpprovider
> in: <?xml version="1.0" encoding="UTF-8"?><tns:GetPerson
> xmlns:tns="http://servicemix.apache.org/samples/wsdl-first/types"
> xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
> <tns:personId>world</tns:personId>
> </tns:GetPerson>
> ] for service: {accesslayer}httpprovider and interface: null
> at org.drools.common.DefaultAgenda.fireActivation(Unknown Source)
> at org.drools.common.DefaultAgenda.fireNextItem(Unknown Source)
> at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown Source)
> at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown Source)
> at
> org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:182)
> at
> org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:173)
> at
> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:538)
> at
> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:490)
> at
> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
> at
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:610)
> at
> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:170)
> at
> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:167)
> at
> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
> at java.lang.Thread.run(Thread.java:595)
> Caused by: javax.jbi.messaging.MessagingException: Could not find route for
> exchange: InOut[
> id: ID:192.168.240.224-1193844d13c-6:22
> status: Active
> role: provider
> service: {accesslayer}httpprovider
> in: <?xml version="1.0" encoding="UTF-8"?><tns:GetPerson
> xmlns:tns="http://servicemix.apache.org/samples/wsdl-first/types"
> xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
> <tns:personId>world</tns:personId>
> </tns:GetPerson>
> ] for service: {accesslayer}httpprovider and interface: null
> at
> org.apache.servicemix.jbi.nmr.DefaultBroker.sendExchangePacket(DefaultBroker.java:297)
> at
> org.apache.servicemix.jbi.security.SecuredBroker.sendExchangePacket(SecuredBroker.java:81)
> at
> org.apache.servicemix.jbi.container.JBIContainer.sendExchange(JBIContainer.java:830)
> at
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:395)
> at
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:470)
> at
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:442)
> at
> org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDeliveryChannel.java:95)
> at org.apache.servicemix.drools.model.JbiHelper.route(JbiHelper.java:109)
> at
> org.apache.servicemix.drools.Rule_anything_0.consequence(Rule_anything_0.java:11)
> at
> org.apache.servicemix.drools.Rule_anything_0ConsequenceInvoker.evaluate(Rule_anything_0ConsequenceInvoker.java:19)
> ... 16 more
> </pre>
> <h3>Caused by:</h3><pre>org.drools.spi.ConsequenceException:
> javax.jbi.messaging.MessagingException: Could not find route for exchange:
> InOut[
> id: ID:192.168.240.224-1193844d13c-6:22
> status: Active
> role: provider
> service: {accesslayer}httpprovider
> in: <?xml version="1.0" encoding="UTF-8"?><tns:GetPerson
> xmlns:tns="http://servicemix.apache.org/samples/wsdl-first/types"
> xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
> <tns:personId>world</tns:personId>
> </tns:GetPerson>
> ] for service: {accesslayer}httpprovider and interface: null
> at org.drools.common.DefaultAgenda.fireActivation(Unknown Source)
> at org.drools.common.DefaultAgenda.fireNextItem(Unknown Source)
> at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown Source)
> at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown Source)
> at
> org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:182)
> at
> org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:173)
> at
> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:538)
> at
> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:490)
> at
> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
> at
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:610)
> at
> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:170)
> at
> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:167)
> at
> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
> at java.lang.Thread.run(Thread.java:595)
> Caused by: javax.jbi.messaging.MessagingException: Could not find route for
> exchange: InOut[
> id: ID:192.168.240.224-1193844d13c-6:22
> status: Active
> role: provider
> service: {accesslayer}httpprovider
> in: <?xml version="1.0" encoding="UTF-8"?><tns:GetPerson
> xmlns:tns="http://servicemix.apache.org/samples/wsdl-first/types"
> xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
> <tns:personId>world</tns:personId>
> </tns:GetPerson>
> ] for service: {accesslayer}httpprovider and interface: null
> at
> org.apache.servicemix.jbi.nmr.DefaultBroker.sendExchangePacket(DefaultBroker.java:297)
> at
> org.apache.servicemix.jbi.security.SecuredBroker.sendExchangePacket(SecuredBroker.java:81)
> at
> org.apache.servicemix.jbi.container.JBIContainer.sendExchange(JBIContainer.java:830)
> at
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:395)
> at
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:470)
> at
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:442)
> at
> org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDeliveryChannel.java:95)
> at org.apache.servicemix.drools.model.JbiHelper.route(JbiHelper.java:109)
> at
> org.apache.servicemix.drools.Rule_anything_0.consequence(Rule_anything_0.java:11)
> at
> org.apache.servicemix.drools.Rule_anything_0ConsequenceInvoker.evaluate(Rule_anything_0ConsequenceInvoker.java:19)
> ... 16 more
> </pre>
> <h3>Caused by:</h3><pre>javax.jbi.messaging.MessagingException: Could not
> find route for exchange: InOut[
> id: ID:192.168.240.224-1193844d13c-6:22
> status: Active
> role: provider
> service: {accesslayer}httpprovider
> in: <?xml version="1.0" encoding="UTF-8"?><tns:GetPerson
> xmlns:tns="http://servicemix.apache.org/samples/wsdl-first/types"
> xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
> <tns:personId>world</tns:personId>
> </tns:GetPerson>
> ] for service: {accesslayer}httpprovider and interface: null
> at
> org.apache.servicemix.jbi.nmr.DefaultBroker.sendExchangePacket(DefaultBroker.java:297)
> at
> org.apache.servicemix.jbi.security.SecuredBroker.sendExchangePacket(SecuredBroker.java:81)
> at
> org.apache.servicemix.jbi.container.JBIContainer.sendExchange(JBIContainer.java:830)
> at
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:395)
> at
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:470)
> at
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:442)
> at
> org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDeliveryChannel.java:95)
> at org.apache.servicemix.drools.model.JbiHelper.route(JbiHelper.java:109)
> at
> org.apache.servicemix.drools.Rule_anything_0.consequence(Rule_anything_0.java:11)
> at
> org.apache.servicemix.drools.Rule_anything_0ConsequenceInvoker.evaluate(Rule_anything_0ConsequenceInvoker.java:19)
> at org.drools.common.DefaultAgenda.fireActivation(Unknown Source)
> at org.drools.common.DefaultAgenda.fireNextItem(Unknown Source)
> at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown Source)
> at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown Source)
> at
> org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:182)
> at
> org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:173)
> at
> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:538)
> at
> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:490)
> at
> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
> at
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:610)
> at
> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:170)
> at
> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:167)
> at
> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
> at java.lang.Thread.run(Thread.java:595)
> </pre>
> <p><small> http://jetty.mortbay.org/ Powered by Jetty:// </small></p><br/>
> <br/>
> <br/>
> <br/>
> <br/>
> <br/>
> <br/>
> <br/>
> <br/>
> <br/>
> <br/>
> <br/>
> <br/>
> <br/>
> <br/>
> <br/>
> <br/>
> <br/>
> <br/>
> <br/>
>
> </body>
> </html>
>
>
> This is my rule now:
> rule "anything"
> when
> eval(true)
> then
> jbi.route( "service:accesslayer:httpprovider" );
> // jbi.fault( "<fault>Id must be > 0</fault>" );
> end
>
> This is my drools endpoint:
> <drools:endpoint service="accesslayer:servicerouter"
> endpoint="servicerouterEndpoint"
> ruleBaseResource="classpath:router.drl"
> namespaceContext="#nsContext" />
>
> These are my http endpoints:
> <http:endpoint service="accesslayer:httplistener"
> endpoint="listenerEndpoint"
> role="consumer"
> locationURI="http://localhost:8192/servicerouter/"
> defaultMep="http://www.w3.org/2004/08/wsdl/in-out"
> targetService="accesslayer:servicerouter"
> targetEndpoint="servicerouterEndpoint"
> soap="true" >
> <http:policies />
> </http:endpoint>
> <http:endpoint service="accesslayer:httpprovider"
> endpoint="providerEndpoint"
> role="provider"
> locationURI="http://localhost:8192/PersonService"
> soap="true" >
> <http:policies />
> </http:endpoint>
>
>
>
> lhein wrote:
>
>> Bence,
>>
>> if it's correct what you wrote then your flow is the following:
>>
>> 1. Somebody calls the webservice "http://localhost:8192/servicerouter/"
>> 2. the soap call will be forwarded to the drools SU
>> 3. Rule "anything" is executed
>> 4. the soap call is routed to "http://localhost:8080/testservice"
>>
>> If you turn on Debug Mode in <smx install folder>/conf/log4j.xml you will
>> see the message flow.
>> It might be a problem that the incoming soap message from /servicerouter/
>> is not compatible to use as soap request for /testservice/ so you need to
>> put a transformation somewhere between I suppose.
>>
>> Regards,
>> Lars
>>
>>
>>
>>
>>
>> Bence wrote:
>>
>>> Hi,
>>>
>>> I am trying to create the easiest drools routing of SOAP messages
>>> example.
>>>
>>> At the moment i have 2 SUs:
>>> service-router-su - from the maven archetype
>>> servicemix-drools-service-unit
>>> service-router-http-su - from the maven archetype
>>> servicemix-http-consumer-service-unit
>>>
>>> I only want to send a SOAP message to the BC, and have it routed back to
>>> another endpoint in the same BC no matter what.
>>> So I have this rule:
>>> rule "anything"
>>> when
>>> eval(true)
>>> then
>>> jbi.route( "service::test:httpprovider" );
>>> end
>>>
>>> in the BC I have 2 endpoints:
>>> <http:endpoint service="test:httplistener"
>>> endpoint="listenerEndpoint"
>>> role="consumer"
>>> locationURI="http://localhost:8192/servicerouter/"
>>> defaultMep="http://www.w3.org/2004/08/wsdl/in-out"
>>> targetService="test:servicerouter"
>>> targetEndpoint="servicerouterEndpoint"
>>> soap="true" />
>>> <http:endpoint service="test:httpprovider"
>>> endpoint="providerEndpoint"
>>> role="provider"
>>> locationURI="http://localhost:8080/testservice />
>>>
>>> The drools endpoint is:
>>> <drools:endpoint service="test:servicerouter"
>>> endpoint="servicerouterEndpoint"
>>> ruleBaseResource="classpath:router.drl"
>>> namespaceContext="#nsContext" />
>>>
>>> Now this is not really working, and there are a few things which I don't
>>> understand.
>>>
>>> Since the SOAP message is routed to a webservice outside of servicemix,
>>> how would the drools SU expose teh WSDL of that service? What kind of
>>> SOAP message do I have to write so that it gets recognized by drools and
>>> routed forward to that other service?
>>>
>>> Thanks in advance
>>>
>>>
>>
>
>
Re: SOAP + drools problem
Posted by Bence <be...@vass.at>.
Hi,
Thanks for the reply. You are correct, that's the flow that I am aiming for.
But I just can't get it right apperently.
The messages just doesn't get routed through, and I can't really make any
sense of the error message. This is what I get in the log when I try with
the client.html from the wsdl-first example (with the personservice as the
target):
HTTP ERROR: 500</h2><pre>org.drools.spi.ConsequenceException:
javax.jbi.messaging.MessagingException: Could not find route for exchange:
InOut[
id: ID:192.168.240.224-1193844d13c-6:22
status: Active
role: provider
service: {accesslayer}httpprovider
in: <?xml version="1.0" encoding="UTF-8"?><tns:GetPerson
xmlns:tns="http://servicemix.apache.org/samples/wsdl-first/types"
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<tns:personId>world</tns:personId>
</tns:GetPerson>
]
The whole thing:
STATUS: 500
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
<title>Error 500 </title>
</head>
<body><h2>HTTP ERROR: 500</h2><pre>org.drools.spi.ConsequenceException:
javax.jbi.messaging.MessagingException: Could not find route for exchange:
InOut[
id: ID:192.168.240.224-1193844d13c-6:22
status: Active
role: provider
service: {accesslayer}httpprovider
in: <?xml version="1.0" encoding="UTF-8"?><tns:GetPerson
xmlns:tns="http://servicemix.apache.org/samples/wsdl-first/types"
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<tns:personId>world</tns:personId>
</tns:GetPerson>
] for service: {accesslayer}httpprovider and interface: null</pre>
<p>RequestURI=/servicerouter/</p><h3>Caused
by:</h3><pre>java.lang.Exception: org.drools.spi.ConsequenceException:
javax.jbi.messaging.MessagingException: Could not find route for exchange:
InOut[
id: ID:192.168.240.224-1193844d13c-6:22
status: Active
role: provider
service: {accesslayer}httpprovider
in: <?xml version="1.0" encoding="UTF-8"?><tns:GetPerson
xmlns:tns="http://servicemix.apache.org/samples/wsdl-first/types"
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<tns:personId>world</tns:personId>
</tns:GetPerson>
] for service: {accesslayer}httpprovider and interface: null
at
org.apache.servicemix.http.processors.ConsumerProcessor.process(ConsumerProcessor.java:194)
at
org.apache.servicemix.http.HttpBridgeServlet.doPost(HttpBridgeServlet.java:71)
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:362)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
at
org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:211)
at
org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
at org.mortbay.jetty.Server.handle(Server.java:313)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:506)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:375)
at
org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:396)
at
org.mortbay.jetty.nio.SelectChannelConnector$RetryContinuation.run(SelectChannelConnector.java:511)
at
org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442)
Caused by: org.drools.spi.ConsequenceException:
javax.jbi.messaging.MessagingException: Could not find route for exchange:
InOut[
id: ID:192.168.240.224-1193844d13c-6:22
status: Active
role: provider
service: {accesslayer}httpprovider
in: <?xml version="1.0" encoding="UTF-8"?><tns:GetPerson
xmlns:tns="http://servicemix.apache.org/samples/wsdl-first/types"
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<tns:personId>world</tns:personId>
</tns:GetPerson>
] for service: {accesslayer}httpprovider and interface: null
at org.drools.common.DefaultAgenda.fireActivation(Unknown Source)
at org.drools.common.DefaultAgenda.fireNextItem(Unknown Source)
at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown Source)
at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown Source)
at
org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:182)
at
org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:173)
at
org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:538)
at
org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:490)
at
org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
at
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:610)
at
org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:170)
at
org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:167)
at
org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
at java.lang.Thread.run(Thread.java:595)
Caused by: javax.jbi.messaging.MessagingException: Could not find route for
exchange: InOut[
id: ID:192.168.240.224-1193844d13c-6:22
status: Active
role: provider
service: {accesslayer}httpprovider
in: <?xml version="1.0" encoding="UTF-8"?><tns:GetPerson
xmlns:tns="http://servicemix.apache.org/samples/wsdl-first/types"
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<tns:personId>world</tns:personId>
</tns:GetPerson>
] for service: {accesslayer}httpprovider and interface: null
at
org.apache.servicemix.jbi.nmr.DefaultBroker.sendExchangePacket(DefaultBroker.java:297)
at
org.apache.servicemix.jbi.security.SecuredBroker.sendExchangePacket(SecuredBroker.java:81)
at
org.apache.servicemix.jbi.container.JBIContainer.sendExchange(JBIContainer.java:830)
at
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:395)
at
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:470)
at
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:442)
at
org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDeliveryChannel.java:95)
at org.apache.servicemix.drools.model.JbiHelper.route(JbiHelper.java:109)
at
org.apache.servicemix.drools.Rule_anything_0.consequence(Rule_anything_0.java:11)
at
org.apache.servicemix.drools.Rule_anything_0ConsequenceInvoker.evaluate(Rule_anything_0ConsequenceInvoker.java:19)
... 16 more
</pre>
<h3>Caused by:</h3><pre>org.drools.spi.ConsequenceException:
javax.jbi.messaging.MessagingException: Could not find route for exchange:
InOut[
id: ID:192.168.240.224-1193844d13c-6:22
status: Active
role: provider
service: {accesslayer}httpprovider
in: <?xml version="1.0" encoding="UTF-8"?><tns:GetPerson
xmlns:tns="http://servicemix.apache.org/samples/wsdl-first/types"
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<tns:personId>world</tns:personId>
</tns:GetPerson>
] for service: {accesslayer}httpprovider and interface: null
at org.drools.common.DefaultAgenda.fireActivation(Unknown Source)
at org.drools.common.DefaultAgenda.fireNextItem(Unknown Source)
at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown Source)
at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown Source)
at
org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:182)
at
org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:173)
at
org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:538)
at
org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:490)
at
org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
at
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:610)
at
org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:170)
at
org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:167)
at
org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
at java.lang.Thread.run(Thread.java:595)
Caused by: javax.jbi.messaging.MessagingException: Could not find route for
exchange: InOut[
id: ID:192.168.240.224-1193844d13c-6:22
status: Active
role: provider
service: {accesslayer}httpprovider
in: <?xml version="1.0" encoding="UTF-8"?><tns:GetPerson
xmlns:tns="http://servicemix.apache.org/samples/wsdl-first/types"
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<tns:personId>world</tns:personId>
</tns:GetPerson>
] for service: {accesslayer}httpprovider and interface: null
at
org.apache.servicemix.jbi.nmr.DefaultBroker.sendExchangePacket(DefaultBroker.java:297)
at
org.apache.servicemix.jbi.security.SecuredBroker.sendExchangePacket(SecuredBroker.java:81)
at
org.apache.servicemix.jbi.container.JBIContainer.sendExchange(JBIContainer.java:830)
at
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:395)
at
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:470)
at
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:442)
at
org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDeliveryChannel.java:95)
at org.apache.servicemix.drools.model.JbiHelper.route(JbiHelper.java:109)
at
org.apache.servicemix.drools.Rule_anything_0.consequence(Rule_anything_0.java:11)
at
org.apache.servicemix.drools.Rule_anything_0ConsequenceInvoker.evaluate(Rule_anything_0ConsequenceInvoker.java:19)
... 16 more
</pre>
<h3>Caused by:</h3><pre>javax.jbi.messaging.MessagingException: Could not
find route for exchange: InOut[
id: ID:192.168.240.224-1193844d13c-6:22
status: Active
role: provider
service: {accesslayer}httpprovider
in: <?xml version="1.0" encoding="UTF-8"?><tns:GetPerson
xmlns:tns="http://servicemix.apache.org/samples/wsdl-first/types"
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<tns:personId>world</tns:personId>
</tns:GetPerson>
] for service: {accesslayer}httpprovider and interface: null
at
org.apache.servicemix.jbi.nmr.DefaultBroker.sendExchangePacket(DefaultBroker.java:297)
at
org.apache.servicemix.jbi.security.SecuredBroker.sendExchangePacket(SecuredBroker.java:81)
at
org.apache.servicemix.jbi.container.JBIContainer.sendExchange(JBIContainer.java:830)
at
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:395)
at
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:470)
at
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:442)
at
org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDeliveryChannel.java:95)
at org.apache.servicemix.drools.model.JbiHelper.route(JbiHelper.java:109)
at
org.apache.servicemix.drools.Rule_anything_0.consequence(Rule_anything_0.java:11)
at
org.apache.servicemix.drools.Rule_anything_0ConsequenceInvoker.evaluate(Rule_anything_0ConsequenceInvoker.java:19)
at org.drools.common.DefaultAgenda.fireActivation(Unknown Source)
at org.drools.common.DefaultAgenda.fireNextItem(Unknown Source)
at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown Source)
at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown Source)
at
org.apache.servicemix.drools.DroolsEndpoint.drools(DroolsEndpoint.java:182)
at
org.apache.servicemix.drools.DroolsEndpoint.process(DroolsEndpoint.java:173)
at
org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:538)
at
org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:490)
at
org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
at
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:610)
at
org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:170)
at
org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:167)
at
org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
at java.lang.Thread.run(Thread.java:595)
</pre>
<p><small> http://jetty.mortbay.org/ Powered by Jetty:// </small></p><br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
</body>
</html>
This is my rule now:
rule "anything"
when
eval(true)
then
jbi.route( "service:accesslayer:httpprovider" );
// jbi.fault( "<fault>Id must be > 0</fault>" );
end
This is my drools endpoint:
<drools:endpoint service="accesslayer:servicerouter"
endpoint="servicerouterEndpoint"
ruleBaseResource="classpath:router.drl"
namespaceContext="#nsContext" />
These are my http endpoints:
<http:endpoint service="accesslayer:httplistener"
endpoint="listenerEndpoint"
role="consumer"
locationURI="http://localhost:8192/servicerouter/"
defaultMep="http://www.w3.org/2004/08/wsdl/in-out"
targetService="accesslayer:servicerouter"
targetEndpoint="servicerouterEndpoint"
soap="true" >
<http:policies />
</http:endpoint>
<http:endpoint service="accesslayer:httpprovider"
endpoint="providerEndpoint"
role="provider"
locationURI="http://localhost:8192/PersonService"
soap="true" >
<http:policies />
</http:endpoint>
lhein wrote:
>
> Bence,
>
> if it's correct what you wrote then your flow is the following:
>
> 1. Somebody calls the webservice "http://localhost:8192/servicerouter/"
> 2. the soap call will be forwarded to the drools SU
> 3. Rule "anything" is executed
> 4. the soap call is routed to "http://localhost:8080/testservice"
>
> If you turn on Debug Mode in <smx install folder>/conf/log4j.xml you will
> see the message flow.
> It might be a problem that the incoming soap message from /servicerouter/
> is not compatible to use as soap request for /testservice/ so you need to
> put a transformation somewhere between I suppose.
>
> Regards,
> Lars
>
>
>
>
>
> Bence wrote:
>>
>> Hi,
>>
>> I am trying to create the easiest drools routing of SOAP messages
>> example.
>>
>> At the moment i have 2 SUs:
>> service-router-su - from the maven archetype
>> servicemix-drools-service-unit
>> service-router-http-su - from the maven archetype
>> servicemix-http-consumer-service-unit
>>
>> I only want to send a SOAP message to the BC, and have it routed back to
>> another endpoint in the same BC no matter what.
>> So I have this rule:
>> rule "anything"
>> when
>> eval(true)
>> then
>> jbi.route( "service::test:httpprovider" );
>> end
>>
>> in the BC I have 2 endpoints:
>> <http:endpoint service="test:httplistener"
>> endpoint="listenerEndpoint"
>> role="consumer"
>> locationURI="http://localhost:8192/servicerouter/"
>> defaultMep="http://www.w3.org/2004/08/wsdl/in-out"
>> targetService="test:servicerouter"
>> targetEndpoint="servicerouterEndpoint"
>> soap="true" />
>> <http:endpoint service="test:httpprovider"
>> endpoint="providerEndpoint"
>> role="provider"
>> locationURI="http://localhost:8080/testservice />
>>
>> The drools endpoint is:
>> <drools:endpoint service="test:servicerouter"
>> endpoint="servicerouterEndpoint"
>> ruleBaseResource="classpath:router.drl"
>> namespaceContext="#nsContext" />
>>
>> Now this is not really working, and there are a few things which I don't
>> understand.
>>
>> Since the SOAP message is routed to a webservice outside of servicemix,
>> how would the drools SU expose teh WSDL of that service? What kind of
>> SOAP message do I have to write so that it gets recognized by drools and
>> routed forward to that other service?
>>
>> Thanks in advance
>>
>
>
--
View this message in context: http://www.nabble.com/SOAP-%2B-drools-problem-tp16537434p16608371.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.
Re: SOAP + drools problem
Posted by Prem Kumar L <pr...@gmail.com>.
Can someone share a working Service Assembly for this scenario ? I am looking
at deploying a similar kind of service. Any help would be much appreciated!
Prem
PS: Please send it to my personal email id.
lhein wrote:
>
> Bence,
>
> if it's correct what you wrote then your flow is the following:
>
> 1. Somebody calls the webservice "http://localhost:8192/servicerouter/"
> 2. the soap call will be forwarded to the drools SU
> 3. Rule "anything" is executed
> 4. the soap call is routed to "http://localhost:8080/testservice"
>
> If you turn on Debug Mode in <smx install folder>/conf/log4j.xml you will
> see the message flow.
> It might be a problem that the incoming soap message from /servicerouter/
> is not compatible to use as soap request for /testservice/ so you need to
> put a transformation somewhere between I suppose.
>
> Regards,
> Lars
>
>
>
>
>
> Bence wrote:
>>
>> Hi,
>>
>> I am trying to create the easiest drools routing of SOAP messages
>> example.
>>
>> At the moment i have 2 SUs:
>> service-router-su - from the maven archetype
>> servicemix-drools-service-unit
>> service-router-http-su - from the maven archetype
>> servicemix-http-consumer-service-unit
>>
>> I only want to send a SOAP message to the BC, and have it routed back to
>> another endpoint in the same BC no matter what.
>> So I have this rule:
>> rule "anything"
>> when
>> eval(true)
>> then
>> jbi.route( "service::test:httpprovider" );
>> end
>>
>> in the BC I have 2 endpoints:
>> <http:endpoint service="test:httplistener"
>> endpoint="listenerEndpoint"
>> role="consumer"
>> locationURI="http://localhost:8192/servicerouter/"
>> defaultMep="http://www.w3.org/2004/08/wsdl/in-out"
>> targetService="test:servicerouter"
>> targetEndpoint="servicerouterEndpoint"
>> soap="true" />
>> <http:endpoint service="test:httpprovider"
>> endpoint="providerEndpoint"
>> role="provider"
>> locationURI="http://localhost:8080/testservice />
>>
>> The drools endpoint is:
>> <drools:endpoint service="test:servicerouter"
>> endpoint="servicerouterEndpoint"
>> ruleBaseResource="classpath:router.drl"
>> namespaceContext="#nsContext" />
>>
>> Now this is not really working, and there are a few things which I don't
>> understand.
>>
>> Since the SOAP message is routed to a webservice outside of servicemix,
>> how would the drools SU expose teh WSDL of that service? What kind of
>> SOAP message do I have to write so that it gets recognized by drools and
>> routed forward to that other service?
>>
>> Thanks in advance
>>
>
>
--
View this message in context: http://www.nabble.com/SOAP-%2B-drools-problem-tp16537434p17203192.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.
Re: SOAP + drools problem
Posted by lhein <lh...@apache.org>.
Bence,
if it's correct what you wrote then your flow is the following:
1. Somebody calls the webservice "http://localhost:8192/servicerouter/"
2. the soap call will be forwarded to the drools SU
3. Rule "anything" is executed
4. the soap call is routed to "http://localhost:8080/testservice"
If you turn on Debug Mode in <smx install folder>/conf/log4j.xml you will
see the message flow.
It might be a problem that the incoming soap message from /servicerouter/ is
not compatible to use as soap request for /testservice/ so you need to put a
transformation somewhere between I suppose.
Regards,
Lars
Bence wrote:
>
> Hi,
>
> I am trying to create the easiest drools routing of SOAP messages example.
>
> At the moment i have 2 SUs:
> service-router-su - from the maven archetype
> servicemix-drools-service-unit
> service-router-http-su - from the maven archetype
> servicemix-http-consumer-service-unit
>
> I only want to send a SOAP message to the BC, and have it routed back to
> another endpoint in the same BC no matter what.
> So I have this rule:
> rule "anything"
> when
> eval(true)
> then
> jbi.route( "service::test:httpprovider" );
> end
>
> in the BC I have 2 endpoints:
> <http:endpoint service="test:httplistener"
> endpoint="listenerEndpoint"
> role="consumer"
> locationURI="http://localhost:8192/servicerouter/"
> defaultMep="http://www.w3.org/2004/08/wsdl/in-out"
> targetService="test:servicerouter"
> targetEndpoint="servicerouterEndpoint"
> soap="true" />
> <http:endpoint service="test:httpprovider"
> endpoint="providerEndpoint"
> role="provider"
> locationURI="http://localhost:8080/testservice />
>
> The drools endpoint is:
> <drools:endpoint service="test:servicerouter"
> endpoint="servicerouterEndpoint"
> ruleBaseResource="classpath:router.drl"
> namespaceContext="#nsContext" />
>
> Now this is not really working, and there are a few things which I don't
> understand.
>
> Since the SOAP message is routed to a webservice outside of servicemix,
> how would the drools SU expose teh WSDL of that service? What kind of SOAP
> message do I have to write so that it gets recognized by drools and routed
> forward to that other service?
>
> Thanks in advance
>
--
View this message in context: http://www.nabble.com/SOAP-%2B-drools-problem-tp16537434p16540960.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.