You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@servicemix.apache.org by allfonsiva <al...@aim.com> on 2006/09/27 11:03:11 UTC

Route not found for exchange error

hi
 
i am uisng the same http client. the only change is that the  http component
alone making the routing to destination service. so i tried with the
following code.......

This is my http connector code..... 


package ss.servicemix.components.http; 

import javax.jbi.JBIException; 
import javax.jbi.component.ComponentContext; 
import javax.jbi.messaging.InOnly; 
import javax.jbi.messaging.MessageExchange; 
import javax.jbi.messaging.InOut; 
import javax.jbi.messaging.MessagingException; 
import javax.jbi.messaging.NormalizedMessage; 
import javax.jbi.servicedesc.ServiceEndpoint; 
import javax.xml.namespace.QName; 



import org.apache.servicemix.MessageExchangeListener; 
import org.apache.servicemix.components.util.ComponentSupport; 
import org.apache.servicemix.jbi.resolver.EndpointChooser; 
import org.apache.servicemix.jbi.resolver.EndpointResolver; 
import org.apache.servicemix.jbi.resolver.InterfaceNameEndpointResolver; 
import org.apache.servicemix.jbi.resolver.NullEndpointFilter; 
import org.apache.servicemix.jbi.resolver.ServiceAndEndpointNameResolver; 
import org.apache.servicemix.jbi.resolver.ServiceNameEndpointResolver; 
import org.apache.servicemix.jbi.resolver.URIResolver; 
import org.mortbay.jetty.Connector; 
import org.mortbay.jetty.Server; 
import org.mortbay.jetty.bio.SocketConnector; 
import org.mortbay.jetty.handler.ContextHandler; 
import org.mortbay.jetty.servlet.ServletHandler; 
import org.mortbay.jetty.servlet.ServletHolder; 
import org.mortbay.jetty.servlet.ServletMapping; 
import org.mortbay.thread.BoundedThreadPool; 
import org.apache.servicemix.jbi.container.ActivationSpec; 
import org.apache.servicemix.jbi.container.SubscriptionSpec; 
import org.apache.servicemix.jbi.jaxp.SourceTransformer; 
import org.apache.servicemix.jbi.messaging.PojoMarshaler; 

/** 
 * An embedded Servlet engine to implement a HTTP connector 
 * 
 * @version $Revision: 410091 $ 
 */ 
public class HttpConnector extends HttpInOutBinding implements
MessageExchangeListener { 
    private Connector listener = new SocketConnector(); 
    
        /** 
         * The maximum number of threads for the Jetty SocketListener. It's
set 
         * to 256 by default to match the default value in Jetty. 
         */ 
        private int maxThreads = 256; 
        private transient EndpointResolver destinationResolver; 

    private Server server; 
    private String host; 
    private int port; 
    
  
    



    /** 
     * Constructor 
     * 
     * @param host 
     * @param port 
     */ 
    public HttpConnector(String host, int port) { 
        this.host = host; 
        this.port = port; 
    } 

    /*public HttpConnector() { 
    
        
    } 
*/ 
    /** 
     * Constructor 
     * 
     * @param listener 
     */ 
    public HttpConnector(Connector listener) { 
        this.listener = listener; 
    } 

    
    
    /********This i added inside the code***********************/ 
    
    public static final QName SERVICE = 
        new QName("http://servicemix.org/example/", "http"); 
     public static final String ENDPOINT = "http"; 

     private EndpointResolver resolver; 
     private String[] resolverElements; 

     public HttpConnector() 
     { 
          
          
     } 

     public EndpointResolver getResolver() 
     { 
        return resolver; 
     } 

     public void setResolver(EndpointResolver resolver) 
     { 
         System.out.println("xml resolver111111111------->"+resolver); 
        this.resolver = resolver; 
      
     } 
     public void setResolverElements(String[] resolverElements) 
     { 
    this.resolverElements = resolverElements; 
    resolver = new ServiceNameEndpointResolver(new
QName(resolverElements[0],resolverElements[1])); 
  
     } 
      
     public void settingdestination() throws JBIException{ 
          
          ComponentContext context1 = getContext(); 
         try { 
             InOnly exchange =
context1.getDeliveryChannel().createExchangeFactory().createInOnlyExchange(); 
             ServiceEndpoint destination =null;       
              
            
             if (resolver != null) 
             {System.out.println("destination--->"+destination); 
             System.out.println("resolver---->"+resolver); 
         destination = resolver.resolveEndpoint(getContext(), 
                                                       exchange, 
                                                      
NullEndpointFilter.getInstance()); 
                
             } 
             if (destination != null) 
             { 
                // lets explicitly specify the destination - otherwise 
                // we'll let the container choose for us 
                 System.out.println("destination"+destination); 
                exchange.setEndpoint(destination); 
             } 
            
             exchange.setService(new QName("http://servicemix.org/example/",
"receiver")); 
             exchange.setInterfaceName(new
QName("http://servicemix.org/example/", "receiver")); 
         } catch (MessagingException e) { 
             // TODO Auto-generated catch block 
             e.printStackTrace(); 
         } 
        
      
     } 

       
/**************************************************************************/ 
    
    /** 
     * Called when the Component is initialized 
     * 
     * @param cc 
     * @throws JBIException 
     */ 
    public void init(ComponentContext cc) throws JBIException { 
        super.init(cc); 
        //should set all ports etc here - from the naming context I guess ? 
        if (listener == null) { 
            listener = new SocketConnector(); 
        } 
        listener.setHost("localhost"); 
        listener.setPort(8555); 
        server = new Server(); 
        BoundedThreadPool btp = new BoundedThreadPool(); 
        btp.setMaxThreads(getMaxThreads()); 
        server.setThreadPool(btp); 
        
    } 
    
    /** 
     * start the Component 
     * 
     * @throws JBIException 
     */ 
    public void start() throws JBIException { 
        server.setConnectors(new Connector[] { listener }); 
        ContextHandler context = new ContextHandler(); 
        context.setContextPath("/"); 
        ServletHolder holder = new ServletHolder(); 
        holder.setName("jbiServlet"); 
        holder.setClassName(BindingServlet.class.getName()); 
        ServletHandler handler = new ServletHandler(); 
        handler.setServlets(new ServletHolder[] { holder }); 
        System.out.println("inside server"); 
        ServletMapping mapping = new ServletMapping(); 
        mapping.setServletName("jbiServlet"); 
        mapping.setPathSpec("/*"); 
        handler.setServletMappings(new ServletMapping[] { mapping }); 
        context.setHandler(handler); 
        server.setHandler(context); 
        context.setAttribute("binding", this); 
        try { 
            
           settingdestination(); 
            
            server.start();     
          
        } 
        catch (Exception e) { 
            throw new JBIException("Start failed: " + e, e); 
        } 
    } 

    
  
    
    
    /** 
     * stop 
     */ 
    public void stop() throws JBIException { 
        try { 
            if (server != null) { 
                server.stop(); 
            } 
        } 
        catch (Exception e) { 
            throw new JBIException("Stop failed: " + e, e); 
        } 
    } 

    /** 
     * shutdown 
     */ 
    public void shutDown() throws JBIException { 
        super.shutDown(); 
        server = null; 
    } 


    // Properties 
   
//------------------------------------------------------------------------- 
    public int getPort() { 
        return port; 
    } 

    public void setPort(int port) { 
        this.port = port; 
    } 

    public Server getServer() { 
        return server; 
    } 

    public void setServer(Server server) { 
        this.server = server; 
    } 

    public String getHost() { 
        return host; 
    } 

    public void setHost(String host) { 
        this.host = host; 
    } 

        public int getMaxThreads() { 
                return maxThreads; 
        } 

        public void setMaxThreads(int maxThreads) { 
                this.maxThreads = maxThreads; 
        } 
          public void onMessageExchange(MessageExchange exchange)  throws
MessagingException { 
              // As we send in-only MEPS, we will only 
              // receive DONE or ERROR status 
              System.out.println("inside on message exchange"); 
              
             try{ 
          
           SourceTransformer sourceTransformer= new SourceTransformer(); 
           NormalizedMessage message = exchange.getMessage("in");     
          
System.out.println("%%%%%%%%%%%%%%%%%%"+sourceTransformer.toString(message.getContent())); 
          
          
          } 
          catch(Exception e){} 
            done(exchange); 
        
          } 
} 


 when i start the server there is no error when i build my http client im
