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