2011-01-20 1 views
1

Ci-dessous l'extrait de code pour le Http Camel SU pour la consommation de messages http. Pouvez-vous s'il vous plaît aviser ce qui ne va pas avec le composant SMSProcessor?Paramètres de demande HTTP consommant: Camel SU question

Je reçois: cannot cast apache.servicemix.jbi.jaxp.StringSource to apache.servicemix.jbi.jaxp.StringSource"

Reliure:

<beans xmlns:http="http://servicemix.apache.org/http/1.0" 
     xmlns:b="http://rhinopay.com/bridge"> 

    <http:consumer service="b:http" 
       endpoint="endpoint" 
       targetService="b:pipeline" 
       locationURI="http://localhost:8192/rhinopay/" 
       defaultMep="http://www.w3.org/2004/08/wsdl/in-out" 
       marshaler="#myMarshaler" 
    /> 

    <bean id="myMarshaler" class="marshaller.HttpMarshaller"/> 
</beans> 

HttpMarshaller:

import javax.jbi.messaging.MessageExchange; 
import javax.jbi.messaging.NormalizedMessage; 
import javax.servlet.http.HttpServletRequest; 

import org.apache.servicemix.common.EndpointComponentContext; 
import org.apache.servicemix.http.endpoints.DefaultHttpConsumerMarshaler; 
import org.apache.servicemix.jbi.jaxp.StringSource; 

public class HttpMarshaller extends DefaultHttpConsumerMarshaler { 

    public MessageExchange createExchange(HttpServletRequest request, 
      javax.jbi.component.ComponentContext context) throws Exception { 
     // TODO Auto-generated method stub 

      String mobile = request.getParameter("mobile"); 
      String smsTxt = request.getParameter("smsTxt"); 
     // String message = request.getParameter("msg"); 
      MessageExchange exchange = ((EndpointComponentContext) context).getDeliveryChannel().createExchangeFactory().createExchange(getDefaultMep()); 
      NormalizedMessage in = exchange.createMessage(); 
      String xmlContext = mobile+","+smsTxt; 
      System.out.println("xmlContext---"+xmlContext); 
      in.setContent(new StringSource(xmlContext)); 
      exchange.setMessage(in,"in"); 
      return exchange; 
    } 
} 

SMSProcessor:

import org.apache.camel.Exchange; 
import org.apache.camel.Processor; 
import org.apache.servicemix.jbi.jaxp.StringSource; 

public class SMSProcessor implements Processor { 

    /* 
    * @see org.apache.camel.Processor#process(org.apache.camel.Exchange) 
    */ 
    public void process(Exchange exchange) throws Exception { 
     System.out.println("SMSProcessor"); 
     StringSource text = ((StringSource)exchange.getIn().getBody()); 
     System.out.println("text"+text.getText()); 
    } 
} 

Répondre

1

l'utilisation par le convertisseur de type Camel, au lieu de la diffusion de type Java

StringSource text = exchange.getIn(). getBody (StringSource.class);

Ou si vous voulez le texte brut puis faire

texte String = exchange.getIn() getBody (String.class).

Si vous voulez un DOM

dom Document = exchange.getIn() getBody (Document.class).

Et ainsi de suite

+0

Bonjour, Nous sommes confrontés à un problème très particulier. Je mets un message "3543534543 | pay 543535435 40,00" dans la file d'attente. – Sandeep