summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/BaseAssemblyProcessor.java11
-rw-r--r--java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/BaseBuilderImpl.java34
2 files changed, 37 insertions, 8 deletions
diff --git a/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/BaseAssemblyProcessor.java b/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/BaseAssemblyProcessor.java
index dbce9d2d8d..32ea875e90 100644
--- a/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/BaseAssemblyProcessor.java
+++ b/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/BaseAssemblyProcessor.java
@@ -602,11 +602,14 @@ abstract class BaseAssemblyProcessor extends BaseStAXArtifactProcessor {
case END_ELEMENT:
name = reader.getName();
if (PROPERTY_QNAME.equals(name)) {
+
if (root.getChildNodes().getLength() == 0) {
- // Add the text as an <value>
- Element valueElement = document.createElementNS(SCA11_NS, VALUE);
- root.appendChild(valueElement);
- valueElement.setTextContent(text.toString());
+ // Add an text as an <value>
+ if (isTextForProperty){
+ Element valueElement = document.createElementNS(SCA11_NS, VALUE);
+ root.appendChild(valueElement);
+ valueElement.setTextContent(text.toString());
+ }
}
return document;
}
diff --git a/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/BaseBuilderImpl.java b/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/BaseBuilderImpl.java
index 8aef392153..f0cda80352 100644
--- a/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/BaseBuilderImpl.java
+++ b/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/BaseBuilderImpl.java
@@ -50,6 +50,7 @@ import org.apache.tuscany.sca.monitor.Problem;
import org.apache.tuscany.sca.monitor.Problem.Severity;
import org.apache.tuscany.sca.policy.ExtensionType;
import org.apache.tuscany.sca.policy.PolicySubject;
+import org.w3c.dom.Document;
/**
* Base class for Builder implementations
@@ -409,8 +410,8 @@ public abstract class BaseBuilderImpl implements CompositeBuilder {
if (!componentProperty.isMustSupply())
componentProperty.setMustSupply(property.isMustSupply());
- // Default to the value specified on the property
- if (componentProperty.getValue() == null) {
+ // Default to the value specified on the component type property
+ if (!isPropertyValueSet(componentProperty)) {
componentProperty.setValue(property.getValue());
}
@@ -420,12 +421,12 @@ public abstract class BaseBuilderImpl implements CompositeBuilder {
}
// Check that a value is supplied
- if (componentProperty.getValue() == null && property.isMustSupply()) {
+ if (!isPropertyValueSet(componentProperty) && property.isMustSupply()) {
error(monitor, "PropertyMustSupplyNull", component, component.getName(), componentProperty
.getName());
}
- // Check that a a component property does not override the
+ // Check that a component property does not override the
// many attribute
if (!property.isMany() && componentProperty.isMany()) {
@@ -452,6 +453,31 @@ public abstract class BaseBuilderImpl implements CompositeBuilder {
}
}
}
+
+ /**
+ * Look to see if any value elements have been set into the property
+ * A bit involved as the value is stored as a DOM Document
+ *
+ * @param property the property to be tested
+ * @return true is values are present
+ */
+ private boolean isPropertyValueSet(Property property){
+ Document value = (Document)property.getValue();
+
+ if (value == null){
+ return false;
+ }
+
+ if (value.getFirstChild() == null){
+ return false;
+ }
+
+ if (value.getFirstChild().getChildNodes().getLength() == 0){
+ return false;
+ }
+
+ return true;
+ }
/**
* Reconcile component references with the references defined on the