Support the SCA property value based on the OASIS syntax

git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@751079 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
rfeng 2009-03-06 21:35:43 +00:00
parent 70993983db
commit 093fcdb0a7
13 changed files with 236 additions and 168 deletions

View file

@ -17,25 +17,23 @@
* specific language governing permissions and limitations
* under the License.
-->
<composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200712"
name="ConstructorPropertyInjection">
<composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200903" name="ConstructorPropertyInjection">
<component name="Foo1Component">
<implementation.java
class="org.apache.tuscany.sca.itest.cdi.Foo1" />
<property name="bar">fubar</property>
</component>
<component name="Foo1Component">
<implementation.java class="org.apache.tuscany.sca.itest.cdi.Foo1" />
<property name="bar" value="foobar" />
</component>
<component name="Foo2Component">
<implementation.java
class="org.apache.tuscany.sca.itest.cdi.Foo2" />
<property name="bar">fubar</property>
</component>
<component name="Foo2Component">
<implementation.java class="org.apache.tuscany.sca.itest.cdi.Foo2" />
<property name="bar">fubar</property>
</component>
<component name="Foo3Component">
<implementation.java
class="org.apache.tuscany.sca.itest.cdi.Foo3" />
<property name="bar">fubar</property>
</component>
<component name="Foo3Component">
<implementation.java class="org.apache.tuscany.sca.itest.cdi.Foo3" />
<property name="bar">
<value>fubar</value>
</property>
</component>
</composite>

View file

@ -16,9 +16,9 @@
* specific language governing permissions and limitations
* under the License.
-->
<composite xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200712"
<composite xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200903"
xmlns:foo="http://foo" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xsi:schemaLocation="http://docs.oasis-open.org/ns/opencsa/sca/200712 http://docs.oasis-open.org/ns/opencsa/sca/200712" name="Iteration3Composite"
xsi:schemaLocation="http://docs.oasis-open.org/ns/opencsa/sca/200903 http://docs.oasis-open.org/ns/opencsa/sca/200903" name="Iteration3Composite"
targetNamespace="http://foo" local="true" autowire="false">
<property name="newLocation" type="xsd:anyURI">Raleigh</property>

View file

@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
-->
<composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200712"
<composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200903"
xmlns:foo="http://foo"
targetNamespace="http://foo"
name="OuterPropertyTest"

View file

