Author: svkrish
Date: Fri Aug 31 00:43:37 2007
New Revision: 571391
URL: http://svn.apache.org/viewvc?rev=571391&view=rev
Log:
enhance CompositeProcessor.write to write property elements, added test, fixed
writing of QName attribute values..... fixed
https://issues.apache.org/jira/browse/TUSCANY-1482
Modified:
incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeProcessor.java
incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/XAttr.java
incubator/tuscany/java/sca/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/WriteAllTestCase.java
incubator/tuscany/java/sca/modules/assembly-xml/src/test/resources/org/apache/tuscany/sca/assembly/xml/TestAllCalculator.composite
Modified:
incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeProcessor.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeProcessor.java?rev=571391&r1=571390&r2=571391&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeProcessor.java
(original)
+++
incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeProcessor.java
Fri Aug 31 00:43:37 2007
@@ -15,7 +15,7 @@
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
- */
+ */
package org.apache.tuscany.sca.assembly.xml;
@@ -25,10 +25,12 @@
import java.util.StringTokenizer;
import javax.xml.namespace.QName;
+import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamWriter;
+import javax.xml.transform.dom.DOMSource;
import org.apache.tuscany.sca.assembly.AssemblyFactory;
import org.apache.tuscany.sca.assembly.Binding;
@@ -59,6 +61,9 @@
import org.apache.tuscany.sca.interfacedef.Operation;
import org.apache.tuscany.sca.policy.PolicyFactory;
import org.apache.tuscany.sca.policy.PolicySetAttachPoint;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
/**
* A composite processor.
@@ -522,11 +527,7 @@
}
for (ComponentProperty property : component.getProperties()) {
- writeStart(writer, PROPERTY, new XAttr(NAME, property.getName()));
- for (Object extension : property.getExtensions()) {
- extensionProcessor.write(extension, writer);
- }
- writeEnd(writer);
+ writeProperty(property, writer);
}
// Write the component implementation
@@ -582,6 +583,93 @@
writeEnd(writer);
}
+ public void writeProperty(Property property, XMLStreamWriter writer)
throws XMLStreamException, ContributionWriteException {
+
+ if ( property instanceof ComponentProperty ) {
+ ComponentProperty componentProperty = (ComponentProperty)property;
+ writeStart(writer, PROPERTY, new XAttr(NAME,
componentProperty.getName()),
+ new XAttr(MUST_SUPPLY,
componentProperty.isMustSupply()),
+ new XAttr(MANY,
componentProperty.isMany()),
+ new XAttr(TYPE,
componentProperty.getXSDType()),
+ new XAttr(ELEMENT,
componentProperty.getXSDElement()),
+ new XAttr(SOURCE,
componentProperty.getSource()),
+ new XAttr(FILE,
componentProperty.getFile()));
+
+ } else {
+ writeStart(writer, PROPERTY, new XAttr(NAME, property.getName()),
+ new XAttr(MUST_SUPPLY, property.isMustSupply()),
+ new XAttr(MANY, property.isMany()),
+ new XAttr(TYPE, property.getXSDType()),
+ new XAttr(ELEMENT, property.getXSDElement()));
+
+ }
+
+ if ( property.getValue() != null && property.getValue() instanceof
Document ) {
+ try {
+ Document document = (Document)property.getValue();
+ NodeList nodeList =
document.getDocumentElement().getChildNodes();
+
+ for ( int count = 0 ; count < nodeList.getLength() ; ++count )
{
+ if ( nodeList.item(count).getNodeType() ==
Node.ELEMENT_NODE ) {
+ XMLStreamReader reader =
XMLInputFactory.newInstance().createXMLStreamReader(new
DOMSource(nodeList.item(count)));
+ writeElement(reader, writer);
+ }
+ }
+ } catch ( Exception e ) {
+ throw new ContributionWriteException(e);
+ }
+ }
+
+ for (Object extension : property.getExtensions()) {
+ extensionProcessor.write(extension, writer);
+ }
+
+ writeEnd(writer);
+ }
+
+ private void writeElement(XMLStreamReader reader, XMLStreamWriter writer)
throws XMLStreamException {
+ while (reader.hasNext()) {
+ switch (reader.next()) {
+ case XMLStreamConstants.START_ELEMENT:
+ QName name = reader.getName();
+ writer.writeStartElement(name.getPrefix(),
name.getLocalPart(), name.getNamespaceURI());
+
+ int count = reader.getNamespaceCount();
+ for (int i = 0; i < count; i++) {
+ String prefix = reader.getNamespacePrefix(i);
+ String ns = reader.getNamespaceURI(i);
+ writer.writeNamespace(prefix, ns);
+ }
+
+ if(!"".equals(name.getNamespaceURI())) {
+ writer.writeNamespace(name.getPrefix(),
name.getNamespaceURI());
+ }
+
+ // add the attributes for this element
+ count = reader.getAttributeCount();
+ for (int i = 0; i < count; i++) {
+ String ns = reader.getAttributeNamespace(i);
+ String prefix = reader.getAttributePrefix(i);
+ String qname = reader.getAttributeLocalName(i);
+ String value = reader.getAttributeValue(i);
+
+ writer.writeAttribute(prefix, ns, qname, value);
+ }
+
+ break;
+ case XMLStreamConstants.CDATA:
+ writer.writeCData(reader.getText());
+ break;
+ case XMLStreamConstants.CHARACTERS:
+ writer.writeCharacters(reader.getText());
+ break;
+ case XMLStreamConstants.END_ELEMENT:
+ writer.writeEndElement();
+ break;
+ }
+ }
+ }
+
public void write(Composite composite, XMLStreamWriter writer) throws
ContributionWriteException {
try {
@@ -604,13 +692,7 @@
}
for (Property property : composite.getProperties()) {
- writeStart(writer, PROPERTY, new XAttr(NAME,
property.getName()));
-
- for (Object extension : property.getExtensions()) {
- extensionProcessor.write(extension, writer);
- }
-
- writeEnd(writer);
+ writeProperty(property, writer);
}
for (Wire wire : composite.getWires()) {
Modified:
incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/XAttr.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/XAttr.java?rev=571391&r1=571390&r2=571391&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/XAttr.java
(original)
+++
incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/XAttr.java
Fri Aug 31 00:43:37 2007
@@ -80,7 +80,7 @@
String prefix = qname.getPrefix();
String uri = qname.getNamespaceURI();
prefix = writer.getPrefix(uri);
- if (prefix != null) {
+ if (prefix != null && prefix.length() > 0) {
// Use the prefix already bound to the given uri
return prefix + ":" + qname.getLocalPart();
Modified:
incubator/tuscany/java/sca/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/WriteAllTestCase.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/WriteAllTestCase.java?rev=571391&r1=571390&r2=571391&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/WriteAllTestCase.java
(original)
+++
incubator/tuscany/java/sca/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/WriteAllTestCase.java
Fri Aug 31 00:43:37 2007
@@ -19,9 +19,11 @@
package org.apache.tuscany.sca.assembly.xml;
+import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
+import javax.xml.namespace.QName;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLOutputFactory;
@@ -81,8 +83,18 @@
public void testReadWriteComposite() throws Exception {
InputStream is =
getClass().getResourceAsStream("TestAllCalculator.composite");
Composite composite = staxProcessor.read(is, Composite.class);
+
+ verifyComposite(composite);
+
ByteArrayOutputStream bos = new ByteArrayOutputStream();
staxProcessor.write(composite, bos);
+ bos.close();
+
+ ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
+ composite = staxProcessor.read(bis, Composite.class);
+
+ verifyComposite(composite);
+
}
public void testReadWireWriteComposite() throws Exception {
@@ -108,6 +120,15 @@
staxProcessor.resolve(constrainingType, resolver);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
staxProcessor.write(constrainingType, bos);
+ }
+
+ private void verifyComposite(Composite composite) {
+ assertEquals(composite.getProperties().get(0).getName(),"prop1");
+ assertEquals(composite.getProperties().get(0).isMany(), true);
+ 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://www.osoa.org/xmlns/sca/1.0", "MyComplexPropertyValue1"));
}
}
Modified:
incubator/tuscany/java/sca/modules/assembly-xml/src/test/resources/org/apache/tuscany/sca/assembly/xml/TestAllCalculator.composite
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly-xml/src/test/resources/org/apache/tuscany/sca/assembly/xml/TestAllCalculator.composite?rev=571391&r1=571390&r2=571391&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/assembly-xml/src/test/resources/org/apache/tuscany/sca/assembly/xml/TestAllCalculator.composite
(original)
+++
incubator/tuscany/java/sca/modules/assembly-xml/src/test/resources/org/apache/tuscany/sca/assembly/xml/TestAllCalculator.composite
Fri Aug 31 00:43:37 2007
@@ -109,9 +109,9 @@
<operation name="multiplyCallback"
policySets="sns:SecureReliablePolicy" requires="cns:confidentiality" />
</binding.ws>
</callback>
- </reference>
+ </reference>
- <property name="prop1" xmlns:foo="http://foo">
+ <property name="prop1" xmlns:foo="http://foo" many="true"
type="foo:MyComplexType">
<ext:testExtension/>
<MyComplexPropertyValue1 xsi:type="foo:MyComplexType" attr="bar">
<foo:a>AValue</foo:a>
@@ -122,5 +122,7 @@
<bar:b xmlns:bar="http://bar">BoringURI</bar:b>
</MyComplexPropertyValue2>
</property>
+
+ <property name="prop2" xmlns:foo="http://foo" mustSupply="true"
element="MyComplexPropertyValue1"/>
</composite>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]