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: &lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;tns:GetPerson
> > xmlns:tns="http://servicemix.apache.org/samples/wsdl-first/types"
> > xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"&gt;
> >       &lt;tns:personId&gt;world&lt;/tns:personId&gt;
> >     &lt;/tns:GetPerson&gt;
> > ]
> >
> > 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: &lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;tns:GetPerson
> > xmlns:tns="http://servicemix.apache.org/samples/wsdl-first/types"
> > xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"&gt;
> >       &lt;tns:personId&gt;world&lt;/tns:personId&gt;
> >     &lt;/tns:GetPerson&gt;
> > ] 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: &lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;tns:GetPerson
> xmlns:tns="http://servicemix.apache.org/samples/wsdl-first/types"
> xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"&gt;
>       &lt;tns:personId&gt;world&lt;/tns:personId&gt;
>     &lt;/tns:GetPerson&gt;
> ]
>
> 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: &lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;tns:GetPerson
> xmlns:tns="http://servicemix.apache.org/samples/wsdl-first/types"
> xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"&gt;
>       &lt;tns:personId&gt;world&lt;/tns:personId&gt;
>     &lt;/tns:GetPerson&gt;
> ] 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: &lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;tns:GetPerson
xmlns:tns="http://servicemix.apache.org/samples/wsdl-first/types"
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"&gt;
      &lt;tns:personId&gt;world&lt;/tns:personId&gt;
    &lt;/tns:GetPerson&gt;
]

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: &lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;tns:GetPerson
xmlns:tns="http://servicemix.apache.org/samples/wsdl-first/types"
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"&gt;
      &lt;tns:personId&gt;world&lt;/tns:personId&gt;
    &lt;/tns:GetPerson&gt;
] 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.