@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
-->
<composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200712"
<composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200903"
xmlns:foo="http://foo"
xmlns:cust="http://www.example.com/Customer"
xmlns:dbsdo="http://tuscany.apache.org/xmlns/sca/databinding/sdo/1.0"
@ -35,7 +35,7 @@
<property name="number" type="xsd:int">1</property>
<property name="complex" type="foo:MyComplexType" >
<foo:MyComplexValue xsi:type="foo:MyComplexType" >
<value xsi:type="foo:MyComplexType" >
<foo:a>a</foo:a>
<foo:b>b</foo:b>
<foo:c>c</foo:c>
@ -44,11 +44,11 @@
<foo:y>y</foo:y>
<foo:z>z</foo:z>
</foo:x>
</foo:MyComplexValue>
</value>
</property>
<property name="moreComplex" type="foo:MyMoreComplexType">
<MyMoreComplexValue xmlns="">
<value>
<numberSetArray>
<integerNumber>1</integerNumber>
<floatNumber>11</floatNumber>
@ -73,16 +73,16 @@
<floatNumber>158.68</floatNumber>
<doubleNumber>369.04</doubleNumber>
</numberSet>
</MyMoreComplexValue>
</value>
</property>
<property name="complexFoo" type="foo:MyMoreComplexType">
<MyMoreComplexValue xmlns="">
<value>
<stringArray>TestString_3</stringArray>
<stringArray>TestString_4</stringArray>
<intArray>100</intArray>
<intArray>200</intArray>
</MyMoreComplexValue>
</value>
</property>
<component name="ABCDComponent">
@ -118,7 +118,7 @@
<implementation.java class="org.apache.tuscany.sca.itest.PropertyComponentImpl"/>
<property name="complexPropertyOne" source="$moreComplex"></property>
<property name="complexPropertyTwo">
<MyAnotherComplexValue xmlns="">
<value>
<stringArray>TestString_1</stringArray>
<stringArray>TestString_2</stringArray>
<intArray>10</intArray>
@ -143,10 +143,10 @@
<floatNumber>158.68</floatNumber>
<doubleNumber>369.04</doubleNumber>
</numberSet>
</MyAnotherComplexValue>
</value>
</property>
<property name="complexPropertyThree" element="foo:PropertyThreeElement">
<PropertyThreeElement xmlns="">
<PropertyThreeElement xmlns="http://foo">
<stringArray>TestElementString_1</stringArray>
<stringArray>TestElementString_2</stringArray>
<intArray>10</intArray>
@ -174,7 +174,7 @@
</PropertyThreeElement>
</property>
<property name="complexPropertyFour" element="foo:PropertyFourElement" many="true">
<PropertyFourElement xmlns="">
<PropertyFourElement xmlns="http://foo">
<integerNumber>1</integerNumber>
<floatNumber>11.11</floatNumber>
<doubleNumber>111.111</doubleNumber>
@ -184,7 +184,7 @@
<doubleNumber>11111.11111</doubleNumber>
</numberSet>
</PropertyFourElement>
<PropertyFourElement xmlns="">
<PropertyFourElement xmlns="http://foo">
<integerNumber>2</integerNumber>
<floatNumber>22.22</floatNumber>
<doubleNumber>222.222</doubleNumber>
@ -194,7 +194,7 @@
<doubleNumber>22222.22222</doubleNumber>
</numberSet>
</PropertyFourElement>
<PropertyFourElement xmlns="">
<PropertyFourElement xmlns="http://foo">
<integerNumber>3</integerNumber>
<floatNumber>33.33</floatNumber>
<doubleNumber>333.333</doubleNumber>
@ -207,18 +207,18 @@
</property>
<property name="complexPropertyFive" source="$complexFoo"/>
<property name="sdoProperty" type="cust:Customer">
<cust:customer>
<value>
<cust:firstName>Firstly Name</cust:firstName>
<cust:middleName>Middler Name</cust:middleName>
<cust:lastName>Lasting Name</cust:lastName>
</cust:customer>
</value>
</property>
<property name="customerSdo" type="cust:Customer">
<cust:customer>
<value>
<cust:firstName>Sdo Firstly Name</cust:firstName>
<cust:middleName>Sdo Middler Name</cust:middleName>
<cust:lastName>Sdo Lasting Name</cust:lastName>
</cust:customer>
</value>
</property>
<property name="location" type="xsd:string">RTP</property>
<property name="year" type="xsd:string">2006</property>
@ -226,21 +226,21 @@
<property name="integerNumbers" many="true" type="xsd:int">1 2 3 4 5 6 7 8 9 10</property>
<property name="intNumbers" many="true" type="xsd:int">10 9 8 7 6 5 4 3 2 1 0</property>
<property name="sdoArray" many="true" type="cust:Customer">
<cust:customer>
<value>
<cust:firstName>Firstly Name 1</cust:firstName>
<cust:middleName>Middler Name 1</cust:middleName>
<cust:lastName>Lasting Name 1</cust:lastName>
</cust:customer>
<cust:customer>
</value>
<value>
<cust:firstName>Firstly Name 2</cust:firstName>
<cust:middleName>Middler Name 2</cust:middleName>
<cust:lastName>Lasting Name 2</cust:lastName>
</cust:customer>
<cust:customer>
</value>
<value>
<cust:firstName>Firstly Name 3</cust:firstName>
<cust:middleName>Middler Name 3</cust:middleName>
<cust:lastName>Lasting Name 3</cust:lastName>
</cust:customer>
</value>
</property>
<property name="complexJAXBPropertyOne" type="rcp:ReturnCodeProperties">
<MyRCProps xmlns="http://test.sca.jaxb/rcprops">

View file

@ -18,9 +18,9 @@
* under the License.
-->
<composite autowire="false" local="true" name="MySimpleService"
targetNamespace="http://foo" xmlns:foo="http://foo" xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200712"
targetNamespace="http://foo" xmlns:foo="http://foo" xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200903"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://docs.oasis-open.org/ns/opencsa/sca/200712 http://docs.oasis-open.org/ns/opencsa/sca/200712 ">
xsi:schemaLocation="http://docs.oasis-open.org/ns/opencsa/sca/200903 http://docs.oasis-open.org/ns/opencsa/sca/200903 ">
<service name="MyServiceNew1" promote="MyServiceComponentNew/MyService">

