Author: ningjiang Date: Fri Dec 18 11:53:36 2009 New Revision: 892230 URL: http://svn.apache.org/viewvc?rev=892230&view=rev Log: CAMEL-2148 improved the code with the suggestion of Claus
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DataFormatClause.java camel/trunk/camel-core/src/main/java/org/apache/camel/model/dataformat/ProtobufDataFormat.java camel/trunk/components/camel-protobuf/src/main/java/org/apache/camel/dataformat/protobuf/ProtobufDataFormat.java Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DataFormatClause.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DataFormatClause.java?rev=892230&r1=892229&r2=892230&view=diff ============================================================================== --- camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DataFormatClause.java (original) +++ camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DataFormatClause.java Fri Dec 18 11:53:36 2009 @@ -187,6 +187,12 @@ return dataFormat(new ProtobufDataFormat()); } + public T protobuf(Object defaultInstance) { + ProtobufDataFormat dataFormat = new ProtobufDataFormat(); + dataFormat.setDefaultInstance(defaultInstance); + return dataFormat(dataFormat); + } + public T protobuf(String instanceClassName) { return dataFormat(new ProtobufDataFormat(instanceClassName)); } Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/model/dataformat/ProtobufDataFormat.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/dataformat/ProtobufDataFormat.java?rev=892230&r1=892229&r2=892230&view=diff ============================================================================== --- camel/trunk/camel-core/src/main/java/org/apache/camel/model/dataformat/ProtobufDataFormat.java (original) +++ camel/trunk/camel-core/src/main/java/org/apache/camel/model/dataformat/ProtobufDataFormat.java Fri Dec 18 11:53:36 2009 @@ -38,6 +38,8 @@ @XmlAttribute(required = false) private String instanceClass; + private Object defaultInstance; + public ProtobufDataFormat() { super("protobuf"); } @@ -51,11 +53,18 @@ this.instanceClass = instanceClass; } + public void setDefaultInstance(Object instance) { + this.defaultInstance = instance; + } + @Override protected void configureDataFormat(DataFormat dataFormat) { if (this.instanceClass != null) { setProperty(dataFormat, "instanceClass", instanceClass); } + if (this.defaultInstance != null) { + setProperty(dataFormat, "defaultInstance", defaultInstance); + } } } Modified: camel/trunk/components/camel-protobuf/src/main/java/org/apache/camel/dataformat/protobuf/ProtobufDataFormat.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-protobuf/src/main/java/org/apache/camel/dataformat/protobuf/ProtobufDataFormat.java?rev=892230&r1=892229&r2=892230&view=diff ============================================================================== --- camel/trunk/components/camel-protobuf/src/main/java/org/apache/camel/dataformat/protobuf/ProtobufDataFormat.java (original) +++ camel/trunk/components/camel-protobuf/src/main/java/org/apache/camel/dataformat/protobuf/ProtobufDataFormat.java Fri Dec 18 11:53:36 2009 @@ -53,6 +53,14 @@ this.defaultInstance = instance; } + public void setDefaultInstance(Object instance) { + if (instance instanceof Message) { + this.defaultInstance = (Message) instance; + } else { + throw new IllegalArgumentException("The instance should be subClass of com.google.protobuf.Message"); + } + } + public void setInstanceClass(String className) throws Exception { ObjectHelper.notNull(className, "ProtobufDataFormat instaceClass"); instanceClassName = className; @@ -94,8 +102,10 @@ if (instanceClassName == null) { throw new CamelException("There is not defaultInstance for protobuf unmarshaling"); } else { - if (!setDefaultInstanceHasBeenCalled.getAndSet(true)) { - defaultInstance = loadDefaultInstance(instanceClassName, exchange.getContext()); + synchronized (this) { + if (!setDefaultInstanceHasBeenCalled.getAndSet(true)) { + defaultInstance = loadDefaultInstance(instanceClassName, exchange.getContext()); + } } } }