diff options
Diffstat (limited to 'java/sca')
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 |