View file

@ -21,6 +21,9 @@ package org.apache.tuscany.sca.assembly.xml;
import static javax.xml.XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI;
import static javax.xml.XMLConstants.XMLNS_ATTRIBUTE_NS_URI;
import static javax.xml.stream.XMLStreamConstants.CDATA;
import static javax.xml.stream.XMLStreamConstants.CHARACTERS;
import static javax.xml.stream.XMLStreamConstants.COMMENT;
import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
import static org.apache.tuscany.sca.assembly.xml.Constants.ELEMENT;
@ -30,6 +33,7 @@ import static org.apache.tuscany.sca.assembly.xml.Constants.MUST_SUPPLY;
import static org.apache.tuscany.sca.assembly.xml.Constants.NAME;
import static org.apache.tuscany.sca.assembly.xml.Constants.ONE_N;
import static org.apache.tuscany.sca.assembly.xml.Constants.ONE_ONE;
import static org.apache.tuscany.sca.assembly.xml.Constants.PROPERTY;
import static org.apache.tuscany.sca.assembly.xml.Constants.PROPERTY_QNAME;
import static org.apache.tuscany.sca.assembly.xml.Constants.SCA11_NS;
import static org.apache.tuscany.sca.assembly.xml.Constants.TARGET;
@ -430,6 +434,7 @@ abstract class BaseAssemblyProcessor extends BaseStAXArtifactProcessor {
return null;
}
/*
protected List<Extension> readPropertyValue(XMLStreamReader reader) throws XMLStreamException,
ContributionReadException {
List<Extension> values = new ArrayList<Extension>();
@ -455,7 +460,7 @@ abstract class BaseAssemblyProcessor extends BaseStAXArtifactProcessor {
name = reader.getName();
if (PROPERTY_QNAME.equals(name)) {
isTextForProperty = true;
continue;
break;
}
isTextForProperty = false;
// Read <value>
@ -489,8 +494,14 @@ abstract class BaseAssemblyProcessor extends BaseStAXArtifactProcessor {
}
break;
}
if (reader.hasNext()) {
event = reader.next();
} else {
return values;
}
}
}
*/
/**
* Read a property value into a DOM document.
@ -517,8 +528,13 @@ abstract class BaseAssemblyProcessor extends BaseStAXArtifactProcessor {
throw ce;
}
// root element has no namespace and local name "value"
Element root = document.createElementNS(null, "value");
// Collect the property values as <value> elements under the <property>
Element root = document.createElementNS(SCA11_NS, "sca:" + PROPERTY);
String nameAttr = getString(reader, NAME);
if (nameAttr != null) {
root.setAttributeNS(SCA11_NS, "sca:" + NAME, nameAttr);
}
declareNamespace(root, "sca", SCA11_NS);
if (type != null) {
org.w3c.dom.Attr xsi = document.createAttributeNS(XMLNS_ATTRIBUTE_NS_URI, "xmlns:xsi");
xsi.setValue(W3C_XML_SCHEMA_INSTANCE_NS_URI);
@ -537,7 +553,63 @@ abstract class BaseAssemblyProcessor extends BaseStAXArtifactProcessor {
}
document.appendChild(root);
loadElement(reader, root);
// Start to parse the property
QName name = reader.getName(); // Should be sca:property
// SCA 1.1 supports the @value for simple types
String valueAttr = getString(reader, VALUE);
if (valueAttr != null) {
Element valueElement = document.createElementNS(SCA11_NS, VALUE);
root.appendChild(valueElement);
valueElement.setTextContent(valueAttr);
}
boolean isTextForProperty = true;
StringBuffer text = new StringBuffer();
int event = reader.getEventType();
while (true) {
switch (event) {
case START_ELEMENT:
name = reader.getName();
if (PROPERTY_QNAME.equals(name)) {
isTextForProperty = true;
break;
}
isTextForProperty = false;
// Read <value>
if (VALUE_QNAME.equals(name)) {
loadElement(reader, root);
} else {
// Global elements
loadElement(reader, root);
}
break;
case XMLStreamConstants.CHARACTERS:
case XMLStreamConstants.CDATA:
if (isTextForProperty) {
text.append(reader.getText());
}
break;
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());
}
return document;
}
break;
}
if (reader.hasNext()) {
event = reader.next();
} else {
break;
}
}
return document;
}
@ -607,8 +679,8 @@ abstract class BaseAssemblyProcessor extends BaseStAXArtifactProcessor {
Document document = root.getOwnerDocument();
Node current = root;
while (true) {
switch (reader.next()) {
case XMLStreamConstants.START_ELEMENT:
switch (reader.getEventType()) {
case START_ELEMENT:
QName name = reader.getName();
Element child = createElement(document, name);
@ -644,20 +716,28 @@ abstract class BaseAssemblyProcessor extends BaseStAXArtifactProcessor {
}
break;
case XMLStreamConstants.CDATA:
case CDATA:
current.appendChild(document.createCDATASection(reader.getText()));
break;
case XMLStreamConstants.CHARACTERS:
case CHARACTERS:
current.appendChild(document.createTextNode(reader.getText()));
break;
case XMLStreamConstants.END_ELEMENT:
case COMMENT:
current.appendChild(document.createComment(reader.getText()));
break;
case END_ELEMENT:
// pop the element off the stack
current = current.getParentNode();
// if we are back at the root then we are done
if (current == root) {
return;
}
// pop the element off the stack
current = current.getParentNode();
}
if (reader.hasNext()) {
reader.next();
} else {
return;
}
}
}

View file

@ -152,7 +152,7 @@ public class WriteAllTestCase {
assertEquals(composite.getProperties().get(1).getName(),"prop2");
assertEquals(composite.getProperties().get(1).isMustSupply(), true);
assertEquals(composite.getProperties().get(0).getXSDType(), new QName("http://foo", "MyComplexType"));
assertEquals(composite.getProperties().get(1).getXSDElement(), new QName("http://docs.oasis-open.org/ns/opencsa/sca/200903", "MyComplexPropertyValue1"));
assertEquals(composite.getProperties().get(1).getXSDElement(), new QName("http://foo", "MyComplexPropertyValue1"));
}
}

View file

@ -107,17 +107,21 @@
</reference>
<property name="prop1" xmlns:foo="http://foo" many="true" type="foo:MyComplexType">
<ext:testExtension/>
<MyComplexPropertyValue1 xsi:type="foo:MyComplexType" attr="bar">
<value xsi:type="foo:MyComplexType" attr="bar">
<foo:a>AValue</foo:a>
<bar:b xmlns:bar="http://bar">InterestingURI</bar:b>
</MyComplexPropertyValue1>
<MyComplexPropertyValue2 xsi:type="foo:MyComplexType" attr="zing">
</value>
<value xsi:type="foo:MyComplexType" attr="zing">
<foo:a>BValue</foo:a>
<bar:b xmlns:bar="http://bar">BoringURI</bar:b>
</MyComplexPropertyValue2>
</value>
</property>
<property name="prop2" xmlns:foo="http://foo" mustSupply="true" element="MyComplexPropertyValue1"/>
<property name="prop2" xmlns:foo="http://foo" mustSupply="true" element="foo:MyComplexPropertyValue1">
<foo:MyComplexPropertyValue1>123</foo:MyComplexPropertyValue1>
</property>
<property name="prop3" xmlns:foo="http://foo" mustSupply="true" value="123"/>
<property name="prop4">123</property>
<property name="prop5"><value>123</value></property>
</composite>

View file

@ -112,15 +112,14 @@
</reference>
<property name="prop1" xmlns:foo="http://foo">
<ext:testExtension/>
<MyComplexPropertyValue1 xsi:type="foo:MyComplexType" attr="bar">
<value xsi:type="foo:MyComplexType" attr="bar">
<foo:a>AValue</foo:a>
<bar:b xmlns:bar="http://bar">InterestingURI</bar:b>
</MyComplexPropertyValue1>
<MyComplexPropertyValue2 xsi:type="foo:MyComplexType" attr="zing">
</value>
<value xsi:type="foo:MyComplexType" attr="zing">
<foo:a>BValue</foo:a>
<bar:b xmlns:bar="http://bar">BoringURI</bar:b>
</MyComplexPropertyValue2>
</value>
</property>
</composite>

View file

@ -209,11 +209,12 @@ public class POJOTestCase {
public void testPrimitive() throws Exception {
JAXBContext context = JAXBContext.newInstance(int.class);
StringWriter writer = new StringWriter();
JAXBElement<Object> element = new JAXBElement<Object>(new QName("http://ns1", "bean"), Object.class, 1);
JAXBElement<Integer> element = new JAXBElement<Integer>(new QName("http://ns1", "bean"), Integer.class, 1);
context.createMarshaller().marshal(element, writer);
// System.out.println(writer.toString());
Object result = context.createUnmarshaller().unmarshal(new StringReader(writer.toString()));
StreamSource source = new StreamSource(new StringReader(writer.toString()));
Object result = context.createUnmarshaller().unmarshal(source, int.class);
assertTrue(result instanceof JAXBElement);
JAXBElement e2 = (JAXBElement)result;
assertEquals(1, e2.getValue());

View file

@ -129,6 +129,14 @@
<pattern value="[A-Z]{2}\d\s\d[A-Z]{2}" />
</restriction>
</simpleType>
<element name="note" type="ipo:Note" />
<complexType name="Note" mixed="true">
<sequence>
<any namespace="##any" processContents="lax" minOccurs="0"/>
</sequence>
<anyAttribute/>
</complexType>

View file

@ -57,95 +57,62 @@ public class JavaPropertyValueObjectFactory implements PropertyValueFactory {
public JavaPropertyValueObjectFactory(ExtensionPointRegistry registry) {
this.mediator = registry.getExtensionPoint(UtilityExtensionPoint.class).getUtility(Mediator.class);
}
public JavaPropertyValueObjectFactory(Mediator mediator) {
this.mediator = mediator;
}
/**
* Introspect the property
* @param javaElement
* @return
*/
private DataType<?> introspect(JavaElementImpl javaElement) {
DataType<XMLType> dt =
new DataTypeImpl<XMLType>(null, javaElement.getType(), javaElement.getGenericType(), XMLType.UNKNOWN);
mediator.getDataBindings().introspectType(dt, null);
return dt;
}
public ObjectFactory createValueFactory(Property property, Object propertyValue, JavaElementImpl javaElement) {
isSimpleType = isSimpleType(property);
Document doc = (Document)propertyValue;
List<Node> nodes = getValues(doc);
Class<?> javaType = JavaIntrospectionHelper.getBaseType(javaElement.getType(), javaElement.getGenericType());
Element rootElement = doc.getDocumentElement();
if (property.isMany()) {
if (isSimpleType) {
String value = "";
if (rootElement.getChildNodes().getLength() > 0) {
value = rootElement.getChildNodes().item(0).getTextContent();
}
List<String> values = getSimplePropertyValues(value, javaType);
if ( javaElement.getType().isArray() ) {
return new ArrayObjectFactoryImpl(property, values, isSimpleType, javaType);
} else {
return new ListObjectFactoryImpl(property, values, isSimpleType, javaType);
}
if (javaElement.getType().isArray()) {
return new ArrayObjectFactoryImpl(property, nodes, javaType);
} else {
if ( javaElement.getType().isArray() ) {
return new ArrayObjectFactoryImpl(property, getComplexPropertyValues(doc), isSimpleType, javaType);
} else {
return new ListObjectFactoryImpl(property, getComplexPropertyValues(doc), isSimpleType, javaType);
}
return new ListObjectFactoryImpl(property, nodes, javaType);
}
} else {
if (isSimpleType) {
String value = "";
if (rootElement.getChildNodes().getLength() > 0) {
value = rootElement.getChildNodes().item(0).getTextContent();
}
return new ObjectFactoryImpl(property, value, isSimpleType, javaType);
} else {
List<Node> nodes = getComplexPropertyValues(doc);
Object value = null;
if (!nodes.isEmpty()) {
value = nodes.get(0);
}
return new ObjectFactoryImpl(property, value, isSimpleType, javaType);
Object value = null;
if (!nodes.isEmpty()) {
value = nodes.get(0);
}
return new ObjectFactoryImpl(property, value, javaType);
}
}
public ObjectFactory createValueFactory(Property property, Object propertyValue, Class<?> javaType) {
isSimpleType = isSimpleType(property);
Document doc = (Document)propertyValue;
Element rootElement = doc.getDocumentElement();
List<Node> nodes = getValues(doc);
if (property.isMany()) {
if (isSimpleType) {
String value = "";
if (rootElement.getChildNodes().getLength() > 0) {
value = rootElement.getChildNodes().item(0).getTextContent();
}
List<String> values = getSimplePropertyValues(value, javaType);
return new ListObjectFactoryImpl(property, values, isSimpleType, javaType);
} else {
return new ListObjectFactoryImpl(property, getComplexPropertyValues(doc), isSimpleType, javaType);
}
return new ListObjectFactoryImpl(property, nodes, javaType);
} else {
if (isSimpleType) {
String value = "";
if (rootElement.getChildNodes().getLength() > 0) {
value = rootElement.getChildNodes().item(0).getTextContent();
}
return new ObjectFactoryImpl(property, value, isSimpleType, javaType);
} else {
List<Node> nodes = getComplexPropertyValues(doc);
Object value = null;
if (!nodes.isEmpty()) {
value = nodes.get(0);
}
return new ObjectFactoryImpl(property, value, isSimpleType, javaType);
Object value = null;
if (!nodes.isEmpty()) {
value = nodes.get(0);
}
return new ObjectFactoryImpl(property, value, javaType);
}
}
}
public <B> B createPropertyValue(ComponentProperty property, Class<B> type)
{
public <B> B createPropertyValue(ComponentProperty property, Class<B> type) {
ObjectFactory<B> factory = this.createValueFactory(property, property.getValue(), type);
return factory.getInstance();
}
abstract class ObjectFactoryImplBase implements ObjectFactory {
protected SimpleTypeMapper simpleTypeMapper = new SimpleTypeMapperImpl();
protected Property property;
@ -153,15 +120,14 @@ public class JavaPropertyValueObjectFactory implements PropertyValueFactory {
protected Class<?> javaType;
protected DataType<XMLType> sourceDataType;
protected DataType<?> targetDataType;
boolean isSimpleType;
public ObjectFactoryImplBase(Property property, Object propertyValue, boolean isSimpleType, Class<?> javaType) {
this.isSimpleType = isSimpleType;
public ObjectFactoryImplBase(Property property, Object propertyValue, Class<?> javaType) {
this.property = property;
this.propertyValue = propertyValue;
this.javaType = javaType;
sourceDataType = new DataTypeImpl<XMLType>(DOMDataBinding.NAME, Node.class, new XMLType(null, this.property
.getXSDType()));
sourceDataType =
new DataTypeImpl<XMLType>(DOMDataBinding.NAME, Node.class,
new XMLType(null, this.property.getXSDType()));
TypeInfo typeInfo = null;
if (this.property.getXSDType() != null) {
if (SimpleTypeMapperImpl.isSimpleXSDType(this.property.getXSDType())) {
@ -185,8 +151,8 @@ public class JavaPropertyValueObjectFactory implements PropertyValueFactory {
}
class ObjectFactoryImpl extends ObjectFactoryImplBase {
public ObjectFactoryImpl(Property property, Object propertyValue, boolean isSimpleType, Class<?> javaType) {
super(property, propertyValue, isSimpleType, javaType);
public ObjectFactoryImpl(Property property, Object propertyValue, Class<?> javaType) {
super(property, propertyValue, javaType);
}
public Object getInstance() throws ObjectCreationException {
@ -194,11 +160,13 @@ public class JavaPropertyValueObjectFactory implements PropertyValueFactory {
try {
return simpleTypeMapper.toJavaObject(property.getXSDType(), (String)propertyValue, null);
} catch (NumberFormatException ex) {
throw new ObjectCreationException("Failed to create instance for property "
+ property.getName() + " with value " + propertyValue, ex);
throw new ObjectCreationException("Failed to create instance for property " + property.getName()
+ " with value "
+ propertyValue, ex);
} catch (IllegalArgumentException ex) {
throw new ObjectCreationException("Failed to create instance for property "
+ property.getName() + " with value " + propertyValue, ex);
throw new ObjectCreationException("Failed to create instance for property " + property.getName()
+ " with value "
+ propertyValue, ex);
}
} else {
return mediator.mediate(propertyValue, sourceDataType, targetDataType, null);
@ -208,8 +176,8 @@ public class JavaPropertyValueObjectFactory implements PropertyValueFactory {
}
class ListObjectFactoryImpl extends ObjectFactoryImplBase {
public ListObjectFactoryImpl(Property property, List<?> propertyValues, boolean isSimpleType, Class<?> javaType) {
super(property, propertyValues, isSimpleType, javaType);
public ListObjectFactoryImpl(Property property, List<?> propertyValues, Class<?> javaType) {
super(property, propertyValues, javaType);
}
@SuppressWarnings("unchecked")
@ -220,13 +188,19 @@ public class JavaPropertyValueObjectFactory implements PropertyValueFactory {
try {
values.add(simpleTypeMapper.toJavaObject(property.getXSDType(), aValue, null));
} catch (NumberFormatException ex) {
throw new ObjectCreationException("Failed to create instance for property "
+ property.getName() + " with value " + aValue
+ " from value list of " + propertyValue, ex);
throw new ObjectCreationException("Failed to create instance for property " + property
.getName()
+ " with value "
+ aValue
+ " from value list of "
+ propertyValue, ex);
} catch (IllegalArgumentException ex) {
throw new ObjectCreationException("Failed to create instance for property "
+ property.getName() + " with value " + aValue
+ " from value list of " + propertyValue, ex);
throw new ObjectCreationException("Failed to create instance for property " + property
.getName()
+ " with value "
+ aValue
+ " from value list of "
+ propertyValue, ex);
}
}
return values;
@ -239,10 +213,10 @@ public class JavaPropertyValueObjectFactory implements PropertyValueFactory {
}
}
}
class ArrayObjectFactoryImpl extends ObjectFactoryImplBase {
public ArrayObjectFactoryImpl(Property property, List<?> propertyValues, boolean isSimpleType, Class<?> javaType) {
super(property, propertyValues, isSimpleType, javaType);
public ArrayObjectFactoryImpl(Property property, List<?> propertyValues, Class<?> javaType) {
super(property, propertyValues, javaType);
}
@SuppressWarnings("unchecked")
@ -254,13 +228,19 @@ public class JavaPropertyValueObjectFactory implements PropertyValueFactory {
try {
Array.set(values, count++, simpleTypeMapper.toJavaObject(property.getXSDType(), aValue, null));
} catch (NumberFormatException ex) {
throw new ObjectCreationException("Failed to create instance for property "
+ property.getName() + " with value " + aValue
+ " from value list of " + propertyValue, ex);
throw new ObjectCreationException("Failed to create instance for property " + property
.getName()
+ " with value "
+ aValue
+ " from value list of "
+ propertyValue, ex);
} catch (IllegalArgumentException ex) {
throw new ObjectCreationException("Failed to create instance for property "
+ property.getName() + " with value " + aValue
+ " from value list of " + propertyValue, ex);
throw new ObjectCreationException("Failed to create instance for property " + property
.getName()
+ " with value "
+ aValue
+ " from value list of "
+ propertyValue, ex);
}
}
return values;
@ -275,12 +255,10 @@ public class JavaPropertyValueObjectFactory implements PropertyValueFactory {
}
}
/**
* Utility methods
*/
/**
*
* @param property
@ -301,7 +279,6 @@ public class JavaPropertyValueObjectFactory implements PropertyValueFactory {
return false;
}
/**
* Retrieve list of simple property values
* @param concatenatedValue
@ -331,7 +308,8 @@ public class JavaPropertyValueObjectFactory implements PropertyValueFactory {
* @param document
* @return
*/
private static List<Node> getComplexPropertyValues(Document document) {
private static List<Node> getValues(Document document) {
// The root is the property element
Element rootElement = document.getDocumentElement();
List<Node> propValues = new ArrayList<Node>();
NodeList nodes = rootElement.getChildNodes();

View file

@ -387,7 +387,7 @@ public class NodeImpl implements Node, Client {
// will be extended later with definitions from application contributions
systemContribution = contributionFactory.createContribution();
systemContribution.setURI("http://tuscany.apache.org/SystemContribution");
systemContribution.setLocation("Derived");
systemContribution.setLocation("http://tuscany.apache.org/SystemContribution");
ModelResolver modelResolver = new ExtensibleModelResolver(systemContribution, modelResolvers, modelFactories);
systemContribution.setModelResolver(modelResolver);
systemContribution.setUnresolved(true);