Oh, I didn't check those streams.
I will update the code to make sure the stream are closed.

Thanks for pointing that out.  

--  
Willem Jiang

Red Hat, Inc.
FuseSource is now part of Red Hat
Web: http://www.fusesource.com | http://www.redhat.com
Blog: http://willemjiang.blogspot.com (http://willemjiang.blogspot.com/) 
(English)
          http://jnn.iteye.com (http://jnn.javaeye.com/) (Chinese)
Twitter: willemjiang  
Weibo: 姜宁willem





On Wednesday, December 5, 2012 at 5:04 PM, Claus Ibsen wrote:

> Hi Willem
>  
> Is the input stream closed? That is needed as otherwise the file is
> locked. Especially on windows there is this problem.
> And it needs to be done in a try .. finally, so its always closed,
> even if there is some exception.
>  
>  
> On Wed, Dec 5, 2012 at 9:59 AM, <ningji...@apache.org 
> (mailto:ningji...@apache.org)> wrote:
> > Author: ningjiang
> > Date: Wed Dec 5 08:59:12 2012
> > New Revision: 1417318
> >  
> > URL: http://svn.apache.org/viewvc?rev=1417318&view=rev
> > Log:
> > CAMEL-5847 Added a converter for files or inputstreams with thanks to Arnout
> >  
> > Modified:
> > camel/trunk/components/camel-mongodb/src/main/java/org/apache/camel/component/mongodb/converters/MongoDbBasicConverters.java
> > camel/trunk/components/camel-mongodb/src/test/java/org/apache/camel/component/mongodb/MongoDbConversionsTest.java
> >  
> > Modified: 
> > camel/trunk/components/camel-mongodb/src/main/java/org/apache/camel/component/mongodb/converters/MongoDbBasicConverters.java
> > URL: 
> > http://svn.apache.org/viewvc/camel/trunk/components/camel-mongodb/src/main/java/org/apache/camel/component/mongodb/converters/MongoDbBasicConverters.java?rev=1417318&r1=1417317&r2=1417318&view=diff
> > ==============================================================================
> > --- 
> > camel/trunk/components/camel-mongodb/src/main/java/org/apache/camel/component/mongodb/converters/MongoDbBasicConverters.java
> >  (original)
> > +++ 
> > camel/trunk/components/camel-mongodb/src/main/java/org/apache/camel/component/mongodb/converters/MongoDbBasicConverters.java
> >  Wed Dec 5 08:59:12 2012
> > @@ -16,13 +16,22 @@
> > */
> > package org.apache.camel.component.mongodb.converters;
> >  
> > +import java.io.File;
> > +import java.io.FileInputStream;
> > +import java.io.FileNotFoundException;
> > +import java.io.InputStream;
> > import java.util.Map;
> >  
> > import com.mongodb.BasicDBObject;
> > import com.mongodb.DBObject;
> > import com.mongodb.util.JSON;
> > +import com.mongodb.util.JSONCallback;
> >  
> > import org.apache.camel.Converter;
> > +import org.apache.camel.Exchange;
> > +import org.apache.camel.converter.IOConverter;
> > +import org.bson.BSONCallback;
> > +import org.bson.BasicBSONDecoder;
> > import org.codehaus.jackson.map.ObjectMapper;
> > import org.slf4j.Logger;
> > import org.slf4j.LoggerFactory;
> > @@ -61,6 +70,47 @@ public final class MongoDbBasicConverter
> > }
> >  
> > @Converter
> > + public static DBObject fromFileToDBObject(File f, Exchange exchange) 
> > throws FileNotFoundException {
> > + return fromInputStreamToDBObject(new FileInputStream(f), exchange);
> > + }
> > +
> > + @Converter
> > + public static DBObject fromInputStreamToDBObject(InputStream is, Exchange 
> > exchange) {
> > + DBObject answer = null;
> > + try {
> > + byte[] input = IOConverter.toBytes(is);
> > +
> > + if (isBson(input)) {
> > + BSONCallback callback = new JSONCallback();
> > + new BasicBSONDecoder().decode(input, callback);
> > + answer = (DBObject) callback.get();
> > + } else {
> > + answer = (DBObject) JSON.parse(IOConverter.toString(input, exchange));
> > + }
> > + } catch (Exception e) {
> > + LOG.warn("String -> DBObject conversion selected, but the following 
> > exception occurred. Returning null.", e);
> > + }
> > +
> > + return answer;
> > + }
> > +
> > + /**
> > + * If the input starts with any number of whitespace characters and then a 
> > '{' character, we
> > + * assume it is JSON rather than BSON. There are probably no useful BSON 
> > blobs that fit this pattern
> > + */
> > + private static boolean isBson(byte[] input) {
> > + int i = 0;
> > + while (i < input.length) {
> > + if (input[i] == '{') {
> > + return false;
> > + } else if (!Character.isWhitespace(input[i])) {
> > + return true;
> > + }
> > + }
> > + return true;
> > + }
> > +
> > + @Converter
> > public static DBObject fromAnyObjectToDBObject(Object value) {
> > BasicDBObject answer;
> > try {
> >  
> > Modified: 
> > camel/trunk/components/camel-mongodb/src/test/java/org/apache/camel/component/mongodb/MongoDbConversionsTest.java
> > URL: 
> > http://svn.apache.org/viewvc/camel/trunk/components/camel-mongodb/src/test/java/org/apache/camel/component/mongodb/MongoDbConversionsTest.java?rev=1417318&r1=1417317&r2=1417318&view=diff
> > ==============================================================================
> > --- 
> > camel/trunk/components/camel-mongodb/src/test/java/org/apache/camel/component/mongodb/MongoDbConversionsTest.java
> >  (original)
> > +++ 
> > camel/trunk/components/camel-mongodb/src/test/java/org/apache/camel/component/mongodb/MongoDbConversionsTest.java
> >  Wed Dec 5 08:59:12 2012
> > @@ -16,14 +16,18 @@
> > */
> > package org.apache.camel.component.mongodb;
> >  
> > +import java.io.ByteArrayInputStream;
> > import java.util.HashMap;
> > import java.util.Map;
> >  
> > +import com.mongodb.BasicDBObject;
> > import com.mongodb.DBObject;
> > +import com.mongodb.DefaultDBEncoder;
> > import com.mongodb.WriteResult;
> >  
> > import org.apache.camel.builder.RouteBuilder;
> > -
> > +import org.apache.camel.converter.IOConverter;
> > +import org.bson.BSONObject;
> > import org.junit.Test;
> >  
> > public class MongoDbConversionsTest extends AbstractMongoDbTest {
> > @@ -68,6 +72,30 @@ public class MongoDbConversionsTest exte
> > assertNotNull("No record with 'testInsertJsonString' _id", b);
> > }
> >  
> > + @Test
> > + public void testInsertJsonInputStream() throws Exception {
> > + assertEquals(0, testCollection.count());
> > + Object result = template.requestBody("direct:insertJsonString",
> > + IOConverter.toInputStream("{\"fruits\": [\"apple\", \"banana\"], 
> > \"veggie\": \"broccoli\", \"_id\": \"testInsertJsonString\"}\n", null));
> > + assertTrue(result instanceof WriteResult);
> > + DBObject b = testCollection.findOne("testInsertJsonString");
> > + assertNotNull("No record with 'testInsertJsonString' _id", b);
> > + }
> > +
> > + @Test
> > + public void testInsertBsonInputStream() {
> > + assertEquals(0, testCollection.count());
> > +
> > + DefaultDBEncoder encoder = new DefaultDBEncoder();
> > + BSONObject bsonObject = new BasicDBObject();
> > + bsonObject.put("_id", "testInsertBsonString");
> > +
> > + Object result = template.requestBody("direct:insertJsonString", new 
> > ByteArrayInputStream(encoder.encode(bsonObject)));
> > + assertTrue(result instanceof WriteResult);
> > + DBObject b = testCollection.findOne("testInsertBsonString");
> > + assertNotNull("No record with 'testInsertBsonString' _id", b);
> > + }
> > +
> > @Override
> > protected RouteBuilder createRouteBuilder() throws Exception {
> > return new RouteBuilder() {
>  
>  
>  
>  
>  
> --  
> Claus Ibsen
> -----------------
> Red Hat, Inc.
> FuseSource is now part of Red Hat
> Email: cib...@redhat.com (mailto:cib...@redhat.com)
> Web: http://fusesource.com
> Twitter: davsclaus
> Blog: http://davsclaus.com
> Author of Camel in Action: http://www.manning.com/ibsen



Reply via email to