You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by rf...@apache.org on 2007/02/22 22:57:48 UTC
svn commit: r510671 - in
/incubator/tuscany/branches/sca-java-integration/sca:
extensions/axis2/databinding/src/main/java/org/apache/tuscany/databinding/axiom/
extensions/axis2/samples/helloworldwsclient/
kernel/api/src/main/java/org/apache/tuscany/api...
Author: rfeng
Date: Thu Feb 22 13:57:46 2007
New Revision: 510671
URL: http://svn.apache.org/viewvc?view=rev&rev=510671
Log:
[sca-integration-branch] Improvements over databindings, adding more heuristic introspections
Added:
incubator/tuscany/branches/sca-java-integration/sca/kernel/api/src/main/java/org/apache/tuscany/api/annotation/WrapperStyle.java (with props)
incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandlerTestCase.java (with props)
Modified:
incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/databinding/src/main/java/org/apache/tuscany/databinding/axiom/OMElementWrapperHandler.java
incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/samples/helloworldwsclient/pom.xml
incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessor.java
incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImpl.java
incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Input2InputTransformer.java
incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Output2OutputTransformer.java
incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/xml/DOMWrapperHandler.java
incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/property/PropertyObjectFactoryImpl.java
incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessorTestCase.java
incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImplTestCase.java
incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBinding.java
incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBindingRegistry.java
incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/WrapperHandler.java
incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtension.java
incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/DataType.java
incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtensionTestCase.java
incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBContextHelper.java
incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBDataBinding.java
incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBExceptionHandler.java
incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandler.java
incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBDataBindingTestCase.java
incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2String.java
incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2XMLStreamReader.java
incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataBinding.java
incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataTypeHelper.java
incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDOWrapperHandler.java
incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/test/java/org/apache/tuscany/databinding/sdo/SDODataBindingTestCase.java
Modified: incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/databinding/src/main/java/org/apache/tuscany/databinding/axiom/OMElementWrapperHandler.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/databinding/src/main/java/org/apache/tuscany/databinding/axiom/OMElementWrapperHandler.java?view=diff&rev=510671&r1=510670&r2=510671
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/databinding/src/main/java/org/apache/tuscany/databinding/axiom/OMElementWrapperHandler.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/databinding/src/main/java/org/apache/tuscany/databinding/axiom/OMElementWrapperHandler.java Thu Feb 22 13:57:46 2007
@@ -19,7 +19,10 @@
package org.apache.tuscany.databinding.axiom;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.Iterator;
+import java.util.List;
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
@@ -45,23 +48,16 @@
return wrapper;
}
- public Object getChild(OMElement wrapper, int i, ElementInfo element) {
- int index = 0;
- for (Iterator e = wrapper.getChildElements(); e.hasNext();) {
- OMElement child = (OMElement) e.next();
- if (index != i) {
- index++;
- continue;
- }
- if (child.getQName().equals(element.getQName())) {
- return child;
- }
- }
- return null;
- }
-
public void setChild(OMElement wrapper, int i, ElementInfo childElement, Object value) {
wrapper.addChild((OMElement) value);
+ }
+
+ public List getChildren(OMElement wrapper) {
+ List<Object> elements = new ArrayList<Object>();
+ for (Iterator i = wrapper.getChildElements(); i.hasNext();) {
+ elements.add(i.next());
+ }
+ return elements;
}
}
Modified: incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/samples/helloworldwsclient/pom.xml
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/samples/helloworldwsclient/pom.xml?view=diff&rev=510671&r1=510670&r2=510671
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/samples/helloworldwsclient/pom.xml (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/samples/helloworldwsclient/pom.xml Thu Feb 22 13:57:46 2007
@@ -55,6 +55,20 @@
</archive>
</configuration>
</plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.2</version>
+ <configuration>
+ <includes>
+ <include>**/*TestCase.java</include>
+ </includes>
+ <reportFormat>brief</reportFormat>
+ <useFile>false</useFile>
+ <forkMode>never</forkMode>
+ <argLine>-ea</argLine>
+ </configuration>
+ </plugin>
</plugins>
</build>
Added: incubator/tuscany/branches/sca-java-integration/sca/kernel/api/src/main/java/org/apache/tuscany/api/annotation/WrapperStyle.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/api/src/main/java/org/apache/tuscany/api/annotation/WrapperStyle.java?view=auto&rev=510671
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/kernel/api/src/main/java/org/apache/tuscany/api/annotation/WrapperStyle.java (added)
+++ incubator/tuscany/branches/sca-java-integration/sca/kernel/api/src/main/java/org/apache/tuscany/api/annotation/WrapperStyle.java Thu Feb 22 13:57:46 2007
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tuscany.api.annotation;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+/**
+ * Annotation that can be applied to interfaces or methods to indicate a wrapper
+ * style
+ *
+ * @version $Rev$ $Date$
+ */
+@Target( {METHOD, TYPE})
+@Retention(RUNTIME)
+public @interface WrapperStyle {
+
+ /**
+ * The name of the databinding for the wrapper
+ */
+ String value();
+}
Propchange: incubator/tuscany/branches/sca-java-integration/sca/kernel/api/src/main/java/org/apache/tuscany/api/annotation/WrapperStyle.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/branches/sca-java-integration/sca/kernel/api/src/main/java/org/apache/tuscany/api/annotation/WrapperStyle.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessor.java?view=diff&rev=510671&r1=510670&r2=510671
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessor.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessor.java Thu Feb 22 13:57:46 2007
@@ -19,6 +19,7 @@
package org.apache.tuscany.core.databinding.impl;
+import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.math.BigDecimal;
@@ -30,35 +31,46 @@
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
+
import javax.xml.datatype.Duration;
import javax.xml.datatype.XMLGregorianCalendar;
+import org.apache.tuscany.api.annotation.DataContext;
+import org.apache.tuscany.api.annotation.DataType;
+import org.apache.tuscany.api.annotation.WrapperStyle;
+import org.apache.tuscany.spi.annotation.Autowire;
+import org.apache.tuscany.spi.databinding.DataBindingRegistry;
import org.apache.tuscany.spi.idl.InvalidServiceContractException;
import org.apache.tuscany.spi.idl.java.JavaInterfaceProcessorExtension;
import org.apache.tuscany.spi.idl.java.JavaServiceContract;
import org.apache.tuscany.spi.model.Operation;
-import org.apache.tuscany.api.annotation.DataContext;
-import org.apache.tuscany.api.annotation.DataType;
-
/**
* The databinding annotation processor for java interfaces
- *
+ *
* @version $Rev$ $Date$
*/
public class DataBindingJavaInterfaceProcessor extends JavaInterfaceProcessorExtension {
-
- private static final String SIMPLE_JAVA_OBJECTS = "java.lang.Object";
-
private static final Class[] SIMPLE_JAVA_TYPES =
{Byte.class, Character.class, Short.class, Integer.class, Long.class, Float.class, Double.class, Date.class,
- Calendar.class, GregorianCalendar.class, Duration.class, XMLGregorianCalendar.class, BigInteger.class,
- BigDecimal.class};
+ Calendar.class, GregorianCalendar.class, Duration.class, XMLGregorianCalendar.class, BigInteger.class,
+ BigDecimal.class};
private static final Set<Class> SIMPLE_TYPE_SET = new HashSet<Class>(Arrays.asList(SIMPLE_JAVA_TYPES));
+ private DataBindingRegistry dataBindingRegistry;
+
+ public DataBindingJavaInterfaceProcessor(@Autowire
+ DataBindingRegistry dataBindingRegistry) {
+ super();
+ this.dataBindingRegistry = dataBindingRegistry;
+ }
+
public void visitInterface(Class<?> clazz, Class<?> callbackClass, JavaServiceContract contract)
throws InvalidServiceContractException {
+ if (!contract.isRemotable()) {
+ return;
+ }
Map<String, Operation<Type>> operations = contract.getOperations();
processInterface(clazz, contract, operations);
if (callbackClass != null) {
@@ -67,9 +79,9 @@
}
}
- private void processInterface(Class<?> clazz,
- JavaServiceContract contract,
+ private void processInterface(Class<?> clazz, JavaServiceContract contract,
Map<String, Operation<Type>> operations) {
+ WrapperStyle interfaceWrapperStyle = clazz.getAnnotation(WrapperStyle.class);
DataType interfaceDataType = clazz.getAnnotation(DataType.class);
if (interfaceDataType != null) {
contract.setDataBinding(interfaceDataType.name());
@@ -81,6 +93,9 @@
for (Method method : clazz.getMethods()) {
Operation<?> operation = operations.get(method.getName());
DataType operationDataType = method.getAnnotation(DataType.class);
+ if (operationDataType == null) {
+ operationDataType = interfaceDataType;
+ }
if (operationDataType != null) {
operation.setDataBinding(operationDataType.name());
@@ -89,44 +104,31 @@
operation.setMetaData(c.key(), c.value());
}
}
+ WrapperStyle operationWrapperStyle = clazz.getAnnotation(WrapperStyle.class);
+ if (operationWrapperStyle == null) {
+ operationWrapperStyle = interfaceWrapperStyle;
+ }
+
+ if (operationWrapperStyle != null) {
+ operation.setDataBinding(operationWrapperStyle.value());
+ operation.setWrapperStyle(true);
+ }
+ // String dataBinding = operation.getDataBinding();
- String dataBinding = operation.getDataBinding();
-
+ Annotation[] annotations = null;
+ if (operationDataType != null) {
+ annotations = new Annotation[] {operationDataType};
+ }
// FIXME: We need a better way to identify simple java types
for (org.apache.tuscany.spi.model.DataType<?> d : operation.getInputType().getLogical()) {
- adjustSimpleType(d, dataBinding);
+ dataBindingRegistry.introspectType(d, annotations);
}
if (operation.getOutputType() != null) {
- adjustSimpleType(operation.getOutputType(), dataBinding);
+ dataBindingRegistry.introspectType(operation.getOutputType(), annotations);
}
for (org.apache.tuscany.spi.model.DataType<?> d : operation.getFaultTypes()) {
- adjustSimpleType(d, dataBinding);
+ dataBindingRegistry.introspectType(d, annotations);
}
- }
- }
-
- private void adjustSimpleType(org.apache.tuscany.spi.model.DataType<?> dataType, String dataBinding) {
- Type type = dataType.getPhysical();
- if (!(type instanceof Class)) {
- return;
- }
- Class cls = (Class) dataType.getPhysical();
- if (cls.isPrimitive() || SIMPLE_TYPE_SET.contains(cls)) {
- dataType.setDataBinding(SIMPLE_JAVA_OBJECTS);
- }
- /**
- * [rfeng] The following code hits a bug in IBM JDK 5.0
- * if (cls == String.class && (dataBinding == null || !dataBinding.equals(String.class.getName()))) {
- * // Identify the String as a simple type
- * dataType.setDataBinding(SIMPLE_JAVA_OBJECTS);
- * }
- */
-
- boolean plainString =
- cls == String.class && ((dataBinding == null) || !dataBinding.equals(String.class.getName()));
- if (plainString) {
- // Identify the String as a simple type
- dataType.setDataBinding(SIMPLE_JAVA_OBJECTS);
}
}
}
Modified: incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImpl.java?view=diff&rev=510671&r1=510670&r2=510671
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImpl.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImpl.java Thu Feb 22 13:57:46 2007
@@ -19,15 +19,17 @@
package org.apache.tuscany.core.databinding.impl;
+import java.lang.annotation.Annotation;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Map;
-
-import org.osoa.sca.annotations.EagerInit;
+import java.util.Set;
import org.apache.tuscany.core.databinding.javabeans.JavaBeansDataBinding;
import org.apache.tuscany.spi.databinding.DataBinding;
import org.apache.tuscany.spi.databinding.DataBindingRegistry;
import org.apache.tuscany.spi.model.DataType;
+import org.osoa.sca.annotations.EagerInit;
/**
* The default implementation of a data binding registry
@@ -47,34 +49,53 @@
public void register(DataBinding dataBinding) {
bindings.put(dataBinding.getName().toLowerCase(), dataBinding);
+ String[] aliases = dataBinding.getAliases();
+ if (aliases != null) {
+ for (String alias : aliases) {
+ bindings.put(alias.toLowerCase(), dataBinding);
+ }
+ }
}
public DataBinding unregister(String id) {
if (id == null) {
return null;
}
- return bindings.remove(id.toLowerCase());
+ DataBinding dataBinding = bindings.remove(id.toLowerCase());
+ if (dataBinding != null) {
+ String[] aliases = dataBinding.getAliases();
+ if (aliases != null) {
+ for (String alias : aliases) {
+ bindings.remove(alias.toLowerCase());
+ }
+ }
+ }
+ return dataBinding;
+ }
+
+ private Set<DataBinding> getDataBindings() {
+ return new HashSet<DataBinding>(bindings.values());
}
- public DataType introspectType(Class<?> javaType) {
- DataType dataType = null;
- for (DataBinding binding : bindings.values()) {
+ public boolean introspectType(DataType dataType, Annotation[] annotations) {
+ for (DataBinding binding : getDataBindings()) {
//don't introspect for JavaBeansDatabinding as all javatypes will anyways match to its basetype
//which is java.lang.Object. Default to this only if no databinding results
if (!binding.getName().equals(JavaBeansDataBinding.NAME)) {
- dataType = binding.introspect(javaType);
- }
-
- if (dataType != null) {
- return dataType;
+ if (binding.introspect(dataType, annotations)) {
+ return true;
+ }
}
}
- return new DataType<Class>(JavaBeansDataBinding.NAME, Object.class, javaType);
+ if (dataType.getDataBinding() == null) {
+ dataType.setDataBinding(JavaBeansDataBinding.NAME);
+ }
+ return false;
}
public DataType introspectType(Object value) {
DataType dataType = null;
- for (DataBinding binding : bindings.values()) {
+ for (DataBinding binding : getDataBindings()) {
//don't introspect for JavaBeansDatabinding as all javatypes will anyways match to its basetype
//which is java.lang.Object. Default to this only if no databinding results
if (!binding.getName().equals(JavaBeansDataBinding.NAME)) {
@@ -84,7 +105,7 @@
return dataType;
}
}
- return new DataType<Class>(JavaBeansDataBinding.NAME, Object.class, value.getClass());
+ return new DataType<Class>(JavaBeansDataBinding.NAME, value.getClass(), value.getClass());
}
}
Modified: incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Input2InputTransformer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Input2InputTransformer.java?view=diff&rev=510671&r1=510670&r2=510671
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Input2InputTransformer.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Input2InputTransformer.java Thu Feb 22 13:57:46 2007
@@ -144,8 +144,8 @@
} else if (sourceWrapped && (!targetWrapped)) {
// Wrapped to Unwrapped
Object sourceWrapper = source[0];
- List<ElementInfo> childElements = sourceOp.getWrapper().getInputChildElements();
- Object[] target = new Object[childElements.size()];
+ // List<ElementInfo> childElements = sourceOp.getWrapper().getInputChildElements();
+ Object[] target = null;
targetWrapperHandler = getWapperHandler(targetType.getOperation().getDataBinding(), false);
if (targetWrapperHandler != null) {
@@ -160,18 +160,15 @@
sourceType.getLogical().get(0),
targetWrapperType,
context.getMetadata());
- for (int i = 0; i < childElements.size(); i++) {
- ElementInfo childElement = childElements.get(i);
- target[i] = targetWrapperHandler.getChild(targetWrapper, i, childElement);
- }
+ target = targetWrapperHandler.getChildren(targetWrapper).toArray();
} else {
- for (int i = 0; i < childElements.size(); i++) {
- ElementInfo childElement = childElements.get(i);
- Object child = sourceWrapperHandler.getChild(sourceWrapper, i, childElement);
+ Object[] sourceChildren = sourceWrapperHandler.getChildren(sourceWrapper).toArray();
+ target = new Object[sourceChildren.length];
+ for (int i = 0; i < sourceChildren.length; i++) {
DataType<QName> childType =
sourceOp.getWrapper().getUnwrappedInputType().getLogical().get(i);
target[i] =
- mediator.mediate(child, childType, targetType.getLogical().get(i), context
+ mediator.mediate(sourceChildren[i], childType, targetType.getLogical().get(i), context
.getMetadata());
}
}
Modified: incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Output2OutputTransformer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Output2OutputTransformer.java?view=diff&rev=510671&r1=510670&r2=510671
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Output2OutputTransformer.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Output2OutputTransformer.java Thu Feb 22 13:57:46 2007
@@ -157,8 +157,6 @@
// The void output
return null;
}
- ElementInfo childElement = childElements.get(0);
-
targetWrapperHandler = getWapperHandler(targetType.getLogical().getDataBinding());
if (targetWrapperHandler != null) {
ElementInfo wrapperElement = sourceOp.getWrapper().getInputWrapperElement();
@@ -170,9 +168,9 @@
Object targetWrapper =
mediator.mediate(sourceWrapper, sourceType.getLogical(), targetWrapperType, context
.getMetadata());
- return targetWrapperHandler.getChild(targetWrapper, 0, childElement);
+ return targetWrapperHandler.getChildren(targetWrapper).get(0);
} else {
- Object child = sourceWrapperHandler.getChild(sourceWrapper, 0, childElement);
+ Object child = sourceWrapperHandler.getChildren(sourceWrapper).get(0);
DataType<?> childType = sourceOp.getWrapper().getUnwrappedOutputType();
return mediator.mediate(child, childType, targetType.getLogical(), context.getMetadata());
}
Modified: incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/xml/DOMWrapperHandler.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/xml/DOMWrapperHandler.java?view=diff&rev=510671&r1=510670&r2=510671
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/xml/DOMWrapperHandler.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/xml/DOMWrapperHandler.java Thu Feb 22 13:57:46 2007
@@ -19,6 +19,9 @@
package org.apache.tuscany.core.databinding.xml;
+import java.util.ArrayList;
+import java.util.List;
+
import javax.xml.namespace.QName;
import javax.xml.parsers.ParserConfigurationException;
@@ -49,31 +52,27 @@
return DOMHelper.createElement(document, name);
}
- public Object getChild(Node wrapper, int i, ElementInfo element) {
- int index = 0;
- NodeList nodes = wrapper.getChildNodes();
- for (int j = 0; j < nodes.getLength(); j++) {
- Node node = nodes.item(j);
- if (node.getNodeType() != Node.ELEMENT_NODE) {
- continue;
- }
- if (index != i) {
- index++;
- } else {
- QName name = DOMHelper.getQName(node);
- if (name.equals(element.getQName())) {
- return node;
- }
- }
- }
- return null;
- }
-
public void setChild(Node wrapper, int i, ElementInfo childElement, Object value) {
Node node = (Node) value;
if (node.getNodeType() == Node.DOCUMENT_NODE) {
node = ((Document) node).getDocumentElement();
}
wrapper.appendChild(wrapper.getOwnerDocument().importNode(node, true));
+ }
+
+ public List getChildren(Node wrapper) {
+ assert wrapper != null;
+ if (wrapper.getNodeType() == Node.DOCUMENT_NODE) {
+ wrapper = ((Document) wrapper).getDocumentElement();
+ }
+ List<Node> elements = new ArrayList<Node>();
+ NodeList nodes = wrapper.getChildNodes();
+ for (int j = 0; j < nodes.getLength(); j++) {
+ Node node = nodes.item(j);
+ if (node.getNodeType() == Node.ELEMENT_NODE) {
+ elements.add(node);
+ }
+ }
+ return elements;
}
}
Modified: incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/property/PropertyObjectFactoryImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/property/PropertyObjectFactoryImpl.java?view=diff&rev=510671&r1=510670&r2=510671
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/property/PropertyObjectFactoryImpl.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/property/PropertyObjectFactoryImpl.java Thu Feb 22 13:57:46 2007
@@ -91,10 +91,8 @@
if (dataBinding != null) {
targetDataType = new DataType<Class>(dataBinding, javaType, javaType);
} else {
- targetDataType = registry.introspectType(javaType);
- if (targetDataType == null) {
- targetDataType = new DataType<Class>("java.lang.Object", javaType, javaType);
- }
+ targetDataType = new DataType<Class>(dataBinding, javaType, javaType);
+ registry.introspectType(targetDataType, null);
}
}
Modified: incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessorTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessorTestCase.java?view=diff&rev=510671&r1=510670&r2=510671
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessorTestCase.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessorTestCase.java Thu Feb 22 13:57:46 2007
@@ -30,6 +30,7 @@
import org.apache.tuscany.api.annotation.DataContext;
import org.apache.tuscany.api.annotation.DataType;
+import org.apache.tuscany.spi.databinding.DataBindingRegistry;
import org.apache.tuscany.spi.idl.InvalidServiceContractException;
import org.apache.tuscany.spi.idl.java.JavaServiceContract;
import org.apache.tuscany.spi.model.Operation;
@@ -52,7 +53,8 @@
* @throws InvalidServiceContractException
*/
public final void testVisitInterface() throws InvalidServiceContractException {
- DataBindingJavaInterfaceProcessor processor = new DataBindingJavaInterfaceProcessor();
+ DataBindingRegistry registry = new DataBindingRegistryImpl();
+ DataBindingJavaInterfaceProcessor processor = new DataBindingJavaInterfaceProcessor(registry);
JavaServiceContract contract = new JavaServiceContract(MockInterface.class);
Map<String, Operation<Type>> operations = new HashMap<String, Operation<Type>>();
Operation<Type> operation = new Operation<Type>("call", null, null, null, false, null, NO_CONVERSATION);
@@ -60,6 +62,7 @@
operations.put("call", operation);
operations.put("call1", operation1);
contract.setOperations(operations);
+ contract.setRemotable(true);
processor.visitInterface(MockInterface.class, null, contract);
Assert.assertEquals("org.w3c.dom.Node", contract.getDataBinding());
Assert.assertEquals("element", (String)contract.getMetaData().get("nodeType"));
Modified: incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImplTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImplTestCase.java?view=diff&rev=510671&r1=510670&r2=510671
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImplTestCase.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImplTestCase.java Thu Feb 22 13:57:46 2007
@@ -22,6 +22,8 @@
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
+import java.lang.annotation.Annotation;
+
import javax.xml.stream.XMLStreamReader;
import junit.framework.Assert;
@@ -49,19 +51,23 @@
public void testRegistry() {
DataBinding db1 = createMock(DataBinding.class);
+ expect(db1.getAliases()).andReturn(new String[] {"db1"}).anyTimes();
expect(db1.getName()).andReturn(ContentHandler.class.getName()).anyTimes();
DataType<Class> dataType1 = new DataType<Class>(ContentHandler.class, ContentHandler.class);
- expect(db1.introspect(ContentHandler.class)).andReturn(dataType1);
- expect(db1.introspect((Class)EasyMock.anyObject())).andReturn(null).anyTimes();
+ expect(db1.introspect(dataType1, null)).andReturn(true);
+ expect(db1.introspect(EasyMock.not(EasyMock.same(dataType1)), (Annotation[])EasyMock.isNull()))
+ .andReturn(false).anyTimes();
replay(db1);
registry.register(db1);
DataBinding db2 = createMock(DataBinding.class);
+ expect(db2.getAliases()).andReturn(new String[] {"db2"}).anyTimes();
expect(db2.getName()).andReturn(XMLStreamReader.class.getName()).anyTimes();
DataType<Class> dataType2 = new DataType<Class>(XMLStreamReader.class, XMLStreamReader.class);
- expect(db2.introspect(XMLStreamReader.class)).andReturn(dataType2);
- expect(db2.introspect((Class)EasyMock.anyObject())).andReturn(null).anyTimes();
+ expect(db2.introspect(dataType2, null)).andReturn(true);
+ expect(db2.introspect(EasyMock.not(EasyMock.same(dataType2)), (Annotation[])EasyMock.isNull()))
+ .andReturn(false).anyTimes();
replay(db2);
registry.register(db2);
@@ -70,17 +76,17 @@
DataBinding db3 = registry.getDataBinding(name);
Assert.assertTrue(db1 == db3);
- DataType<?> dt = registry.introspectType(ContentHandler.class);
- Assert.assertEquals(dataType1, dt);
+ DataType dt = new DataType(ContentHandler.class, null);
+ registry.introspectType(dt, null);
+ Assert.assertEquals(dataType1.getLogical(), ContentHandler.class);
Assert.assertTrue(dt.getDataBinding().equalsIgnoreCase(name));
registry.unregister(name);
DataBinding db4 = registry.getDataBinding(name);
Assert.assertNull(db4);
-
-
- dt = registry.introspectType(ContentHandler.class);
- Assert.assertNotNull(dt);
+
+ dt = new DataType(null, String.class, null);
+ registry.introspectType(dt, null);
Assert.assertEquals("java.lang.Object", dt.getDataBinding());
}
Modified: incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBinding.java?view=diff&rev=510671&r1=510670&r2=510671
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBinding.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBinding.java Thu Feb 22 13:57:46 2007
@@ -19,6 +19,8 @@
package org.apache.tuscany.spi.databinding;
+import java.lang.annotation.Annotation;
+
import org.apache.tuscany.spi.model.DataType;
/**
@@ -43,14 +45,22 @@
* @return The name of the databinding
*/
String getName();
+
+ /**
+ * Get the aliases for the databinding
+ *
+ * @return An array of aliases
+ */
+ String[] getAliases();
/**
- * Introspect a java class or interface to create a DataType model
+ * Introspect and populate information to a DataType model
*
* @param javaType The java class or interface to be introspected
- * @return The DataType or null if the java type is not supported by this databinding
+ * @param annotations The java annotations
+ * @return true if the databinding has recognized the given data type
*/
- DataType introspect(Class<?> javaType);
+ boolean introspect(DataType dataType, Annotation[] annotations);
/**
* Introspect the data to figure out the corresponding data type
Modified: incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBindingRegistry.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBindingRegistry.java?view=diff&rev=510671&r1=510670&r2=510671
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBindingRegistry.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBindingRegistry.java Thu Feb 22 13:57:46 2007
@@ -18,6 +18,8 @@
*/
package org.apache.tuscany.spi.databinding;
+import java.lang.annotation.Annotation;
+
import org.apache.tuscany.spi.model.DataType;
/**
@@ -50,11 +52,12 @@
/**
* Introspect the java class to figure out what DataType supports it
*
- * @param javaType The java class or interface
+ * @param DataType The initial data type
+ * @param annotations The java annotations
* @return A DataType representing the java type or null if no databinding
* recognizes the java type
*/
- DataType introspectType(Class<?> javaType);
+ boolean introspectType(DataType dataType, Annotation[] annotations);
/**
* Introspect the value to figure out the corresponding DataType
Modified: incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/WrapperHandler.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/WrapperHandler.java?view=diff&rev=510671&r1=510670&r2=510671
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/WrapperHandler.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/WrapperHandler.java Thu Feb 22 13:57:46 2007
@@ -19,6 +19,8 @@
package org.apache.tuscany.spi.databinding;
+import java.util.List;
+
import org.apache.tuscany.spi.idl.ElementInfo;
/**
@@ -45,12 +47,9 @@
void setChild(T wrapper, int i, ElementInfo childElement, Object value);
/**
- * Get child element from the wrapper
- *
- * @param wrapper The wrapper
- * @param i The index
- * @param element The XSD element
- * @return The value of the child
+ * Get a list of child elements from the wrapper
+ * @param wrapper
+ * @return child elements under the wrapper
*/
- Object getChild(T wrapper, int i, ElementInfo element);
+ List getChildren(T wrapper);
}
Modified: incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtension.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtension.java?view=diff&rev=510671&r1=510670&r2=510671
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtension.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtension.java Thu Feb 22 13:57:46 2007
@@ -27,6 +27,7 @@
import java.io.ObjectStreamClass;
import java.io.OutputStream;
import java.io.Serializable;
+import java.lang.annotation.Annotation;
import org.osoa.sca.annotations.EagerInit;
import org.osoa.sca.annotations.Init;
@@ -43,7 +44,7 @@
/**
* Base Implementation of DataBinding
- *
+ *
* @version $Rev$ $Date$
*/
@Service(DataBinding.class)
@@ -58,9 +59,11 @@
protected String name;
/**
- * Create a databinding with the base java type whose name will be used as the name of the databinding
- *
- * @param baseType The base java class or interface representing the databinding, for example, org.w3c.dom.Node
+ * Create a databinding with the base java type whose name will be used as
+ * the name of the databinding
+ *
+ * @param baseType The base java class or interface representing the
+ * databinding, for example, org.w3c.dom.Node
*/
protected DataBindingExtension(Class<?> baseType) {
this(baseType.getName(), baseType);
@@ -68,9 +71,10 @@
/**
* Create a databinding with the name and base java type
- *
- * @param name The name of the databinding
- * @param baseType The base java class or interface representing the databinding, for example, org.w3c.dom.Node
+ *
+ * @param name The name of the databinding
+ * @param baseType The base java class or interface representing the
+ * databinding, for example, org.w3c.dom.Node
*/
protected DataBindingExtension(String name, Class<?> baseType) {
this.name = name;
@@ -87,22 +91,30 @@
registry.register(this);
}
- public DataType introspect(Class<?> javaType) {
- if (baseType == null || javaType == null) {
- return null;
- }
- if (baseType.isAssignableFrom(javaType)) {
- return new DataType<Class>(name, javaType, baseType);
- } else {
- return null;
+ public boolean introspect(DataType type, Annotation[] annotations) {
+ assert type != null;
+ Object physical = type.getPhysical();
+ if (physical instanceof Class) {
+ Class cls = (Class)physical;
+ if (baseType != null && baseType.isAssignableFrom(cls)) {
+ type.setDataBinding(getName());
+ type.setLogical(baseType);
+ return true;
+ }
}
+ return false;
}
public DataType introspect(Object value) {
if (value == null) {
return null;
} else {
- return introspect(value.getClass());
+ DataType<Class> dataType = new DataType<Class>(value.getClass(), value.getClass());
+ if (introspect(dataType, null)) {
+ return dataType;
+ } else {
+ return null;
+ }
}
}
@@ -116,7 +128,7 @@
public WrapperHandler getWrapperHandler() {
return null;
}
-
+
public ExceptionHandler getExceptionHandler() {
return null;
}
@@ -126,8 +138,10 @@
return null;
}
final Class clazz = arg.getClass();
- if (String.class == clazz || clazz.isPrimitive() || Number.class.isAssignableFrom(clazz)
- || Boolean.class.isAssignableFrom(clazz) || Character.class.isAssignableFrom(clazz)
+ if (String.class == clazz || clazz.isPrimitive()
+ || Number.class.isAssignableFrom(clazz)
+ || Boolean.class.isAssignableFrom(clazz)
+ || Character.class.isAssignableFrom(clazz)
|| Byte.class.isAssignableFrom(clazz)) {
// Immutable classes
return arg;
@@ -147,13 +161,11 @@
bis.close();
return objectCopy;
} else {
- //return arg;
- throw new IllegalArgumentException(
- "Pass-by-value is not supported for the given object");
+ // return arg;
+ throw new IllegalArgumentException("Pass-by-value is not supported for the given object");
}
} catch (Exception e) {
- throw new IllegalArgumentException(
- "Pass-by-value is not supported for the given object", e);
+ throw new IllegalArgumentException("Pass-by-value is not supported for the given object", e);
}
}
@@ -161,8 +173,7 @@
return new ObjectOutputStream(os);
}
- protected ObjectInputStream getObjectInputStream(InputStream is, final ClassLoader cl)
- throws IOException {
+ protected ObjectInputStream getObjectInputStream(InputStream is, final ClassLoader cl) throws IOException {
ObjectInputStream ois = new ObjectInputStream(is) {
@Override
protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException {
@@ -179,6 +190,10 @@
public SimpleTypeMapper getSimpleTypeMapper() {
return new SimpleTypeMapperExtension();
+ }
+
+ public String[] getAliases() {
+ return null;
}
}
Modified: incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/DataType.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/DataType.java?view=diff&rev=510671&r1=510670&r2=510671
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/DataType.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/DataType.java Thu Feb 22 13:57:46 2007
@@ -39,7 +39,7 @@
private final Type physical;
- private final L logical;
+ private L logical;
private Map<String, Object> metadata = new HashMap<String, Object>();
@@ -237,6 +237,13 @@
public void setOperation(Operation operation) {
this.operation = operation;
+ }
+
+ /**
+ * @param logical the logical to set
+ */
+ public void setLogical(L logical) {
+ this.logical = logical;
}
}
Modified: incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtensionTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtensionTestCase.java?view=diff&rev=510671&r1=510670&r2=510671
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtensionTestCase.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtensionTestCase.java Thu Feb 22 13:57:46 2007
@@ -22,6 +22,7 @@
import junit.framework.TestCase;
import org.apache.tuscany.spi.databinding.DataBindingRegistry;
+import org.apache.tuscany.spi.model.DataType;
import org.easymock.EasyMock;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
@@ -41,8 +42,10 @@
public void testExtension() {
DataBinding1 binding1 = new DataBinding1(Node.class);
assertEquals(Node.class.getName(), binding1.getName());
- assertNotNull(binding1.introspect(Element.class));
- assertNull(binding1.introspect(String.class));
+ DataType dt1 = new DataType(Element.class, null);
+ assertTrue(binding1.introspect(dt1, null));
+ DataType dt2 = new DataType(String.class, null);
+ assertFalse(binding1.introspect(dt2, null));
assertNull(binding1.getWrapperHandler());
DataBindingRegistry registry = EasyMock.createMock(DataBindingRegistry.class);
Modified: incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBContextHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBContextHelper.java?view=diff&rev=510671&r1=510670&r2=510671
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBContextHelper.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBContextHelper.java Thu Feb 22 13:57:46 2007
@@ -29,6 +29,7 @@
import org.apache.tuscany.spi.databinding.TransformationContext;
import org.apache.tuscany.spi.databinding.TransformationException;
+import org.apache.tuscany.spi.idl.ElementInfo;
import org.apache.tuscany.spi.model.DataType;
import org.apache.tuscany.spi.model.Operation;
@@ -82,16 +83,19 @@
if (value instanceof JAXBElement) {
return (JAXBElement)value;
} else {
- Class type = (Class) dataType.getPhysical();
- Object logical = dataType.getLogical();
- if (!(logical instanceof QName)) {
- logical = JAXBDataBinding.ROOT_ELEMENT;
+ Class type = (Class)dataType.getPhysical();
+ ElementInfo elementInfo = (ElementInfo)dataType.getMetadata(ElementInfo.class.getName());
+ QName elementName = JAXBDataBinding.ROOT_ELEMENT;
+ if (elementInfo != null) {
+ elementName = elementInfo.getQName();
+ } else {
/**
- * Set the declared type to Object.class so that xsi:type will be produced
+ * Set the declared type to Object.class so that xsi:type will
+ * be produced
*/
type = Object.class;
}
- return new JAXBElement((QName)logical, type, value);
+ return new JAXBElement(elementName, type, value);
}
}
Modified: incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBDataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBDataBinding.java?view=diff&rev=510671&r1=510670&r2=510671
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBDataBinding.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBDataBinding.java Thu Feb 22 13:57:46 2007
@@ -20,6 +20,7 @@
package org.apache.tuscany.databinding.jaxb;
import java.beans.Introspector;
+import java.lang.annotation.Annotation;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
@@ -47,7 +48,12 @@
public static final String NAME = JAXBElement.class.getName();
@Override
- public DataType introspect(Class<?> javaType) {
+ public boolean introspect(DataType dataType, Annotation[] annotations) {
+ Object physical = dataType.getPhysical();
+ if (!(physical instanceof Class)) {
+ return false;
+ }
+ Class javaType = (Class)physical;
if (JAXBElement.class.isAssignableFrom(javaType)) {
Type type = javaType.getGenericSuperclass();
if (type instanceof ParameterizedType) {
@@ -56,16 +62,25 @@
if (rawType == JAXBElement.class) {
Type actualType = parameterizedType.getActualTypeArguments()[0];
if (actualType instanceof Class) {
- return introspect((Class<?>)actualType);
+ QName xmlType = getXmlTypeName((Class)actualType);
+ dataType.setLogical(xmlType);
+ dataType.setDataBinding(getName());
+ return true;
}
}
}
- return new DataType<QName>(getName(), javaType, null);
+ dataType.setLogical(null);
+ dataType.setDataBinding(getName());
+ return true;
}
QName xmlType = getXmlTypeName(javaType);
- DataType<QName> dataType = new DataType<QName>(getName(), javaType, xmlType);
- return dataType;
+ if (xmlType == null) {
+ return false;
+ }
+ dataType.setLogical(xmlType);
+ dataType.setDataBinding(getName());
+ return true;
}
public static QName getXmlTypeName(Class<?> javaType) {
@@ -74,7 +89,9 @@
Package pkg = javaType.getPackage();
if (pkg != null) {
XmlSchema schema = pkg.getAnnotation(XmlSchema.class);
- namespace = schema.namespace();
+ if (schema != null) {
+ namespace = schema.namespace();
+ }
}
XmlType type = javaType.getAnnotation(XmlType.class);
if (type != null) {
@@ -107,7 +124,7 @@
name = Introspector.decapitalize(javaType.getSimpleName());
}
}
- if (namespace == null && name == null) {
+ if (name == null) {
return null;
}
QName xmlType = new QName(namespace, name);
Modified: incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBExceptionHandler.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBExceptionHandler.java?view=diff&rev=510671&r1=510670&r2=510671
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBExceptionHandler.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBExceptionHandler.java Thu Feb 22 13:57:46 2007
@@ -26,6 +26,7 @@
import javax.xml.ws.WebFault;
import org.apache.tuscany.spi.databinding.ExceptionHandler;
+import org.apache.tuscany.spi.idl.ElementInfo;
import org.apache.tuscany.spi.model.DataType;
/**
@@ -97,6 +98,7 @@
// only part in
// the fault message references
DataType<QName> faultType = new DataType<QName>(JAXBDataBinding.NAME, faultBeanClass, element);
+ faultType.setMetadata(ElementInfo.class.getName(), new ElementInfo(element, null));
return faultType;
}
}
Modified: incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandler.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandler.java?view=diff&rev=510671&r1=510670&r2=510671
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandler.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandler.java Thu Feb 22 13:57:46 2007
@@ -19,13 +19,14 @@
package org.apache.tuscany.databinding.jaxb;
-import java.beans.Introspector;
-import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.annotation.XmlElementDecl;
import javax.xml.bind.annotation.XmlRegistry;
+import javax.xml.bind.annotation.XmlType;
import javax.xml.namespace.QName;
import org.apache.tuscany.spi.databinding.TransformationContext;
@@ -40,9 +41,14 @@
public JAXBElement<?> create(ElementInfo element, TransformationContext context) {
try {
+ // FIXME: How do we map the global element to a factory?
String packageName = null;
String factoryClassName = packageName + ".ObjectFactory";
- Class<?> factoryClass = Class.forName(factoryClassName, true, context.getClassLoader());
+ ClassLoader classLoader = context != null ? context.getClassLoader() : null;
+ if (classLoader == null) {
+ classLoader = Thread.currentThread().getContextClassLoader();
+ }
+ Class<?> factoryClass = Class.forName(factoryClassName, true, classLoader);
assert factoryClass.isAnnotationPresent(XmlRegistry.class);
Object factory = factoryClass.newInstance();
QName elementName = element.getQName();
@@ -58,7 +64,7 @@
if (method != null) {
Class typeClass = method.getParameterTypes()[0];
Object value = typeClass.newInstance();
- return (JAXBElement<?>) method.invoke(factory, new Object[] { value });
+ return (JAXBElement<?>)method.invoke(factory, new Object[] {value});
} else {
throw new TransformationException("ObjectFactory cannot be resolved.");
}
@@ -67,36 +73,51 @@
}
}
- public Object getChild(JAXBElement<?> wrapper, int i, ElementInfo element) {
+ public void setChild(JAXBElement<?> wrapper, int i, ElementInfo childElement, Object value) {
+ Object wrapperValue = wrapper.getValue();
+ Class<?> wrapperClass = wrapperValue.getClass();
+
+ XmlType xmlType = wrapperClass.getAnnotation(XmlType.class);
+ String[] properties = xmlType.propOrder();
+ String property = properties[i];
+
try {
- Object value = wrapper.getValue();
- PropertyDescriptor descriptors[] =
- Introspector.getBeanInfo(wrapper.getDeclaredType()).getPropertyDescriptors();
- for (PropertyDescriptor d : descriptors) {
- if (d.getName().equals(element.getQName().getLocalPart())) {
- return d.getReadMethod().invoke(value, new Object[] {});
+ for (Method m : wrapperClass.getMethods()) {
+ if (m.getName().equals("set" + capitalize(property))) {
+ m.invoke(wrapperValue, new Object[] {value});
+ return;
}
}
- return null;
- } catch (Exception e) {
+ } catch (Throwable e) {
throw new TransformationException(e);
}
}
- public void setChild(JAXBElement<?> wrapper, int i, ElementInfo childElement, Object value) {
- try {
- Object wrapperValue = wrapper.getValue();
- PropertyDescriptor descriptors[] =
- Introspector.getBeanInfo(wrapper.getDeclaredType()).getPropertyDescriptors();
- for (PropertyDescriptor d : descriptors) {
- if (d.getName().equals(childElement.getQName().getLocalPart())) {
- d.getWriteMethod().invoke(wrapperValue, new Object[] { value });
- break;
- }
+ private static String capitalize(String name) {
+ char first = Character.toUpperCase(name.charAt(0));
+ return first + name.substring(1);
+ }
+
+ /**
+ * @see org.apache.tuscany.spi.databinding.WrapperHandler#getChildren(java.lang.Object)
+ */
+ public List getChildren(JAXBElement<?> wrapper) {
+ Object wrapperValue = wrapper.getValue();
+ Class<?> wrapperClass = wrapperValue.getClass();
+
+ XmlType xmlType = wrapperClass.getAnnotation(XmlType.class);
+ String[] properties = xmlType.propOrder();
+ List<Object> elements = new ArrayList<Object>();
+ for (String p : properties) {
+ try {
+ Method method = wrapperClass.getMethod("get" + capitalize(p), (Class[])null);
+ Object value = method.invoke(wrapperValue, (Object[])null);
+ elements.add(value);
+ } catch (Throwable e) {
+ throw new TransformationException(e);
}
- } catch (Exception e) {
- throw new TransformationException(e);
}
+ return elements;
}
}
Modified: incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBDataBindingTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBDataBindingTestCase.java?view=diff&rev=510671&r1=510670&r2=510671
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBDataBindingTestCase.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBDataBindingTestCase.java Thu Feb 22 13:57:46 2007
@@ -19,6 +19,8 @@
package org.apache.tuscany.databinding.jaxb;
+import java.lang.annotation.Annotation;
+
import javax.xml.bind.JAXBElement;
import javax.xml.namespace.QName;
@@ -48,22 +50,30 @@
/**
* Test method for
- * {@link org.apache.tuscany.databinding.jaxb.JAXBDataBinding#introspect(java.lang.Class)}.
+ * {@link org.apache.tuscany.databinding.jaxb.JAXBDataBinding#introspect(java.lang.Class, Annotation)}.
*/
public final void testIntrospect() {
- DataType<?> dataType = binding.introspect(JAXBElement.class);
- Assert.assertTrue(dataType.getDataBinding().equals(binding.getName()));
- Assert.assertTrue(dataType.getPhysical() == JAXBElement.class && dataType.getLogical() == null);
- dataType = binding.introspect(MockJAXBElement.class);
- Assert.assertEquals(PurchaseOrderType.class, dataType.getPhysical());
- Assert.assertEquals(new QName("http://www.example.com/IPO", "PurchaseOrderType"), dataType.getLogical());
- dataType = binding.introspect(USAddress.class);
- Assert.assertEquals(USAddress.class, dataType.getPhysical());
- Assert.assertEquals(new QName("http://www.example.com/IPO", "USAddress"), dataType.getLogical());
- dataType = binding.introspect(USState.class);
- Assert.assertTrue(dataType.getDataBinding().equals(binding.getName()));
- Assert.assertEquals(USState.class, dataType.getPhysical());
- Assert.assertEquals(new QName("http://www.example.com/IPO", "USState"), dataType.getLogical());
+ DataType dataType = new DataType(JAXBElement.class, null);
+ boolean yes = binding.introspect(dataType, null);
+ assertTrue(yes);
+ assertTrue(dataType.getDataBinding().equals(binding.getName()));
+ assertTrue(dataType.getPhysical() == JAXBElement.class && dataType.getLogical() == null);
+ dataType = new DataType(MockJAXBElement.class, null);
+ yes = binding.introspect(dataType, null);
+ assertTrue(yes);
+ assertEquals(MockJAXBElement.class, dataType.getPhysical());
+ assertEquals(new QName("http://www.example.com/IPO", "PurchaseOrderType"), dataType.getLogical());
+ dataType = new DataType(USAddress.class, null);
+ yes = binding.introspect(dataType, null);
+ assertTrue(yes);
+ assertEquals(USAddress.class, dataType.getPhysical());
+ assertEquals(new QName("http://www.example.com/IPO", "USAddress"), dataType.getLogical());
+ dataType = new DataType(USState.class, null);
+ yes = binding.introspect(dataType, null);
+ assertTrue(yes);
+ assertTrue(dataType.getDataBinding().equals(binding.getName()));
+ assertEquals(USState.class, dataType.getPhysical());
+ assertEquals(new QName("http://www.example.com/IPO", "USState"), dataType.getLogical());
}
Added: incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandlerTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandlerTestCase.java?view=auto&rev=510671
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandlerTestCase.java (added)
+++ incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandlerTestCase.java Thu Feb 22 13:57:46 2007
@@ -0,0 +1,72 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.tuscany.databinding.jaxb;
+
+import java.util.List;
+
+import javax.xml.bind.JAXBElement;
+import javax.xml.namespace.QName;
+
+import junit.framework.TestCase;
+
+import org.apache.tuscany.spi.idl.ElementInfo;
+
+import com.example.ipo.jaxb.ObjectFactory;
+import com.example.ipo.jaxb.PurchaseOrderType;
+
+/**
+ * Test case for JAXBExceptionHandler
+ */
+public class JAXBWrapperHandlerTestCase extends TestCase {
+ private static final QName ELEMENT = new QName("http://www.example.com/IPO", "purchaseOrder");
+ private JAXBWrapperHandler handler;
+
+ /**
+ * @see junit.framework.TestCase#setUp()
+ */
+ protected void setUp() throws Exception {
+ super.setUp();
+ this.handler = new JAXBWrapperHandler();
+ }
+
+ public void testCreate() {
+ // ElementInfo element = new ElementInfo(ELEMENT, null);
+ // JAXBElement<?> jaxbElement = handler.create(element, null);
+ }
+
+ public void testSetChild() {
+ ObjectFactory factory = new ObjectFactory();
+ PurchaseOrderType po = factory.createPurchaseOrderType();
+ JAXBElement<PurchaseOrderType> wrapper = factory.createPurchaseOrder(po);
+ handler.setChild(wrapper, 2, null, "Comment");
+ }
+
+ public void testGetChildren() {
+ ObjectFactory factory = new ObjectFactory();
+ PurchaseOrderType po = factory.createPurchaseOrderType();
+ po.setComment("Comment");
+ JAXBElement<PurchaseOrderType> wrapper = factory.createPurchaseOrder(po);
+ List children = handler.getChildren(wrapper);
+ assertNotNull(children);
+ assertEquals(4, children.size());
+ assertEquals("Comment", children.get(2));
+ assertNull(children.get(0));
+ }
+}
Propchange: incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandlerTestCase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandlerTestCase.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2String.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2String.java?view=diff&rev=510671&r1=510670&r2=510671
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2String.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2String.java Thu Feb 22 13:57:46 2007
@@ -18,8 +18,6 @@
*/
package org.apache.tuscany.databinding.sdo;
-import static org.apache.tuscany.databinding.sdo.SDODataBinding.ROOT_ELEMENT;
-
import javax.xml.namespace.QName;
import org.apache.tuscany.spi.databinding.PullTransformer;
@@ -41,13 +39,8 @@
try {
HelperContext helperContext = SDODataTypeHelper.getHelperContext(context);
XMLHelper xmlHelper = helperContext.getXMLHelper();
- Object logicalType = context.getSourceDataType().getLogical();
- if (logicalType instanceof QName) {
- QName elementName = (QName)logicalType;
- return xmlHelper.save(source, elementName.getNamespaceURI(), elementName.getLocalPart());
- } else {
- return xmlHelper.save(source, ROOT_ELEMENT.getNamespaceURI(), ROOT_ELEMENT.getLocalPart());
- }
+ QName elementName = SDODataTypeHelper.getElement(context.getSourceDataType());
+ return xmlHelper.save(source, elementName.getNamespaceURI(), elementName.getLocalPart());
} catch (Exception e) {
throw new TransformationException(e);
}
Modified: incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2XMLStreamReader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2XMLStreamReader.java?view=diff&rev=510671&r1=510670&r2=510671
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2XMLStreamReader.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2XMLStreamReader.java Thu Feb 22 13:57:46 2007
@@ -44,9 +44,7 @@
try {
HelperContext helperContext = SDODataTypeHelper.getHelperContext(context);
XMLStreamHelper streamHelper = SDOUtil.createXMLStreamHelper(helperContext.getTypeHelper());
- Object logicalType = context.getSourceDataType().getLogical();
- QName elementName =
- (logicalType instanceof QName) ? (QName) logicalType : SDODataBinding.ROOT_ELEMENT;
+ QName elementName = SDODataTypeHelper.getElement(context.getSourceDataType());
XMLHelper xmlHelper = helperContext.getXMLHelper();
XMLDocument document =
xmlHelper.createDocument(source, elementName.getNamespaceURI(), elementName.getLocalPart());
Modified: incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataBinding.java?view=diff&rev=510671&r1=510670&r2=510671
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataBinding.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataBinding.java Thu Feb 22 13:57:46 2007
@@ -19,6 +19,8 @@
package org.apache.tuscany.databinding.sdo;
+import java.lang.annotation.Annotation;
+
import javax.xml.namespace.QName;
import org.apache.tuscany.spi.databinding.ExceptionHandler;
@@ -52,30 +54,33 @@
}
@Override
- public DataType introspect(Class<?> javaType) {
- if (javaType == null) {
- return null;
+ public boolean introspect(DataType dataType, Annotation[] annotations) {
+ Object physical = dataType.getPhysical();
+ if (!(physical instanceof Class)) {
+ return false;
}
+ Class javaType = (Class)physical;
HelperContext context = HelperProvider.getDefaultContext();
// FIXME: Need a better to test dynamic SDO
if (DataObject.class.isAssignableFrom(javaType)) {
// Dynamic SDO
- return new DataType<QName>(getName(), javaType, null);
+ dataType.setLogical(DataObject.class);
+ return true;
}
// FIXME: We need to access HelperContext
Type type = context.getTypeHelper().getType(javaType);
if (type == null) {
- return null;
+ return false;
}
if (type.isDataType()) {
// FIXME: Ignore simple types?
- return null;
+ return false;
}
String namespace = type.getURI();
String name = context.getXSDHelper().getLocalName(type);
QName xmlType = new QName(namespace, name);
- DataType<QName> dataType = new DataType<QName>(getName(), javaType, xmlType);
- return dataType;
+ dataType.setLogical(xmlType);
+ return true;
}
@Override
Modified: incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataTypeHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataTypeHelper.java?view=diff&rev=510671&r1=510670&r2=510671
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataTypeHelper.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataTypeHelper.java Thu Feb 22 13:57:46 2007
@@ -19,11 +19,15 @@
package org.apache.tuscany.databinding.sdo;
+import javax.xml.namespace.QName;
+
import org.apache.tuscany.databinding.sdo.ImportSDOLoader.SDOType;
import org.apache.tuscany.sdo.util.SDOUtil;
import org.apache.tuscany.spi.component.CompositeComponent;
import org.apache.tuscany.spi.databinding.TransformationContext;
import org.apache.tuscany.spi.deployer.DeploymentContext;
+import org.apache.tuscany.spi.idl.ElementInfo;
+import org.apache.tuscany.spi.model.DataType;
import commonj.sdo.helper.HelperContext;
import commonj.sdo.impl.HelperProvider;
@@ -53,11 +57,12 @@
return helperContext;
}
}
-
+
public static HelperContext getHelperContext(DeploymentContext deploymentContext) {
HelperContext helperContext = null;
if (deploymentContext != null && deploymentContext.getParent() != null) {
- // HACK: Retrieve the SDO HelperContext from the CompositeComponent extensions
+ // HACK: Retrieve the SDO HelperContext from the CompositeComponent
+ // extensions
helperContext = (HelperContext)deploymentContext.getParent().getExtension(HelperContext.class.getName());
if (helperContext == null) {
helperContext = SDOUtil.createHelperContext();
@@ -68,12 +73,21 @@
if (helperContext == null) {
helperContext = getDefaultHelperContext();
}
-
+
return helperContext;
}
-
+
protected static HelperContext getDefaultHelperContext() {
// SDOUtil.createHelperContext();
return HelperProvider.getDefaultContext();
+ }
+
+ public static QName getElement(DataType<?> dataType) {
+ ElementInfo info = (ElementInfo)dataType.getMetadata().get(ElementInfo.class.getName());
+ if (info == null) {
+ return SDODataBinding.ROOT_ELEMENT;
+ } else {
+ return info.getQName();
+ }
}
}
Modified: incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDOWrapperHandler.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDOWrapperHandler.java?view=diff&rev=510671&r1=510670&r2=510671
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDOWrapperHandler.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDOWrapperHandler.java Thu Feb 22 13:57:46 2007
@@ -19,6 +19,9 @@
package org.apache.tuscany.databinding.sdo;
+import java.util.ArrayList;
+import java.util.List;
+
import javax.xml.namespace.QName;
import org.apache.tuscany.spi.databinding.TransformationContext;
@@ -50,16 +53,6 @@
}
/**
- * @see org.apache.tuscany.spi.databinding.WrapperHandler#getChild(java.lang.Object,
- * int, ElementInfo)
- */
- public Object getChild(Object wrapper, int i, ElementInfo element) {
- DataObject wrapperDO =
- (wrapper instanceof XMLDocument) ? ((XMLDocument)wrapper).getRootObject() : (DataObject)wrapper;
- return wrapperDO.get(element.getQName().getLocalPart());
- }
-
- /**
* @see org.apache.tuscany.spi.databinding.WrapperHandler#setChild(java.lang.Object,
* int, ElementInfo, java.lang.Object)
*/
@@ -67,6 +60,17 @@
DataObject wrapperDO =
(wrapper instanceof XMLDocument) ? ((XMLDocument)wrapper).getRootObject() : (DataObject)wrapper;
wrapperDO.set(childElement.getQName().getLocalPart(), value);
+ }
+
+ public List getChildren(Object wrapper) {
+ DataObject wrapperDO =
+ (wrapper instanceof XMLDocument) ? ((XMLDocument)wrapper).getRootObject() : (DataObject)wrapper;
+ List properties = wrapperDO.getInstanceProperties();
+ List<Object> elements = new ArrayList<Object>();
+ for (int i = 0; i < properties.size(); i++) {
+ elements.add(wrapperDO.get(i));
+ }
+ return elements;
}
}
Modified: incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/test/java/org/apache/tuscany/databinding/sdo/SDODataBindingTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/test/java/org/apache/tuscany/databinding/sdo/SDODataBindingTestCase.java?view=diff&rev=510671&r1=510670&r2=510671
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/test/java/org/apache/tuscany/databinding/sdo/SDODataBindingTestCase.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/test/java/org/apache/tuscany/databinding/sdo/SDODataBindingTestCase.java Thu Feb 22 13:57:46 2007
@@ -53,15 +53,21 @@
}
public final void testIntrospect() {
- DataType<?> dataType = binding.introspect(DataObject.class);
- Assert.assertTrue(dataType.getDataBinding().equals(binding.getName()));
- Assert.assertTrue(dataType.getPhysical() == DataObject.class && dataType.getLogical() == null);
- dataType = binding.introspect(PurchaseOrderType.class);
- Assert.assertEquals(PurchaseOrderType.class, dataType.getPhysical());
- Assert.assertEquals(new QName("http://www.example.com/IPO", "PurchaseOrderType"), dataType.getLogical());
- dataType = binding.introspect(USAddress.class);
- Assert.assertEquals(USAddress.class, dataType.getPhysical());
- Assert.assertEquals(new QName("http://www.example.com/IPO", "USAddress"), dataType.getLogical());
+ DataType dataType = new DataType(DataObject.class, null);
+ boolean yes = binding.introspect(dataType, null);
+ assertTrue(yes);
+ assertTrue(dataType.getDataBinding().equals(binding.getName()));
+ assertTrue(dataType.getPhysical() == DataObject.class && dataType.getLogical() == DataObject.class);
+ dataType = new DataType(PurchaseOrderType.class, null);
+ yes = binding.introspect(dataType, null);
+ assertTrue(yes);
+ assertEquals(PurchaseOrderType.class, dataType.getPhysical());
+ assertEquals(new QName("http://www.example.com/IPO", "PurchaseOrderType"), dataType.getLogical());
+ dataType = new DataType(USAddress.class, null);
+ yes = binding.introspect(dataType, null);
+ assertTrue(yes);
+ assertEquals(USAddress.class, dataType.getPhysical());
+ assertEquals(new QName("http://www.example.com/IPO", "USAddress"), dataType.getLogical());
}
public final void testCopyRoot() {
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org