getting the following error.. 

:INFO:  jetty 6.0.0beta17 
:INFO:  Started SocketConnector @ localhost:8555 
:WARN:  EXCEPTION 
javax.servlet.ServletException: Failed to process JBI request:
javax.jbi.messaging.MessagingException: Could not find route for exchange:
MessageExchange[ 
  id: ID:AD0063-TRNG1-1265-1159335121209-2:1 
  status: Active 
  role: provider 
  in: <?xml version="1.0" encoding="UTF-8"?><ns1:getQuote
xmlns:ns1="urn:xmethods-delayed-quotes"
xmlns:se="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
se:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> 
  <symbol xsi:type="xsd:string">IBM</symbol> 
</ns1:getQuote> 
] for service: null and interface: null 
        at
ss.servicemix.components.http.BindingServlet.doPost(BindingServlet.java:78) 
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:615) 
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:688) 
        at
org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:423) 
        at
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:355) 
        at
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:567) 
        at
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:119) 
        at org.mortbay.jetty.Server.handle(Server.java:248) 
        at
org.mortbay.jetty.HttpConnection.handlerRequest(HttpConnection.java:360) 
        at
org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:628) 
        at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:611) 
        at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:197) 
        at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:288) 
        at
org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:180) 
        at
org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:475)




-- 
View this message in context: http://www.nabble.com/Route-not-found-for-exchange-error-tf2343562.html#a6523146
Sent from the ServiceMix - User mailing list archive at Nabble.com.


Re: Route not found for exchange error

Posted by Guillaume Nodet <gn...@gmail.com>.
They are in the base class of the HttpConnector.
See [1].  You could just modify the exchange after
it has been created.

[1] http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-components/src/main/java/org/apache/servicemix/components/http/HttpInOutBinding.java?revision=426415&view=markup

