You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2009/12/18 12:53:37 UTC
svn commit: r892230 - in /camel/trunk:
camel-core/src/main/java/org/apache/camel/builder/
camel-core/src/main/java/org/apache/camel/model/dataformat/
components/camel-protobuf/src/main/java/org/apache/camel/dataformat/protobuf/
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());
+ }
}
}
}