Author: rfeng
Date: Thu Oct 19 15:55:40 2006
New Revision: 465919
URL: http://svn.apache.org/viewvc?view=rev&rev=465919
Log:
Fix several issues for TUSCANY-874
Modified:
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingInteceptor.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/xml/DOMXMLStreamReader.java
incubator/tuscany/java/sca/services/databinding/databinding-axiom/src/test/java/org/apache/tuscany/databinding/axiom/OMElementTestCase.java
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXB2Node.java
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBContextHelper.java
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/Node2JAXB.java
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/Reader2JAXB.java
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/XMLStreamReader2JAXB.java
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBTestCase.java
Modified:
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingInteceptor.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingInteceptor.java?view=diff&rev=465919&r1=465918&r2=465919
==============================================================================
---
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingInteceptor.java
(original)
+++
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingInteceptor.java
Thu Oct 19 15:55:40 2006
@@ -73,7 +73,8 @@
// FIXME: How to deal with faults?
if (resultMsg.isFault()) {
// We need to figure out what fault type it is and then transform
it back the source fault type
- throw new InvocationRuntimeException((Throwable) result);
+ // throw new InvocationRuntimeException((Throwable) result);
+ return resultMsg;
} else if (result != null) {
// FIXME: Should we fix the Operation model so that getOutputType
returns DataType<DataType<T>>?
DataType<DataType> targetType =
Modified:
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/xml/DOMXMLStreamReader.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/xml/DOMXMLStreamReader.java?view=diff&rev=465919&r1=465918&r2=465919
==============================================================================
---
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/xml/DOMXMLStreamReader.java
(original)
+++
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/xml/DOMXMLStreamReader.java
Thu Oct 19 15:55:40 2006
@@ -1221,7 +1221,12 @@
Attr attr = (Attr) nodeMap.item(i);
if
(XMLConstants.XMLNS_ATTRIBUTE_NS_URI.equals(attr.getNamespaceURI())) {
// Skip xmlns:xxx
- registerNamespace(attr.getLocalName(), attr.getValue());
+ if (!attr.getName().equals(attr.getLocalName())) {
+ // Skip xmlns="..."
+ registerNamespace(attr.getLocalName(), attr.getValue());
+ } else {
+ registerNamespace(XMLConstants.DEFAULT_NS_PREFIX,
attr.getValue());
+ }
continue;
}
QName attrName = new QName(attr.getNamespaceURI(),
attr.getLocalName());
Modified:
incubator/tuscany/java/sca/services/databinding/databinding-axiom/src/test/java/org/apache/tuscany/databinding/axiom/OMElementTestCase.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/databinding/databinding-axiom/src/test/java/org/apache/tuscany/databinding/axiom/OMElementTestCase.java?view=diff&rev=465919&r1=465918&r2=465919
==============================================================================
---
incubator/tuscany/java/sca/services/databinding/databinding-axiom/src/test/java/org/apache/tuscany/databinding/axiom/OMElementTestCase.java
(original)
+++
incubator/tuscany/java/sca/services/databinding/databinding-axiom/src/test/java/org/apache/tuscany/databinding/axiom/OMElementTestCase.java
Thu Oct 19 15:55:40 2006
@@ -51,6 +51,19 @@
Assert.assertNotNull(xml.indexOf("<ipo:comment>") != -1);
}
+ public final void testStringTransform2() {
+ String str =
+ "<p0:firstName xmlns:xml=\"http://www.w3.org/XML/1998/namespace\"
"
+ + "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "
+ + "xmlns:p0=\"http://helloworld\">Robert</p0:firstName>";
+ String2OMElement t1 = new String2OMElement();
+ OMElement element = t1.transform(str, null);
+ OMElement2String t2 = new OMElement2String();
+ String xml = t2.transform(element, null);
+ Assert.assertNotNull(xml);
+ Assert.assertNotNull(xml.indexOf("<ipo:comment>") != -1);
+ }
+
public final void testStAXTransform() {
String2OMElement t1 = new String2OMElement();
OMElement element = t1.transform(IPO_XML, null);
Modified:
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXB2Node.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXB2Node.java?view=diff&rev=465919&r1=465918&r2=465919
==============================================================================
---
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXB2Node.java
(original)
+++
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXB2Node.java
Thu Oct 19 15:55:40 2006
@@ -37,14 +37,15 @@
public Node transform(Object source, TransformationContext tContext) {
if (source == null) {
return null;
- }
+ }
try {
JAXBContext context =
JAXBContextHelper.createJAXBContext(tContext, true);
Marshaller marshaller = context.createMarshaller();
// FIXME: The default Marshaller doesn't support
// marshaller.getNode()
Document document = DOMHelper.newDocument();
- marshaller.marshal(source, document);
+
marshaller.marshal(JAXBContextHelper.createJAXBElement(tContext.getSourceDataType(),
source),
+ document);
return document;
} catch (Exception e) {
throw new TransformationException(e);
Modified:
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBContextHelper.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBContextHelper.java?view=diff&rev=465919&r1=465918&r2=465919
==============================================================================
---
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBContextHelper.java
(original)
+++
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBContextHelper.java
Thu Oct 19 15:55:40 2006
@@ -21,7 +21,10 @@
import java.lang.reflect.Type;
import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.namespace.QName;
import org.apache.tuscany.spi.databinding.TransformationContext;
import org.apache.tuscany.spi.databinding.TransformationException;
@@ -29,6 +32,7 @@
import org.apache.tuscany.spi.model.Operation;
public class JAXBContextHelper {
+ private static final QName JAXB_ELEMENT = new QName("http://jaxb",
"element");
// TODO: Do we need to set them for source and target?
public static final String JAXB_CLASSES = "jaxb.classes";
@@ -72,6 +76,35 @@
throw new TransformationException("JAXB context is not set for the
transformation.");
}
return context;
+ }
+
+ @SuppressWarnings("unchecked")
+ public static JAXBElement createJAXBElement(DataType dataType, Object
value) {
+ if (value instanceof JAXBElement) {
+ return (JAXBElement)value;
+ } else {
+ Object logical = dataType.getLogical();
+ if (!(logical instanceof QName)) {
+ logical = JAXB_ELEMENT;
+ }
+ return new JAXBElement((QName)logical,
(Class)dataType.getPhysical(), value);
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public static Object createReturnValue(DataType dataType, Object value) {
+ Class<?> cls = (Class)dataType.getPhysical();
+ XmlRootElement element = cls.getAnnotation(XmlRootElement.class);
+ if (element == null) {
+ if (value instanceof JAXBElement) {
+ return ((JAXBElement)value).getValue();
+ } else {
+ return value;
+ }
+ } else {
+ QName root = new QName(element.namespace(), element.name());
+ return new JAXBElement(root, (Class)dataType.getPhysical(), value);
+ }
}
}
Modified:
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/Node2JAXB.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/Node2JAXB.java?view=diff&rev=465919&r1=465918&r2=465919
==============================================================================
---
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/Node2JAXB.java
(original)
+++
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/Node2JAXB.java
Thu Oct 19 15:55:40 2006
@@ -42,7 +42,8 @@
try {
JAXBContext jaxbContext =
JAXBContextHelper.createJAXBContext(context, false);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
- return unmarshaller.unmarshal(source);
+ Object result = unmarshaller.unmarshal(source);
+ return
JAXBContextHelper.createReturnValue(context.getTargetDataType(), result);
} catch (Exception e) {
throw new TransformationException(e);
}
Modified:
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/Reader2JAXB.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/Reader2JAXB.java?view=diff&rev=465919&r1=465918&r2=465919
==============================================================================
---
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/Reader2JAXB.java
(original)
+++
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/Reader2JAXB.java
Thu Oct 19 15:55:40 2006
@@ -43,7 +43,8 @@
JAXBContext jaxbContext =
JAXBContextHelper.createJAXBContext(context, false);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
StreamSource streamSource = new StreamSource(source);
- return unmarshaller.unmarshal(streamSource);
+ Object result = unmarshaller.unmarshal(streamSource);
+ return
JAXBContextHelper.createReturnValue(context.getTargetDataType(), result);
} catch (Exception e) {
throw new TransformationException(e);
}
Modified:
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/XMLStreamReader2JAXB.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/XMLStreamReader2JAXB.java?view=diff&rev=465919&r1=465918&r2=465919
==============================================================================
---
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/XMLStreamReader2JAXB.java
(original)
+++
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/XMLStreamReader2JAXB.java
Thu Oct 19 15:55:40 2006
@@ -19,6 +19,7 @@
package org.apache.tuscany.databinding.jaxb;
import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBElement;
import javax.xml.bind.Unmarshaller;
import javax.xml.stream.XMLStreamReader;
@@ -44,7 +45,8 @@
try {
JAXBContext jaxbContext =
JAXBContextHelper.createJAXBContext(context, false);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
- return unmarshaller.unmarshal(source);
+ Object result = unmarshaller.unmarshal(source);
+ return
JAXBContextHelper.createReturnValue(context.getTargetDataType(), result);
} catch (Exception e) {
throw new TransformationException(e);
}
Modified:
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBTestCase.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBTestCase.java?view=diff&rev=465919&r1=465918&r2=465919
==============================================================================
---
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBTestCase.java
(original)
+++
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBTestCase.java
Thu Oct 19 15:55:40 2006
@@ -24,6 +24,8 @@
import java.io.StringReader;
+import javax.xml.namespace.QName;
+
import junit.framework.Assert;
import junit.framework.TestCase;
@@ -31,6 +33,7 @@
import org.apache.tuscany.spi.model.DataType;
import org.w3c.dom.Node;
+import com.example.ipo.jaxb.ObjectFactory;
import com.example.ipo.jaxb.PurchaseOrderType;
public class JAXBTestCase extends TestCase {
@@ -103,7 +106,8 @@
public void testTransform2() throws Exception {
Reader2JAXB t0 = new Reader2JAXB();
- DataType targetDataType = new DataType<Class>(PurchaseOrderType.class,
null);
+ QName root = new QName("http://www.example.com/IPO", "purchaseOrder");
+ DataType targetDataType = new DataType<QName>(PurchaseOrderType.class,
root);
// targetDataType.setMetadata(JAXBContextHelper.JAXB_CONTEXT_PATH,
contextPath);
TransformationContext tContext =
createMock(TransformationContext.class);
@@ -112,7 +116,7 @@
Object object1 = t0.transform(new StringReader(IPO_XML), tContext);
- DataType sourceDataType = new DataType<Class>(PurchaseOrderType.class,
null);
+ DataType sourceDataType = new DataType<QName>(PurchaseOrderType.class,
root);
// sourceDataType.setMetadata(JAXBContextHelper.JAXB_CONTEXT_PATH,
contextPath);
TransformationContext tContext1 =
createMock(TransformationContext.class);
@@ -129,6 +133,24 @@
Assert.assertNotNull(object2);
}
+
+ public void testTransform3() throws Exception {
+
+ DataType sourceDataType = new DataType<Class>(PurchaseOrderType.class,
null);
+ sourceDataType.setMetadata(JAXBContextHelper.JAXB_CONTEXT_PATH,
contextPath);
+
+ TransformationContext tContext1 =
createMock(TransformationContext.class);
+
expect(tContext1.getSourceDataType()).andReturn(sourceDataType).anyTimes();
+ replay(tContext1);
+
+ JAXB2Node t1 = new JAXB2Node();
+ PurchaseOrderType po = new ObjectFactory().createPurchaseOrderType();
+ Node node = t1.transform(po, tContext1);
+
+ Assert.assertNotNull(node);
+
+ }
+
protected void tearDown() throws Exception {
super.tearDown();
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]