On 9/27/06, allfonsiva <al...@aim.com> wrote:
>
> hi gnodet,
>
> can you please explain me with a small code snippet.
>
> Where can i found that processInOnly and processInOut method?
>
>
>
>
> gnodet wrote:
> >
> > The destination must be set on the JBI exchange for each
> > exchange sent by the component.  You need to override
> > the processInOut and processInOnly methods,
> > or implements a custom HttpMarshaler.
> >
> > On 9/27/06, allfonsiva <al...@aim.com> wrote:
> >>
> >> hi
> >>
> >> i am uisng the same http client. the only change is that the  http
> >> component
> >> alone making the routing to destination service. so i tried with the
> >> following code.......
> >>
> >> This is my http connector code.....
> >>
> >>
> >> package ss.servicemix.components.http;
> >>
> >> import javax.jbi.JBIException;
> >> import javax.jbi.component.ComponentContext;
> >> import javax.jbi.messaging.InOnly;
> >> import javax.jbi.messaging.MessageExchange;
> >> import javax.jbi.messaging.InOut;
> >> import javax.jbi.messaging.MessagingException;
> >> import javax.jbi.messaging.NormalizedMessage;
> >> import javax.jbi.servicedesc.ServiceEndpoint;
> >> import javax.xml.namespace.QName;
> >>
> >>
> >>
> >> import org.apache.servicemix.MessageExchangeListener;
> >> import org.apache.servicemix.components.util.ComponentSupport;
> >> import org.apache.servicemix.jbi.resolver.EndpointChooser;
> >> import org.apache.servicemix.jbi.resolver.EndpointResolver;
> >> import org.apache.servicemix.jbi.resolver.InterfaceNameEndpointResolver;
> >> import org.apache.servicemix.jbi.resolver.NullEndpointFilter;
> >> import org.apache.servicemix.jbi.resolver.ServiceAndEndpointNameResolver;
> >> import org.apache.servicemix.jbi.resolver.ServiceNameEndpointResolver;
> >> import org.apache.servicemix.jbi.resolver.URIResolver;
> >> import org.mortbay.jetty.Connector;
> >> import org.mortbay.jetty.Server;
> >> import org.mortbay.jetty.bio.SocketConnector;
> >> import org.mortbay.jetty.handler.ContextHandler;
> >> import org.mortbay.jetty.servlet.ServletHandler;
> >> import org.mortbay.jetty.servlet.ServletHolder;
> >> import org.mortbay.jetty.servlet.ServletMapping;
> >> import org.mortbay.thread.BoundedThreadPool;
> >> import org.apache.servicemix.jbi.container.ActivationSpec;
> >> import org.apache.servicemix.jbi.container.SubscriptionSpec;
> >> import org.apache.servicemix.jbi.jaxp.SourceTransformer;
> >> import org.apache.servicemix.jbi.messaging.PojoMarshaler;
> >>
> >> /**
> >>  * An embedded Servlet engine to implement a HTTP connector
> >>  *
> >>  * @version $Revision: 410091 $
> >>  */
> >> public class HttpConnector extends HttpInOutBinding implements
> >> MessageExchangeListener {
> >>     private Connector listener = new SocketConnector();
> >>
> >>         /**
> >>          * The maximum number of threads for the Jetty SocketListener.
> >> It's
> >> set
> >>          * to 256 by default to match the default value in Jetty.
> >>          */
> >>         private int maxThreads = 256;
> >>         private transient EndpointResolver destinationResolver;
> >>
> >>     private Server server;
> >>     private String host;
> >>     private int port;
> >>
> >>
> >>
> >>
> >>
> >>
> >>     /**
> >>      * Constructor
> >>      *
> >>      * @param host
> >>      * @param port
> >>      */
> >>     public HttpConnector(String host, int port) {
> >>         this.host = host;
> >>         this.port = port;
> >>     }
> >>
> >>     /*public HttpConnector() {
> >>
> >>
> >>     }
> >> */
> >>     /**
> >>      * Constructor
> >>      *
> >>      * @param listener
> >>      */
> >>     public HttpConnector(Connector listener) {
> >>         this.listener = listener;
> >>     }
> >>
> >>
> >>
> >>     /********This i added inside the code***********************/
> >>
> >>     public static final QName SERVICE =
> >>         new QName("http://servicemix.org/example/", "http");
> >>      public static final String ENDPOINT = "http";
> >>
> >>      private EndpointResolver resolver;
> >>      private String[] resolverElements;
> >>
> >>      public HttpConnector()
> >>      {
> >>
> >>
> >>      }
> >>
> >>      public EndpointResolver getResolver()
> >>      {
> >>         return resolver;
> >>      }
> >>
> >>      public void setResolver(EndpointResolver resolver)
> >>      {
> >>          System.out.println("xml resolver111111111------->"+resolver);
> >>         this.resolver = resolver;
> >>
> >>      }
> >>      public void setResolverElements(String[] resolverElements)
> >>      {
> >>     this.resolverElements = resolverElements;
> >>     resolver = new ServiceNameEndpointResolver(new
> >> QName(resolverElements[0],resolverElements[1]));
> >>
> >>      }
> >>
> >>      public void settingdestination() throws JBIException{
> >>
> >>           ComponentContext context1 = getContext();
> >>          try {
> >>              InOnly exchange =
> >> context1.getDeliveryChannel().createExchangeFactory().createInOnlyExchange();
> >>              ServiceEndpoint destination =null;
> >>
> >>
> >>              if (resolver != null)
> >>              {System.out.println("destination--->"+destination);
> >>              System.out.println("resolver---->"+resolver);
> >>          destination = resolver.resolveEndpoint(getContext(),
> >>                                                        exchange,
> >>
> >> NullEndpointFilter.getInstance());
> >>
> >>              }
> >>              if (destination != null)
> >>              {
> >>                 // lets explicitly specify the destination - otherwise
> >>                 // we'll let the container choose for us
> >>                  System.out.println("destination"+destination);
> >>                 exchange.setEndpoint(destination);
> >>              }
> >>
> >>              exchange.setService(new
> >> QName("http://servicemix.org/example/",
> >> "receiver"));
> >>              exchange.setInterfaceName(new
> >> QName("http://servicemix.org/example/", "receiver"));
> >>          } catch (MessagingException e) {
> >>              // TODO Auto-generated catch block
> >>              e.printStackTrace();
> >>          }
> >>
> >>
> >>      }
> >>
> >>
> >> /**************************************************************************/
> >>
> >>     /**
> >>      * Called when the Component is initialized
> >>      *
> >>      * @param cc
> >>      * @throws JBIException
> >>      */
> >>     public void init(ComponentContext cc) throws JBIException {
> >>         super.init(cc);
> >>         //should set all ports etc here - from the naming context I guess
> >> ?
> >>         if (listener == null) {
> >>             listener = new SocketConnector();
> >>         }
> >>         listener.setHost("localhost");
> >>         listener.setPort(8555);
> >>         server = new Server();
> >>         BoundedThreadPool btp = new BoundedThreadPool();
> >>         btp.setMaxThreads(getMaxThreads());
> >>         server.setThreadPool(btp);
> >>
> >>     }
> >>
> >>     /**
> >>      * start the Component
> >>      *
> >>      * @throws JBIException
> >>      */
> >>     public void start() throws JBIException {
> >>         server.setConnectors(new Connector[] { listener });
> >>         ContextHandler context = new ContextHandler();
> >>         context.setContextPath("/");
> >>         ServletHolder holder = new ServletHolder();
> >>         holder.setName("jbiServlet");
> >>         holder.setClassName(BindingServlet.class.getName());
> >>         ServletHandler handler = new ServletHandler();
> >>         handler.setServlets(new ServletHolder[] { holder });
> >>         System.out.println("inside server");
> >>         ServletMapping mapping = new ServletMapping();
> >>         mapping.setServletName("jbiServlet");
> >>         mapping.setPathSpec("/*");
> >>         handler.setServletMappings(new ServletMapping[] { mapping });
> >>         context.setHandler(handler);
> >>         server.setHandler(context);
> >>         context.setAttribute("binding", this);
> >>         try {
> >>
> >>            settingdestination();
> >>
> >>             server.start();
> >>
> >>         }
> >>         catch (Exception e) {
> >>             throw new JBIException("Start failed: " + e, e);
> >>         }
> >>     }
> >>
> >>
> >>
> >>
> >>
> >>     /**
> >>      * stop
> >>      */
> >>     public void stop() throws JBIException {
> >>         try {
> >>             if (server != null) {
> >>                 server.stop();
> >>             }
> >>         }
> >>         catch (Exception e) {
> >>             throw new JBIException("Stop failed: " + e, e);
> >>         }
> >>     }
> >>
> >>     /**
> >>      * shutdown
> >>      */
> >>     public void shutDown() throws JBIException {
> >>         super.shutDown();
> >>         server = null;
> >>     }
> >>
> >>
> >>     // Properties
> >>
> >> //-------------------------------------------------------------------------
> >>     public int getPort() {
> >>         return port;
> >>     }
> >>
> >>     public void setPort(int port) {
> >>         this.port = port;
> >>     }
> >>
> >>     public Server getServer() {
> >>         return server;
> >>     }
> >>
> >>     public void setServer(Server server) {
> >>         this.server = server;
> >>     }
> >>
> >>     public String getHost() {
> >>         return host;
> >>     }
> >>
> >>     public void setHost(String host) {
> >>         this.host = host;
> >>     }
> >>
> >>         public int getMaxThreads() {
> >>                 return maxThreads;
> >>         }
> >>
> >>         public void setMaxThreads(int maxThreads) {
> >>                 this.maxThreads = maxThreads;
> >>         }
> >>           public void onMessageExchange(MessageExchange exchange)  throws
> >> MessagingException {
> >>               // As we send in-only MEPS, we will only
> >>               // receive DONE or ERROR status
> >>               System.out.println("inside on message exchange");
> >>
> >>              try{
> >>
> >>            SourceTransformer sourceTransformer= new SourceTransformer();
> >>            NormalizedMessage message = exchange.getMessage("in");
> >>
> >> System.out.println("%%%%%%%%%%%%%%%%%%"+sourceTransformer.toString(message.getContent()));
> >>
> >>
> >>           }
> >>           catch(Exception e){}
> >>             done(exchange);
> >>
> >>           }
> >> }
> >>
> >>
> >>  when i start the server there is no error when i build my http client im
> >> getting the following error..
> >>
> >> :INFO:  jetty 6.0.0beta17
> >> :INFO:  Started SocketConnector @ localhost:8555
> >> :WARN:  EXCEPTION
> >> javax.servlet.ServletException: Failed to process JBI request:
> >> javax.jbi.messaging.MessagingException: Could not find route for
> >> exchange:
> >> MessageExchange[
> >>   id: ID:AD0063-TRNG1-1265-1159335121209-2:1
> >>   status: Active
> >>   role: provider
> >>   in: <?xml version="1.0" encoding="UTF-8"?><ns1:getQuote
> >> xmlns:ns1="urn:xmethods-delayed-quotes"
> >> xmlns:se="http://schemas.xmlsoap.org/soap/envelope/"
> >> xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
> >> se:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
> >>   <symbol xsi:type="xsd:string">IBM</symbol>
> >> </ns1:getQuote>
> >> ] for service: null and interface: null
> >>         at
> >> ss.servicemix.components.http.BindingServlet.doPost(BindingServlet.java:78)
> >>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:615)
> >>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:688)
> >>         at
> >> org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:423)
> >>         at
> >> org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:355)
> >>         at
> >> org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:567)
> >>         at
> >> org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:119)
> >>         at org.mortbay.jetty.Server.handle(Server.java:248)
> >>         at
> >> org.mortbay.jetty.HttpConnection.handlerRequest(HttpConnection.java:360)
> >>         at
> >> org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:628)
> >>         at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:611)
> >>         at
> >> org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:197)
> >>         at
> >> org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:288)
> >>         at
> >> org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:180)
> >>         at
> >> org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:475)
> >>
> >>
> >>
> >>
> >> --
> >> View this message in context:
> >> http://www.nabble.com/Route-not-found-for-exchange-error-tf2343562.html#a6523146
> >> Sent from the ServiceMix - User mailing list archive at Nabble.com.
> >>
> >>
> >
> >
> > --
> > Cheers,
> > Guillaume Nodet
> >
> >
>
> --
> View this message in context: http://www.nabble.com/Route-not-found-for-exchange-error-tf2343562.html#a6523640
> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>
>


