camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Willem Jiang <willem.ji...@gmail.com>
Subject Re: ProtocolBuf test with Jetty
Date Wed, 08 Dec 2010 05:49:11 GMT
Hi,

You are send the protocolbuf dataformat , not marshalling or 
unmarshalling the objects.

Please check out this unit test[1] of camel protocol buffer as an example.

[1] 
https://svn.apache.org/repos/asf/camel/trunk/components/camel-protobuf/src/test/java/org/apache/camel/dataformat/protobuf/ProtobufMarshalAndUnmarshallTest.java

On 12/6/10 11:04 PM, Paulo Roberto wrote:
> Guys,
>
> I want build a test using protocolbuf inside a Jetty body.
>
> import java.io.InputStream;
>
> import junit.framework.TestCase;
>
> import org.apache.camel.CamelContext;
> import org.apache.camel.Exchange;
> import org.apache.camel.Message;
> import org.apache.camel.Processor;
> import org.apache.camel.ProducerTemplate;
> import org.apache.camel.builder.RouteBuilder;
> import org.apache.camel.dataformat.protobuf.ProtobufDataFormat;
> import org.apache.camel.impl.DefaultCamelContext;
> import org.apache.camel.spi.DataFormat;
>
> import br.com.novtis.proto.examples.ActivationRequest;
> import br.com.novtis.proto.examples.ActivationRequest.PinPad.Builder;
>
> public class ProtoConverterJettyTest extends TestCase {
>
> 	public void testProtoConverter() throws Exception {
> 		CamelContext context = new DefaultCamelContext();
> 		// Default Direct Route
> 		context.addRoutes(new RouteBuilder() {
> 			@Override
> 			public void configure() throws Exception {
> 				from("jetty:http://0.0.0.0:6920/proto").process(new Processor() {
> 					public void process(Exchange exchange) throws Exception {
> 						Message message = exchange.getIn();
> 						DataFormat format 	= (DataFormat)
> message.getBody(org.apache.camel.model.dataformat.ProtobufDataFormat.class);
> 						//ProtobufDataFormat format = (ProtobufDataFormat)
> exchange.getIn().getBody();
> 						//format.toString();
> 					}
> 				}).to("mock:reverse");
> 				
> 				//unmarshal(format).to("mock:reverse");
> 				
> 			}
> 		});
> 		context.start();
>
> 		ProducerTemplate template = context.createProducerTemplate();
>
> 		Builder pinpad = ActivationRequest.PinPad.newBuilder();
> 		pinpad.setManufacturer("Manufator");
> 		pinpad.setVersion("0.1");
> 		pinpad.setSerialNumber("01030303");
> 		pinpad.setModel("modelv2");
> 		
> 		// Encapsule on DataFormat
> 		//ProtobufDataFormat format = new
> ProtobufDataFormat(ActivationRequest.PinPad.getDefaultInstance() );
> 		DataFormat protob = new
> ProtobufDataFormat(pinpad.build().getDefaultInstance() );
> 		
> 		// Make me happy!
> 		template.requestBody("http://127.0.0.1:6920/proto",protob , String.class);
> 	}
> }
>
> I get this error!
> Caused by: org.apache.camel.InvalidPayloadException: No body available
> of type: java.io.InputStream but has value:
> org.apache.camel.dataformat.protobuf.ProtobufDataFormat@ffeef1 of
> type: org.apache.camel.dataformat.protobuf.ProtobufDataFormat on:
> Message: org.apache.camel.dataformat.protobuf.ProtobufDataFormat@ffeef1.
> Caused by: No type converter available to convert from type:
> org.apache.camel.dataformat.protobuf.ProtobufDataFormat to the
> required type: java.io.InputStream with value
> org.apache.camel.dataformat.protobuf.ProtobufDataFormat@ffeef1.
> Exchange[Message:
> org.apache.camel.dataformat.protobuf.ProtobufDataFormat@ffeef1].
> Caused by: [org.apache.camel.NoTypeConversionAvailableException - No
> type converter available to convert from type:
> org.apache.camel.dataformat.protobuf.ProtobufDataFormat to the
> required type: java.io.InputStream with value
> org.apache.camel.dataformat.protobuf.ProtobufDataFormat@ffeef1]
> 	at org.apache.camel.impl.MessageSupport.getMandatoryBody(MessageSupport.java:102)
> 	at org.apache.camel.component.http.HttpProducer.createRequestEntity(HttpProducer.java:326)
> 	at org.apache.camel.component.http.HttpProducer.createMethod(HttpProducer.java:262)
> 	at org.apache.camel.component.http.HttpProducer.process(HttpProducer.java:70)
> 	at org.apache.camel.impl.converter.AsyncProcessorTypeConverter$ProcessorToAsyncProcessorBridge.process(AsyncProcessorTypeConverter.java:50)
> 	at org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:99)
> 	at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:91)
> 	at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:85)
> 	at org.apache.camel.processor.UnitOfWorkProducer.process(UnitOfWorkProducer.java:63)
> 	at org.apache.camel.impl.ProducerCache$1.doInProducer(ProducerCache.java:333)
> 	at org.apache.camel.impl.ProducerCache$1.doInProducer(ProducerCache.java:1)
> 	at org.apache.camel.impl.ProducerCache.doInProducer(ProducerCache.java:208)
> 	at org.apache.camel.impl.ProducerCache.sendExchange(ProducerCache.java:303)
> 	at org.apache.camel.impl.ProducerCache.send(ProducerCache.java:171)
> 	at org.apache.camel.impl.DefaultProducerTemplate.send(DefaultProducerTemplate.java:114)
> 	at org.apache.camel.impl.DefaultProducerTemplate.sendBody(DefaultProducerTemplate.java:118)
> 	... 23 more
> Caused by: org.apache.camel.NoTypeConversionAvailableException: No
> type converter available to convert from type:
> org.apache.camel.dataformat.protobuf.ProtobufDataFormat to the
> required type: java.io.InputStream with value
> org.apache.camel.dataformat.protobuf.ProtobufDataFormat@ffeef1
> 	at org.apache.camel.impl.converter.BaseTypeConverterRegistry.mandatoryConvertTo(BaseTypeConverterRegistry.java:142)
> 	at org.apache.camel.impl.MessageSupport.getMandatoryBody(MessageSupport.java:100)
> 	... 38 more
>
>
> How I can make this test work ? My first target is manipulate the
> ProtocolBuffer inside a processor and not get in a unmarshal or
> marshal stuff.
>
> Thanks.
>


-- 
Willem
----------------------------------
FuseSource
Web: http://www.fusesource.com
Blog:    http://willemjiang.blogspot.com (English)
          http://jnn.javaeye.com (Chinese)
Twitter: willemjiang

Mime
View raw message