1

以下は、httpメッセージを消費するためのHttpCamelSUのコードスニペットです。SMSProcessorコンポーネントの何が問題になっているのか教えていただけますか?

私は得ています:cannot cast apache.servicemix.jbi.jaxp.StringSource to apache.servicemix.jbi.jaxp.StringSource"

バインディング:

<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());
    }
}
4

1 に答える 1

1

Java型キャストの代わりに、Camel型コンバーターを使用します

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

または、プレーンテキストが必要な場合は、

文字列テキスト=exchange.getIn()。getBody(String.class);

DOMが必要な場合

ドキュメントdom=exchange.getIn()。getBody(Document.class);

等々

于 2011-01-21T06:20:00.833 に答える