-- 
Cheers,
Guillaume Nodet

Re: Route not found for exchange error

Posted by allfonsiva <al...@aim.com>.
hi gnodet,

can you please explain me with a small code snippet.

Where can i found that processInOnly and processInOut method?




gnodet wrote:
> 
> The destination must be set on the JBI exchange for each
> exchange sent by the component.  You need to override
> the processInOut and processInOnly methods,
> or implements a custom HttpMarshaler.
> 
> On 9/27/06, allfonsiva <al...@aim.com> wrote:
>>
>> hi
>>
>> i am uisng the same http client. the only change is that the  http
>> component
>> alone making the routing to destination service. so i tried with the
>> following code.......
>>
>> This is my http connector code.....
>>
>>
>> package ss.servicemix.components.http;
>>
>> import javax.jbi.JBIException;
>> import javax.jbi.component.ComponentContext;
>> import javax.jbi.messaging.InOnly;
>> import javax.jbi.messaging.MessageExchange;
>> import javax.jbi.messaging.InOut;
>> import javax.jbi.messaging.MessagingException;
>> import javax.jbi.messaging.NormalizedMessage;
>> import javax.jbi.servicedesc.ServiceEndpoint;
>> import javax.xml.namespace.QName;
>>
>>
>>
>> import org.apache.servicemix.MessageExchangeListener;
>> import org.apache.servicemix.components.util.ComponentSupport;
>> import org.apache.servicemix.jbi.resolver.EndpointChooser;
>> import org.apache.servicemix.jbi.resolver.EndpointResolver;
>> import org.apache.servicemix.jbi.resolver.InterfaceNameEndpointResolver;
>> import org.apache.servicemix.jbi.resolver.NullEndpointFilter;
>> import org.apache.servicemix.jbi.resolver.ServiceAndEndpointNameResolver;
>> import org.apache.servicemix.jbi.resolver.ServiceNameEndpointResolver;
>> import org.apache.servicemix.jbi.resolver.URIResolver;
>> import org.mortbay.jetty.Connector;
>> import org.mortbay.jetty.Server;
>> import org.mortbay.jetty.bio.SocketConnector;
>> import org.mortbay.jetty.handler.ContextHandler;
>> import org.mortbay.jetty.servlet.ServletHandler;
>> import org.mortbay.jetty.servlet.ServletHolder;
>> import org.mortbay.jetty.servlet.ServletMapping;
>> import org.mortbay.thread.BoundedThreadPool;
>> import org.apache.servicemix.jbi.container.ActivationSpec;
>> import org.apache.servicemix.jbi.container.SubscriptionSpec;
>> import org.apache.servicemix.jbi.jaxp.SourceTransformer;
>> import org.apache.servicemix.jbi.messaging.PojoMarshaler;
>>
>> /**
>>  * An embedded Servlet engine to implement a HTTP connector
>>  *
>>  * @version $Revision: 410091 $
>>  */
>> public class HttpConnector extends HttpInOutBinding implements
>> MessageExchangeListener {
>>     private Connector listener = new SocketConnector();
>>
>>         /**
>>          * The maximum number of threads for the Jetty SocketListener.
>> It's
>> set
>>          * to 256 by default to match the default value in Jetty.
>>          */
>>         private int maxThreads = 256;
>>         private transient EndpointResolver destinationResolver;
>>
>>     private Server server;
>>     private String host;
>>     private int port;
>>
>>
>>
>>
>>
>>
>>     /**
>>      * Constructor
>>      *
>>      * @param host
>>      * @param port
>>      */
>>     public HttpConnector(String host, int port) {
>>         this.host = host;
>>         this.port = port;
>>     }
>>
>>     /*public HttpConnector() {
>>
>>
>>     }
>> */
>>     /**
>>      * Constructor
>>      *
>>      * @param listener
>>      */
>>     public HttpConnector(Connector listener) {
>>         this.listener = listener;
>>     }
>>
>>
>>
>>     /********This i added inside the code***********************/
>>
>>     public static final QName SERVICE =
>>         new QName("http://servicemix.org/example/", "http");
>>      public static final String ENDPOINT = "http";
>>
>>      private EndpointResolver resolver;
>>      private String[] resolverElements;
>>
>>      public HttpConnector()
>>      {
>>
>>
>>      }
>>
>>      public EndpointResolver getResolver()
>>      {
>>         return resolver;
>>      }
>>
>>      public void setResolver(EndpointResolver resolver)
>>      {
>>          System.out.println("xml resolver111111111------->"+resolver);
>>         this.resolver = resolver;
>>
>>      }
>>      public void setResolverElements(String[] resolverElements)
>>      {
>>     this.resolverElements = resolverElements;
>>     resolver = new ServiceNameEndpointResolver(new
>> QName(resolverElements[0],resolverElements[1]));
>>
>>      }
>>
>>      public void settingdestination() throws JBIException{
>>
>>           ComponentContext context1 = getContext();
>>          try {
>>              InOnly exchange =
>> context1.getDeliveryChannel().createExchangeFactory().createInOnlyExchange();
>>              ServiceEndpoint destination =null;
>>
>>
>>              if (resolver != null)
>>              {System.out.println("destination--->"+destination);
>>              System.out.println("resolver---->"+resolver);
>>          destination = resolver.resolveEndpoint(getContext(),
>>                                                        exchange,
>>
>> NullEndpointFilter.getInstance());
>>
>>              }
>>              if (destination != null)
>>              {
>>                 // lets explicitly specify the destination - otherwise
>>                 // we'll let the container choose for us
>>                  System.out.println("destination"+destination);
>>                 exchange.setEndpoint(destination);
>>              }
>>
>>              exchange.setService(new
>> QName("http://servicemix.org/example/",
>> "receiver"));
>>              exchange.setInterfaceName(new
>> QName("http://servicemix.org/example/", "receiver"));
>>          } catch (MessagingException e) {
>>              // TODO Auto-generated catch block
>>              e.printStackTrace();
>>          }
>>
>>
>>      }
>>
>>
>> /**************************************************************************/
>>
>>     /**
>>      * Called when the Component is initialized
>>      *
>>      * @param cc
>>      * @throws JBIException
>>      */
>>     public void init(ComponentContext cc) throws JBIException {
>>         super.init(cc);
>>         //should set all ports etc here - from the naming context I guess
>> ?
>>         if (listener == null) {
>>             listener = new SocketConnector();
>>         }
>>         listener.setHost("localhost");
>>         listener.setPort(8555);
>>         server = new Server();
>>         BoundedThreadPool btp = new BoundedThreadPool();
>>         btp.setMaxThreads(getMaxThreads());
>>         server.setThreadPool(btp);
>>
>>     }
>>
>>     /**
>>      * start the Component
>>      *
>>      * @throws JBIException
>>      */
>>     public void start() throws JBIException {
>>         server.setConnectors(new Connector[] { listener });
>>         ContextHandler context = new ContextHandler();
>>         context.setContextPath("/");
>>         ServletHolder holder = new ServletHolder();
>>         holder.setName("jbiServlet");
>>         holder.setClassName(BindingServlet.class.getName());
>>         ServletHandler handler = new ServletHandler();
>>         handler.setServlets(new ServletHolder[] { holder });
>>         System.out.println("inside server");
>>         ServletMapping mapping = new ServletMapping();
>>         mapping.setServletName("jbiServlet");
>>         mapping.setPathSpec("/*");
>>         handler.setServletMappings(new ServletMapping[] { mapping });
>>         context.setHandler(handler);
>>         server.setHandler(context);
>>         context.setAttribute("binding", this);
>>         try {
>>
>>            settingdestination();
>>
>>             server.start();
>>
>>         }
>>         catch (Exception e) {
>>             throw new JBIException("Start failed: " + e, e);
>>         }
>>     }
>>
>>
>>
>>
>>
>>     /**
>>      * stop
>>      */
>>     public void stop() throws JBIException {
>>         try {
>>             if (server != null) {
>>                 server.stop();
>>             }
>>         }
>>         catch (Exception e) {
>>             throw new JBIException("Stop failed: " + e, e);
>>         }
>>     }
>>
>>     /**
>>      * shutdown
>>      */
>>     public void shutDown() throws JBIException {
>>         super.shutDown();
>>         server = null;
>>     }
>>
>>
>>     // Properties
>>
>> //-------------------------------------------------------------------------
>>     public int getPort() {
>>         return port;
>>     }
>>
>>     public void setPort(int port) {
>>         this.port = port;
>>     }
>>
>>     public Server getServer() {
>>         return server;
>>     }
>>
>>     public void setServer(Server server) {
>>         this.server = server;
>>     }
>>
>>     public String getHost() {
>>         return host;
>>     }
>>
>>     public void setHost(String host) {
>>         this.host = host;
>>     }
>>
>>         public int getMaxThreads() {
>>                 return maxThreads;
>>         }
>>
>>         public void setMaxThreads(int maxThreads) {
>>                 this.maxThreads = maxThreads;
>>         }
>>           public void onMessageExchange(MessageExchange exchange)  throws
>> MessagingException {
>>               // As we send in-only MEPS, we will only
>>               // receive DONE or ERROR status
>>               System.out.println("inside on message exchange");
>>
>>              try{
>>
>>            SourceTransformer sourceTransformer= new SourceTransformer();
>>            NormalizedMessage message = exchange.getMessage("in");
>>
>> System.out.println("%%%%%%%%%%%%%%%%%%"+sourceTransformer.toString(message.getContent()));
>>
>>
>>           }
>>           catch(Exception e){}
>>             done(exchange);
>>
>>           }
>> }
>>
>>
>>  when i start the server there is no error when i build my http client im
>> getting the following error..
>>
>> :INFO:  jetty 6.0.0beta17
>> :INFO:  Started SocketConnector @ localhost:8555
>> :WARN:  EXCEPTION
>> javax.servlet.ServletException: Failed to process JBI request:
>> javax.jbi.messaging.MessagingException: Could not find route for
>> exchange:
>> MessageExchange[
>>   id: ID:AD0063-TRNG1-1265-1159335121209-2:1
>>   status: Active
>>   role: provider
>>   in: <?xml version="1.0" encoding="UTF-8"?><ns1:getQuote
>> xmlns:ns1="urn:xmethods-delayed-quotes"
>> xmlns:se="http://schemas.xmlsoap.org/soap/envelope/"
>> xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
>> se:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
>>   <symbol xsi:type="xsd:string">IBM</symbol>
>> </ns1:getQuote>
>> ] for service: null and interface: null
>>         at
>> ss.servicemix.components.http.BindingServlet.doPost(BindingServlet.java:78)
>>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:615)
>>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:688)
>>         at
>> org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:423)
>>         at
>> org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:355)
>>         at
>> org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:567)
>>         at
>> org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:119)
>>         at org.mortbay.jetty.Server.handle(Server.java:248)
>>         at
>> org.mortbay.jetty.HttpConnection.handlerRequest(HttpConnection.java:360)
>>         at
>> org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:628)
>>         at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:611)
>>         at
>> org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:197)
>>         at
>> org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:288)
>>         at
>> org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:180)
>>         at
>> org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:475)
>>
>>
>>
>>
>> --
>> View this message in context:
>> http://www.nabble.com/Route-not-found-for-exchange-error-tf2343562.html#a6523146
>> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>>
>>
> 
> 
> -- 
> Cheers,
> Guillaume Nodet
> 
> 

-- 
View this message in context: http://www.nabble.com/Route-not-found-for-exchange-error-tf2343562.html#a6523640
Sent from the ServiceMix - User mailing list archive at Nabble.com.


Re: Route not found for exchange error

Posted by Guillaume Nodet <gn...@gmail.com>.
The destination must be set on the JBI exchange for each
exchange sent by the component.  You need to override
the processInOut and processInOnly methods,
or implements a custom HttpMarshaler.

On 9/27/06, allfonsiva <al...@aim.com> wrote:
>
> hi
>
> i am uisng the same http client. the only change is that the  http component
> alone making the routing to destination service. so i tried with the
> following code.......
>
> This is my http connector code.....
>
>
> package ss.servicemix.components.http;
>
> import javax.jbi.JBIException;
> import javax.jbi.component.ComponentContext;
> import javax.jbi.messaging.InOnly;
> import javax.jbi.messaging.MessageExchange;
> import javax.jbi.messaging.InOut;
> import javax.jbi.messaging.MessagingException;
> import javax.jbi.messaging.NormalizedMessage;
> import javax.jbi.servicedesc.ServiceEndpoint;
> import javax.xml.namespace.QName;
>
>
>
> import org.apache.servicemix.MessageExchangeListener;
> import org.apache.servicemix.components.util.ComponentSupport;
> import org.apache.servicemix.jbi.resolver.EndpointChooser;
> import org.apache.servicemix.jbi.resolver.EndpointResolver;
> import org.apache.servicemix.jbi.resolver.InterfaceNameEndpointResolver;
> import org.apache.servicemix.jbi.resolver.NullEndpointFilter;
> import org.apache.servicemix.jbi.resolver.ServiceAndEndpointNameResolver;
> import org.apache.servicemix.jbi.resolver.ServiceNameEndpointResolver;
> import org.apache.servicemix.jbi.resolver.URIResolver;
> import org.mortbay.jetty.Connector;
> import org.mortbay.jetty.Server;
> import org.mortbay.jetty.bio.SocketConnector;
> import org.mortbay.jetty.handler.ContextHandler;
> import org.mortbay.jetty.servlet.ServletHandler;
> import org.mortbay.jetty.servlet.ServletHolder;
> import org.mortbay.jetty.servlet.ServletMapping;
> import org.mortbay.thread.BoundedThreadPool;
> import org.apache.servicemix.jbi.container.ActivationSpec;
> import org.apache.servicemix.jbi.container.SubscriptionSpec;
> import org.apache.servicemix.jbi.jaxp.SourceTransformer;
> import org.apache.servicemix.jbi.messaging.PojoMarshaler;
>
> /**
>  * An embedded Servlet engine to implement a HTTP connector
>  *
>  * @version $Revision: 410091 $
>  */
> public class HttpConnector extends HttpInOutBinding implements
> MessageExchangeListener {
>     private Connector listener = new SocketConnector();
>
>         /**
>          * The maximum number of threads for the Jetty SocketListener. It's
> set
>          * to 256 by default to match the default value in Jetty.
>          */
>         private int maxThreads = 256;
>         private transient EndpointResolver destinationResolver;
>
>     private Server server;
>     private String host;
>     private int port;
>
>
>
>
>
>
>     /**
>      * Constructor
>      *
>      * @param host
>      * @param port
>      */
>     public HttpConnector(String host, int port) {
>         this.host = host;
>         this.port = port;
>     }
>
>     /*public HttpConnector() {
>
>
>     }
> */
>     /**
>      * Constructor
>      *
>      * @param listener
>      */
>     public HttpConnector(Connector listener) {
>         this.listener = listener;
>     }
>
>
>
>     /********This i added inside the code***********************/
>
>     public static final QName SERVICE =
>         new QName("http://servicemix.org/example/", "http");
>      public static final String ENDPOINT = "http";
>
>      private EndpointResolver resolver;
>      private String[] resolverElements;
>
>      public HttpConnector()
>      {
>
>
>      }
>
>      public EndpointResolver getResolver()
>      {
>         return resolver;
>      }
>
>      public void setResolver(EndpointResolver resolver)
>      {
>          System.out.println("xml resolver111111111------->"+resolver);
>         this.resolver = resolver;
>
>      }
>      public void setResolverElements(String[] resolverElements)
>      {
>     this.resolverElements = resolverElements;
>     resolver = new ServiceNameEndpointResolver(new
> QName(resolverElements[0],resolverElements[1]));
>
>      }
>
>      public void settingdestination() throws JBIException{
>
>           ComponentContext context1 = getContext();
>          try {
>              InOnly exchange =
> context1.getDeliveryChannel().createExchangeFactory().createInOnlyExchange();
>              ServiceEndpoint destination =null;
>
>
>              if (resolver != null)
>              {System.out.println("destination--->"+destination);
>              System.out.println("resolver---->"+resolver);
>          destination = resolver.resolveEndpoint(getContext(),
>                                                        exchange,
>
> NullEndpointFilter.getInstance());
>
>              }
>              if (destination != null)
>              {
>                 // lets explicitly specify the destination - otherwise
>                 // we'll let the container choose for us
>                  System.out.println("destination"+destination);
>                 exchange.setEndpoint(destination);
>              }
>
>              exchange.setService(new QName("http://servicemix.org/example/",
> "receiver"));
>              exchange.setInterfaceName(new
> QName("http://servicemix.org/example/", "receiver"));
>          } catch (MessagingException e) {
>              // TODO Auto-generated catch block
>              e.printStackTrace();
>          }
>
>
>      }
>
>
> /**************************************************************************/
>
>     /**
>      * Called when the Component is initialized
>      *
>      * @param cc
>      * @throws JBIException
>      */
>     public void init(ComponentContext cc) throws JBIException {
>         super.init(cc);
>         //should set all ports etc here - from the naming context I guess ?
>         if (listener == null) {
>             listener = new SocketConnector();
>         }
>         listener.setHost("localhost");
>         listener.setPort(8555);
>         server = new Server();
>         BoundedThreadPool btp = new BoundedThreadPool();
>         btp.setMaxThreads(getMaxThreads());
>         server.setThreadPool(btp);
>
>     }
>
>     /**
>      * start the Component
>      *
>      * @throws JBIException
>      */
>     public void start() throws JBIException {
>         server.setConnectors(new Connector[] { listener });
>         ContextHandler context = new ContextHandler();
>         context.setContextPath("/");
>         ServletHolder holder = new ServletHolder();
>         holder.setName("jbiServlet");
>         holder.setClassName(BindingServlet.class.getName());
>         ServletHandler handler = new ServletHandler();
>         handler.setServlets(new ServletHolder[] { holder });
>         System.out.println("inside server");
>         ServletMapping mapping = new ServletMapping();
>         mapping.setServletName("jbiServlet");
>         mapping.setPathSpec("/*");
>         handler.setServletMappings(new ServletMapping[] { mapping });
>         context.setHandler(handler);
>         server.setHandler(context);
>         context.setAttribute("binding", this);
>         try {
>
>            settingdestination();
>
>             server.start();
>
>         }
>         catch (Exception e) {
>             throw new JBIException("Start failed: " + e, e);
>         }
>     }
>
>
>
>
>
>     /**
>      * stop
>      */
>     public void stop() throws JBIException {
>         try {
>             if (server != null) {
>                 server.stop();
>             }
>         }
>         catch (Exception e) {
>             throw new JBIException("Stop failed: " + e, e);
>         }
>     }
>
>     /**
>      * shutdown
>      */
>     public void shutDown() throws JBIException {
>         super.shutDown();
>         server = null;
>     }
>
>
>     // Properties
>
> //-------------------------------------------------------------------------
>     public int getPort() {
>         return port;
>     }
>
>     public void setPort(int port) {
>         this.port = port;
>     }
>
>     public Server getServer() {
>         return server;
>     }
>
>     public void setServer(Server server) {
>         this.server = server;
>     }
>
>     public String getHost() {
>         return host;
>     }
>
>     public void setHost(String host) {
>         this.host = host;
>     }
>
>         public int getMaxThreads() {
>                 return maxThreads;
>         }
>
>         public void setMaxThreads(int maxThreads) {
>                 this.maxThreads = maxThreads;
>         }
>           public void onMessageExchange(MessageExchange exchange)  throws
> MessagingException {
>               // As we send in-only MEPS, we will only
>               // receive DONE or ERROR status
>               System.out.println("inside on message exchange");
>
>              try{
>
>            SourceTransformer sourceTransformer= new SourceTransformer();
>            NormalizedMessage message = exchange.getMessage("in");
>
> System.out.println("%%%%%%%%%%%%%%%%%%"+sourceTransformer.toString(message.getContent()));
>
>
>           }
>           catch(Exception e){}
>             done(exchange);
>
>           }
> }
>
>
>  when i start the server there is no error when i build my http client im
> getting the following error..
>
> :INFO:  jetty 6.0.0beta17
> :INFO:  Started SocketConnector @ localhost:8555
> :WARN:  EXCEPTION
> javax.servlet.ServletException: Failed to process JBI request:
> javax.jbi.messaging.MessagingException: Could not find route for exchange:
> MessageExchange[
>   id: ID:AD0063-TRNG1-1265-1159335121209-2:1
>   status: Active
>   role: provider
>   in: <?xml version="1.0" encoding="UTF-8"?><ns1:getQuote
> xmlns:ns1="urn:xmethods-delayed-quotes"
> xmlns:se="http://schemas.xmlsoap.org/soap/envelope/"
> xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
> se:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
>   <symbol xsi:type="xsd:string">IBM</symbol>
> </ns1:getQuote>
> ] for service: null and interface: null
>         at
> ss.servicemix.components.http.BindingServlet.doPost(BindingServlet.java:78)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:615)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:688)
>         at
> org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:423)
>         at
> org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:355)
>         at
> org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:567)
>         at
> org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:119)
>         at org.mortbay.jetty.Server.handle(Server.java:248)
>         at
> org.mortbay.jetty.HttpConnection.handlerRequest(HttpConnection.java:360)
>         at
> org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:628)
>         at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:611)
>         at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:197)
>         at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:288)
>         at
> org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:180)
>         at
> org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:475)
>
>
>
>
> --
> View this message in context: http://www.nabble.com/Route-not-found-for-exchange-error-tf2343562.html#a6523146
> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>
>


-- 
Cheers,
Guillaume Nodet