diff options
Diffstat (limited to 'tags/java/sca/2.0-M4-RC1/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans')
10 files changed, 0 insertions, 1259 deletions
diff --git a/tags/java/sca/2.0-M4-RC1/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/DOMNode2JavaBeanTransformer.java b/tags/java/sca/2.0-M4-RC1/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/DOMNode2JavaBeanTransformer.java deleted file mode 100644 index fbca9b0444..0000000000 --- a/tags/java/sca/2.0-M4-RC1/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/DOMNode2JavaBeanTransformer.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * 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.sca.databinding.javabeans; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import javax.xml.namespace.QName; - -import org.w3c.dom.Document; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -/** - * Transformer to convert data from DOM Node to JavaBean - * - * @version $Rev$ $Date$ - */ -public class DOMNode2JavaBeanTransformer extends XML2JavaBeanTransformer<Node> { - - @Override - public Node getRootElement(Node element) throws XML2JavaMapperException { - if (element instanceof Document) { - return ((Document)element).getDocumentElement(); - } else { - return element; - } - - } - - @Override - public Iterator<Node> getChildElements(Node parent) throws XML2JavaMapperException { - NodeList nodeList = parent.getChildNodes(); - List<Node> nodeArrayList = new ArrayList<Node>(nodeList.getLength()); - for (int count = 0; count < nodeList.getLength(); ++count) { - nodeArrayList.add(nodeList.item(count)); - } - - return nodeArrayList.iterator(); - } - - @Override - public String getElementName(Node element) throws XML2JavaMapperException { - return element.getLocalName(); - } - - @Override - public String getText(Node element) throws XML2JavaMapperException { - if (element instanceof Document) { - element = ((Document)element).getDocumentElement(); - } - return element.getTextContent(); - } - - @Override - public boolean isTextElement(Node element) throws XML2JavaMapperException { - return element.getNodeType() == Node.TEXT_NODE; - } - - @Override - public boolean isTextOnly(Node element) throws XML2JavaMapperException { - NodeList childNodes = element.getChildNodes(); - return childNodes.getLength() == 1 && isTextElement(childNodes.item(0)); - } - - @Override - public Node getFirstChildWithName(Node element, QName name) throws XML2JavaMapperException { - Node child; - for (child = element.getFirstChild(); - child != null && !(child.getNodeName() == name.getLocalPart() - && child.getNamespaceURI() == name.getNamespaceURI()) ; - child = child.getNextSibling()) { - } - return child; - } - - @Override - public Class getSourceType() { - return Node.class; - } -} diff --git a/tags/java/sca/2.0-M4-RC1/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/Java2XMLMapperException.java b/tags/java/sca/2.0-M4-RC1/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/Java2XMLMapperException.java deleted file mode 100644 index 5dc13bd60b..0000000000 --- a/tags/java/sca/2.0-M4-RC1/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/Java2XMLMapperException.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * 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.sca.databinding.javabeans; - -import javax.xml.namespace.QName; - -/** - * This exception is used to encapsulate and rethrow exceptions that arise out - * of converting JavaBean objects to XML - * - * @version $Rev$ $Date$ - */ -public class Java2XMLMapperException extends RuntimeException { - private static final long serialVersionUID = 6811924384399578686L; - - private QName xmlElementName; - private String javaFieldName; - private Class javaType; - - public Java2XMLMapperException(String message) { - super(message); - } - - public Java2XMLMapperException(Throwable cause) { - super(cause); - } - - public String getJavaFieldName() { - return javaFieldName; - } - - public void setJavaFieldName(String javaFieldName) { - this.javaFieldName = javaFieldName; - } - - public Class getJavaType() { - return javaType; - } - - public void setJavaType(Class javaType) { - this.javaType = javaType; - } - - public QName getXmlElementName() { - return xmlElementName; - } - - public void setXmlElementName(QName xmlElementName) { - this.xmlElementName = xmlElementName; - } - -} diff --git a/tags/java/sca/2.0-M4-RC1/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBean2DOMNodeTransformer.java b/tags/java/sca/2.0-M4-RC1/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBean2DOMNodeTransformer.java deleted file mode 100644 index f582499b70..0000000000 --- a/tags/java/sca/2.0-M4-RC1/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBean2DOMNodeTransformer.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * 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.sca.databinding.javabeans; - -import javax.xml.namespace.QName; - -import org.apache.tuscany.sca.common.xml.dom.DOMHelper; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.w3c.dom.Attr; -import org.w3c.dom.Document; -import org.w3c.dom.Node; - -/** - * Transformer to convert data from a JavaBean object to DOM Node - * - * @version $Rev$ $Date$ - */ -public class JavaBean2DOMNodeTransformer extends JavaBean2XMLTransformer<Node> { - - public static final String COLON = ":"; - private DOMHelper helper; - - public JavaBean2DOMNodeTransformer(ExtensionPointRegistry registry) { - super(); - helper = DOMHelper.getInstance(registry); - } - - @Override - public void appendChild(Node parentElement, Node childElement) throws Java2XMLMapperException { - parentElement.appendChild(childElement); - } - - @Override - public Node createElement(QName qName) throws Java2XMLMapperException { - String qualifedName = - (qName.getPrefix() == null || qName.getPrefix().length() <= 0) ? qName.getLocalPart() - : qName.getPrefix() + COLON + qName.getLocalPart(); - return helper.newDocument().createElementNS(qName.getNamespaceURI(), qualifedName); - } - - @Override - public void appendText(Node parentElement, String textData) throws Java2XMLMapperException { - Document document = helper.newDocument(); - Node textNode; - if (textData != null) { - textNode = document.createTextNode(textData); - } else { - Attr nil = document.createAttributeNS("http://www.w3.org/2001/XMLSchema-instance", "xsi:nil"); - nil.setValue("true"); - textNode = nil; - } - appendChild(parentElement, textNode); - } - - @Override - public Class getTargetType() { - return Node.class; - } - -} diff --git a/tags/java/sca/2.0-M4-RC1/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBean2XMLStreamReaderTransformer.java b/tags/java/sca/2.0-M4-RC1/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBean2XMLStreamReaderTransformer.java deleted file mode 100644 index 4942fef0da..0000000000 --- a/tags/java/sca/2.0-M4-RC1/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBean2XMLStreamReaderTransformer.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * 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.sca.databinding.javabeans; - -import javax.xml.stream.XMLStreamReader; - -import org.apache.tuscany.sca.databinding.PullTransformer; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.TransformationException; -import org.apache.tuscany.sca.databinding.impl.BaseTransformer; -import org.apache.tuscany.sca.databinding.xml.BeanXMLStreamReaderImpl; -import org.apache.tuscany.sca.interfacedef.util.XMLType; - -/** - * Transformer to convert data from a JavaBean object to XMLStreamReader. - * - * @version $Rev$ $Date$ - */ -public class JavaBean2XMLStreamReaderTransformer extends BaseTransformer<Object, XMLStreamReader> implements - PullTransformer<Object, XMLStreamReader> { - - public XMLStreamReader transform(Object source, TransformationContext context) { - try { - javax.xml.namespace.QName name = null; - if (context != null) { - Object logical = context.getSourceDataType().getLogical(); - if (logical instanceof XMLType) { - name = ((XMLType)logical).getElementName(); - } - } - return new BeanXMLStreamReaderImpl(name, source); - } catch (Exception e) { - throw new TransformationException(e); - } - } - - @Override - protected Class<Object> getSourceType() { - return Object.class; - } - - @Override - protected Class<XMLStreamReader> getTargetType() { - return XMLStreamReader.class; - } - - @Override - public int getWeight() { - return 50; - } - -} diff --git a/tags/java/sca/2.0-M4-RC1/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBean2XMLTransformer.java b/tags/java/sca/2.0-M4-RC1/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBean2XMLTransformer.java deleted file mode 100644 index b94b944a98..0000000000 --- a/tags/java/sca/2.0-M4-RC1/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBean2XMLTransformer.java +++ /dev/null @@ -1,262 +0,0 @@ -/* - * 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.sca.databinding.javabeans; - -import java.lang.reflect.Array; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.util.Date; -import java.util.GregorianCalendar; - -import javax.xml.datatype.XMLGregorianCalendar; -import javax.xml.namespace.QName; - -import org.apache.tuscany.sca.databinding.PullTransformer; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.impl.BaseTransformer; -import org.apache.tuscany.sca.databinding.impl.SimpleTypeMapperImpl; -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.util.XMLType; - -/** - * Transformer to convert data from a JavaBean object to xml - * - * @version $Rev$ $Date$ - */ -public abstract class JavaBean2XMLTransformer<T> extends BaseTransformer<Object, T> implements - PullTransformer<Object, T> { - - public static final String GET = "get"; - public static final String PREFIX = "n"; - public static final String PERIOD = "."; - public static final String FWD_SLASH = "/"; - public static final String HTTP = "http://"; - private static int prefixCount = 1; - - protected SimpleTypeMapperImpl mapper; - - public JavaBean2XMLTransformer() { - this.mapper = new SimpleTypeMapperImpl(); - } - - public T transform(Object source, TransformationContext context) { - QName rootElement = null; - if (context != null) { - DataType<?> type = context.getTargetDataType(); - if (type != null) { - Object logical = type.getLogical(); - if (logical instanceof XMLType) { - rootElement = ((XMLType)logical).getElementName(); - } - } - } - //FIXME See how/if we still need to get the metadata here - //QName rootElementName = (QName)context.getTargetDataType().getMetadata("RootElementName"); - //if (rootElementName == null) { - QName rootElementName = new QName(resolveRootElementName(source.getClass())); - //} - - T root = createElement(rootElementName); - appendChildElements(root, resolveElementName(source.getClass()), source.getClass(), source, context); - return root; - } - - private void appendChildElements(T parent, - QName elementName, - Class javaType, - Object javaObject, - TransformationContext context) { - T element = null; - if (javaObject != null) { - if (javaType.isPrimitive() || isSimpleJavaType(javaObject)) { - appendText(parent, mapper.toXMLLiteral(null, javaObject, context)); - } else if (javaType.isArray()) { - int size = Array.getLength(javaObject); - for (int count = 0; count < size; ++count) { - Object item = Array.get(javaObject, count); - element = createElement(elementName); - appendChild(parent, element); - appendChildElements(element, elementName, javaType.getComponentType(), item, context); - } - } else { - Field[] javaFields = javaType.getFields(); - for (Field aField : javaFields) { - try { - QName fieldElementName = new QName(aField.getName()); - if (!aField.getType().isArray()) { - element = createElement(fieldElementName); - appendChild(parent, element); - appendChildElements(element, - fieldElementName, - aField.getType(), - aField.get(javaObject), - context); - } else { - appendChildElements(parent, - fieldElementName, - aField.getType(), - aField.get(javaObject), - context); - } - } catch (IllegalAccessException e) { - Java2XMLMapperException java2xmlEx = new Java2XMLMapperException(e); - java2xmlEx.setJavaFieldName(aField.getName()); - java2xmlEx.setJavaType(javaType); - throw java2xmlEx; - } - } - - Method[] methods = javaType.getMethods(); - String fieldName = null; - for (Method aMethod : methods) { - try { - if (Modifier.isPublic(aMethod.getModifiers()) && aMethod.getName().startsWith(GET) - && aMethod.getParameterTypes().length == 0 - && isMappedGetter(aMethod.getName())) { - fieldName = resolveFieldFromMethod(aMethod.getName()); - try { - javaType.getField(fieldName); - } catch (NoSuchFieldException e) { - QName fieldElementName = new QName(fieldName); - if (aMethod.getReturnType().isArray()) { - appendChildElements(parent, fieldElementName, aMethod.getReturnType(), aMethod - .invoke(javaObject, new Object[0]), context); - } else { - element = createElement(fieldElementName); - appendChild(parent, element); - appendChildElements(element, fieldElementName, aMethod.getReturnType(), aMethod - .invoke(javaObject, new Object[0]), context); - } - } - } - } catch (IllegalAccessException e) { - Java2XMLMapperException java2xmlEx = new Java2XMLMapperException(e); - java2xmlEx.setJavaFieldName(fieldName); - java2xmlEx.setJavaType(javaType); - throw java2xmlEx; - } catch (InvocationTargetException e) { - Java2XMLMapperException java2xmlEx = new Java2XMLMapperException(e); - java2xmlEx.setJavaFieldName(fieldName); - java2xmlEx.setJavaType(javaType); - throw java2xmlEx; - } - } - } - } - } - - /* - * Subclasses can override this method to prevent some getter methods - * from being mapped. The default implementation provided by this class - * maps all getter methods. - */ - protected boolean isMappedGetter(String methodName) { - return true; - } - - @Override - public String getSourceDataBinding() { - return JavaBeansDataBinding.NAME; - } - - @Override - public Class<Object> getSourceType() { - return Object.class; - } - - private boolean isSimpleJavaType(Object javaObject) { - if (javaObject instanceof String) { - return true; - } - if (javaObject instanceof Byte || javaObject instanceof Character - || javaObject instanceof Short - || javaObject instanceof Integer - || javaObject instanceof Long - || javaObject instanceof Float - || javaObject instanceof Double - || javaObject instanceof Boolean) { - return true; - } - if (javaObject instanceof GregorianCalendar || javaObject instanceof Date - || javaObject instanceof XMLGregorianCalendar - || javaObject instanceof byte[] - || javaObject instanceof QName) { - return true; - } - return false; - } - - private String resolveRootElementName(Class javaType) { - if (javaType.isArray()) { - return javaType.getComponentType().getSimpleName() + "_collection"; - } else { - return javaType.getSimpleName() + "_instance"; - } - } - - private QName resolveElementName(Class javaType) { - if (javaType.isArray()) { - return new QName(javaType.getComponentType().getSimpleName()); - } else { - return new QName(javaType.getSimpleName()); - } - } - - private String resolveFieldFromMethod(String methodName) { - StringBuffer fieldName = new StringBuffer(); - fieldName.append(Character.toLowerCase(methodName.charAt(GET.length()))); - fieldName.append(methodName.substring(GET.length() + 1)); - return fieldName.toString(); - } - - public String getNexPrefix() { - return PREFIX + prefixCount++; - } - - @Override - public int getWeight() { - return JavaBeansDataBinding.HEAVY_WEIGHT; - } - - /** - * Create an element with the given name - * @param qName - * @return - * @throws Java2XMLMapperException - */ - public abstract T createElement(QName qName) throws Java2XMLMapperException; - - /** - * Create a text node and add it to the parent - * @param parentElement - * @param textData - * @throws Java2XMLMapperException - */ - public abstract void appendText(T parentElement, String textData) throws Java2XMLMapperException; - - /** - * Add the child element to the parent - * @param parentElement - * @param childElement - * @throws Java2XMLMapperException - */ - public abstract void appendChild(T parentElement, T childElement) throws Java2XMLMapperException; -} diff --git a/tags/java/sca/2.0-M4-RC1/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBeansDataBinding.java b/tags/java/sca/2.0-M4-RC1/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBeansDataBinding.java deleted file mode 100644 index 4981699792..0000000000 --- a/tags/java/sca/2.0-M4-RC1/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBeansDataBinding.java +++ /dev/null @@ -1,162 +0,0 @@ -/* - * 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.sca.databinding.javabeans; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.io.ObjectStreamClass; -import java.io.OutputStream; -import java.io.Serializable; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.logging.Logger; - -import org.apache.tuscany.sca.databinding.impl.BaseDataBinding; -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.Operation; - -/** - * DataBinding for JavaBeans - * - * @version $Rev$ $Date$ - */ -public class JavaBeansDataBinding extends BaseDataBinding { - private final static Logger logger = Logger.getLogger(JavaBeansDataBinding.class.getName()); - /** - * Defining a weight to a very high number so that the transformer won't be picked - * up by other paths unless it's the only available path - */ - public static final int HEAVY_WEIGHT = 10000; - public static final String NAME = "java:complexType"; - - public JavaBeansDataBinding() { - super(NAME, Object.class); - } - - protected JavaBeansDataBinding(String name, Class<?> baseType) { - super(name, baseType); - } - - @Override - public Object copy(Object arg, DataType dataType, Operation operation) { - if (arg == null) { - 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) - || Byte.class.isAssignableFrom(clazz)) { - // Immutable classes - return arg; - } - try { - if (arg instanceof Serializable) { - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - ObjectOutputStream oos = getObjectOutputStream(bos); - oos.writeObject(arg); - oos.close(); - bos.close(); - - // Work out which ClassLoader to use for deserializing arg - // We want to use: - // * The ClassLoader of arg if it is not the System ClassLoader - // * The ThreadContext ClassLoader if the ClassLoader of arg is the System ClassLoader - // because Collection classes are loaded by the System ClassLoader but their contents - // may be loaded from another ClassLoader - // - ClassLoader classLoaderToUse = clazz.getClassLoader(); - if (classLoaderToUse == null) - { - // ClassLoader of arg is the System ClassLoader so we will use the ThreadContext ClassLoader - // instead - classLoaderToUse = Thread.currentThread().getContextClassLoader(); - } - - ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); - ObjectInputStream ois = getObjectInputStream(bis, classLoaderToUse); - Object objectCopy = ois.readObject(); - ois.close(); - bis.close(); - return objectCopy; - } else if (arg instanceof Cloneable) { - Method clone; - try { - clone = arg.getClass().getMethod("clone"); - try { - return clone.invoke(arg, (Object[])null); - } catch (InvocationTargetException e) { - if (e.getTargetException() instanceof CloneNotSupportedException) { - // Ignore - } else { - throw new IllegalArgumentException(e); - } - } catch (Exception e) { - throw new IllegalArgumentException(e); - } - } catch (NoSuchMethodException e) { - // Ignore it - } - } - // return arg; - logger.warning("Argument type '" + arg.getClass().getName() - + "' is not Serializable or Cloneable. Pass-by-value is skipped."); - return arg; - } catch (Exception e) { - throw new IllegalArgumentException("Pass-by-value is not supported for the given object: " + arg.getClass() - .getName(), e); - } - } - - protected ObjectOutputStream getObjectOutputStream(OutputStream os) throws IOException { - return new ObjectOutputStream(os); - } - - protected ObjectInputStream getObjectInputStream(InputStream is, final ClassLoader cl) throws IOException { - ObjectInputStream ois = new ObjectInputStream(is) { - @Override - protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException { - try { - return Class.forName(desc.getName(), false, cl); - } catch (ClassNotFoundException e) { - try { - // For OSGi, use context ClassLoader if the bundle ClassLoader cannot load the class - if (cl != Thread.currentThread().getContextClassLoader()) { - return Class.forName(desc.getName(), false, Thread.currentThread().getContextClassLoader()); - } - } catch (ClassNotFoundException e1) { - // ignore - } catch (NoClassDefFoundError e1) { - // ignore - } - return super.resolveClass(desc); - } - } - - }; - return ois; - } - -} diff --git a/tags/java/sca/2.0-M4-RC1/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaExceptionDataBinding.java b/tags/java/sca/2.0-M4-RC1/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaExceptionDataBinding.java deleted file mode 100644 index 6886462ac8..0000000000 --- a/tags/java/sca/2.0-M4-RC1/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaExceptionDataBinding.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * 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.sca.databinding.javabeans; - - -/** - * DataBinding for Java Exceptions - * - * @version $Rev$ $Date$ - */ -public class JavaExceptionDataBinding extends JavaBeansDataBinding { - - public static final String NAME = "java:exception"; - - public JavaExceptionDataBinding() { - super(NAME, null); - } -} diff --git a/tags/java/sca/2.0-M4-RC1/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/SimpleJavaDataBinding.java b/tags/java/sca/2.0-M4-RC1/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/SimpleJavaDataBinding.java deleted file mode 100644 index b8b97d4425..0000000000 --- a/tags/java/sca/2.0-M4-RC1/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/SimpleJavaDataBinding.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * 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.sca.databinding.javabeans; - - -import javax.xml.namespace.QName; - -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.databinding.SimpleTypeMapper; -import org.apache.tuscany.sca.databinding.impl.BaseDataBinding; -import org.apache.tuscany.sca.databinding.impl.SimpleTypeMapperImpl; -import org.apache.tuscany.sca.databinding.xml.XMLStringDataBinding; -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.interfacedef.util.TypeInfo; -import org.apache.tuscany.sca.interfacedef.util.XMLType; - -/** - * DataBinding for Java simple types - * - * @version $Rev$ $Date$ - */ -public class SimpleJavaDataBinding extends BaseDataBinding { - public static final String NAME = "java:simpleType"; - private SimpleTypeMapper simpleTypeMapper = new SimpleTypeMapperImpl(); - - public SimpleJavaDataBinding(ExtensionPointRegistry registry) { - super(NAME, Object.class); -// UtilityExtensionPoint utilityExtensionPoint = registry.getExtensionPoint(UtilityExtensionPoint.class); -// this.simpleTypeMapper = utilityExtensionPoint.getUtility(SimpleTypeMapper.class); - } - - @Override - public Object copy(Object arg, DataType dataType, Operation operation) { - if (arg instanceof byte[]) { - return ((byte[])arg).clone(); - } - return arg; - } - - @Override - public boolean introspect(DataType type, Operation operation) { - Class<?> cls = type.getPhysical(); - if (cls == Object.class) { - return false; - } - // HACK: [rfeng] By pass the one know to XMLString - String db = type.getDataBinding(); - if (db != null && (XMLStringDataBinding.NAME.equals(db))) { - return false; - } - if (SimpleTypeMapperImpl.JAVA2XML.keySet().contains(cls)) { - type.setDataBinding(NAME); - QName elementName = null; - Object logical = type.getLogical(); - if (logical instanceof XMLType) { - elementName = ((XMLType)logical).getElementName(); - } - TypeInfo typeInfo = simpleTypeMapper.getXMLType(cls); - type.setLogical(new XMLType(elementName, typeInfo == null ? null : typeInfo.getQName())); - return true; - } else { - return false; - } - } - -} diff --git a/tags/java/sca/2.0-M4-RC1/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/XML2JavaBeanTransformer.java b/tags/java/sca/2.0-M4-RC1/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/XML2JavaBeanTransformer.java deleted file mode 100644 index 6a30605f0f..0000000000 --- a/tags/java/sca/2.0-M4-RC1/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/XML2JavaBeanTransformer.java +++ /dev/null @@ -1,329 +0,0 @@ -/* - * 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.sca.databinding.javabeans; - -import java.lang.reflect.Array; -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import javax.xml.namespace.QName; - -import org.apache.tuscany.sca.databinding.PullTransformer; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.impl.BaseTransformer; -import org.apache.tuscany.sca.databinding.impl.SimpleTypeMapperImpl; -import org.apache.tuscany.sca.interfacedef.util.XMLType; - -/** - * Transformer to convert data from XML to JavaBean - * - * @version $Rev$ $Date$ - */ -public abstract class XML2JavaBeanTransformer<T> extends BaseTransformer<T, Object> implements - PullTransformer<T, Object> { - - public static final String SET = "set"; - public static final QName QNAME_MESSAGE = new QName("message"); - - protected SimpleTypeMapperImpl mapper; - - public XML2JavaBeanTransformer() { - this.mapper = new SimpleTypeMapperImpl(); - } - - @Override - public int getWeight() { - return JavaBeansDataBinding.HEAVY_WEIGHT; - } - - public Object transform(T source, TransformationContext context) { - //FIXME why is the logical type sometimes a Class instead of an XMLType? - if (context.getSourceDataType().getLogical() instanceof XMLType) { - XMLType xmlType = (XMLType) context.getSourceDataType().getLogical(); - return toJavaObject(xmlType.getTypeName(), getRootElement(source), context); - } else { - return toJavaObject(null, getRootElement(source), context); - } - } - - public Object toJavaObject(QName xmlType, T xmlElement, TransformationContext context) { - if (xmlType != null && mapper.isSimpleXSDType(xmlType)) { - return mapper.toJavaObject(xmlType, getText(xmlElement), context); - } else { - Class<?> javaType = (Class<?>)context.getTargetDataType().getPhysical(); - return createJavaObject(xmlElement, javaType, context); - } - } - - @SuppressWarnings("unchecked") - private <L> L createJavaObject(T element, Class<L> javaType, TransformationContext context) - throws XML2JavaMapperException { - if (isTextOnly(element)) { - return (L) mapper.toJavaObject(mapper.getXMLType(javaType).getQName(), - getText(element), - context); - } else { - String fieldName = null; - try { - L javaInstance; - T detailMsg = null; - if (Throwable.class.isAssignableFrom(javaType)) { - T msgElement = getFirstChildWithName(element, QNAME_MESSAGE); - if (msgElement != null && isTextOnly(msgElement)) { - detailMsg = msgElement; // skip this when handling child elements - Constructor constructor = javaType.getConstructor(new Class[] {String.class}); - javaInstance = (L)constructor.newInstance(new Object[] {getText(detailMsg)}); - } else { - javaInstance = javaType.newInstance(); - } - } else { - javaInstance = javaType.newInstance(); - } - Map<Field, List<Object>> arrayFields = new Hashtable<Field, List<Object>>(); - Map<Method, List<Object>> arraySetters = new Hashtable<Method, List<Object>>(); - - for (Iterator<T> childElements = getChildElements(element); childElements.hasNext(); ) { - T childElement = childElements.next(); - if (!isTextElement(childElement) && childElement != detailMsg) { - fieldName = getElementName(childElement); - try { - Field javaField = javaType.getField(fieldName); - setFieldValue(javaInstance, - javaField, - childElement, - arrayFields, - context); - - } catch (NoSuchFieldException e1) { - setFieldValueUsingSetter(javaType, - javaInstance, - fieldName, - childElement, - arraySetters, - context); - } - } - } - - setArrayValues(javaInstance, arrayFields, arraySetters); - return javaInstance; - } catch (Exception e2) { - XML2JavaMapperException xml2JavaEx = new XML2JavaMapperException(e2); - xml2JavaEx.setJavaType(javaType); - xml2JavaEx.setJavaFieldName(fieldName); - throw xml2JavaEx; - } - } - } - - private void setFieldValue(Object javaInstance, - Field javaField, - T fieldValue, - Map<Field, List<Object>> arrayFields, - TransformationContext context) throws IllegalAccessException { - Class<?> javaFieldType = (Class<?>) javaField.getType(); - - if (javaFieldType.isArray()) { - Class<?> componentType = javaFieldType.getComponentType(); - List<Object> fldValueArray = arrayFields.get(javaField); - if (fldValueArray == null) { - fldValueArray = new ArrayList<Object>(); - arrayFields.put(javaField, fldValueArray); - } - fldValueArray.add(createJavaObject(fieldValue, componentType, context)); - } else { - javaField.setAccessible(true); - javaField.set(javaInstance, createJavaObject(fieldValue, javaFieldType, context)); - } - } - - private void setFieldValueUsingSetter(Class javaType, - Object javaInstance, - String fieldName, - T fieldValue, - Map<Method, List<Object>> arraySetters, - TransformationContext context) throws IllegalAccessException, - InvocationTargetException { - char firstChar = Character.toUpperCase(fieldName.charAt(0)); - StringBuilder methodName = new StringBuilder(SET + fieldName); - methodName.setCharAt(SET.length(), firstChar); - boolean methodNotFound = true; - - for (int methodCount = 0; methodNotFound && methodCount < javaType.getMethods().length; ++methodCount) { - Method aMethod = javaType.getMethods()[methodCount]; - if (aMethod.getName().equals(methodName.toString()) - && aMethod.getParameterTypes().length == 1) { - Class<?> paramType = aMethod.getParameterTypes()[0]; - - if (paramType.isArray()) { - Class<?> componentType = paramType.getComponentType(); - List<Object> setterValueArray = arraySetters.get(aMethod); - if (setterValueArray == null) { - setterValueArray = new ArrayList<Object>(); - arraySetters.put(aMethod, setterValueArray); - } - setterValueArray.add(createJavaObject(fieldValue, componentType, context)); - } else { - aMethod.invoke(javaInstance, new Object[] {createJavaObject(fieldValue, - paramType, - context)}); - } - methodNotFound = false; - } - } - - if (methodNotFound) { - XML2JavaMapperException xml2JavaEx = - new XML2JavaMapperException("No field or setter method to configure xml data"); - xml2JavaEx.setJavaFieldName(fieldName); - xml2JavaEx.setJavaType(javaType); - throw xml2JavaEx; - } - } - - private void setArrayValues(Object javaInstance, - Map<Field, List<Object>> arrayFields, - Map<Method, List<Object>> arraySetters) throws IllegalAccessException, - InvocationTargetException { - if (arrayFields.size() > 0) { - for (Field javaField : arrayFields.keySet()) { - javaField.setAccessible(true); - - if (javaField.getType().getComponentType().isPrimitive()) { - javaField.set(javaInstance, createPrimitiveArray(javaField.getType() - .getComponentType(), - arrayFields.get(javaField))); - } else { - javaField.set(javaInstance, - createNonPrimitiveArray(javaField.getType().getComponentType(), - arrayFields.get(javaField))); - } - } - } - - if (arraySetters.size() > 0) { - for (Method aMethod : arraySetters.keySet()) { - Class<?> paramType = aMethod.getParameterTypes()[0]; - if (paramType.getComponentType().isPrimitive()) { - aMethod.invoke(javaInstance, - new Object[] {createPrimitiveArray(paramType.getComponentType(), - arraySetters.get(aMethod))}); - } else { - aMethod.invoke(javaInstance, - new Object[] {createNonPrimitiveArray(paramType.getComponentType(), - arraySetters.get(aMethod))}); - } - } - } - } - - private Object createNonPrimitiveArray(Class fieldType, List values) { - Object objectArray = Array.newInstance(fieldType, values.size()); - for (int count = 0; count < values.size(); ++count) { - Array.set(objectArray, count, values.get(count)); - } - return objectArray; - } - - private Object createPrimitiveArray(Class fieldType, List values) { - if (fieldType.isPrimitive()) { - if (fieldType.getName().equals("int")) { - int[] primitiveValues = new int[values.size()]; - for (int count = 0; count < values.size(); ++count) { - primitiveValues[count] = ((Integer) values.get(count)).intValue(); - } - return primitiveValues; - } else if (fieldType.getName().equals("float")) { - float[] primitiveValues = new float[values.size()]; - for (int count = 0; count < values.size(); ++count) { - primitiveValues[count] = ((Float) values.get(count)).floatValue(); - } - return primitiveValues; - } else if (fieldType.getName().equals("boolean")) { - boolean[] primitiveValues = new boolean[values.size()]; - for (int count = 0; count < values.size(); ++count) { - primitiveValues[count] = ((Boolean) values.get(count)).booleanValue(); - } - return primitiveValues; - } else if (fieldType.getName().equals("char")) { - char[] primitiveValues = new char[values.size()]; - for (int count = 0; count < values.size(); ++count) { - primitiveValues[count] = ((Character) values.get(count)).charValue(); - } - return primitiveValues; - } else if (fieldType.getName().equals("byte")) { - byte[] primitiveValues = new byte[values.size()]; - for (int count = 0; count < values.size(); ++count) { - primitiveValues[count] = ((Byte) values.get(count)).byteValue(); - } - return primitiveValues; - } else if (fieldType.getName().equals("short")) { - short[] primitiveValues = new short[values.size()]; - for (int count = 0; count < values.size(); ++count) { - primitiveValues[count] = ((Short) values.get(count)).shortValue(); - } - return primitiveValues; - } else if (fieldType.getName().equals("long")) { - long[] primitiveValues = new long[values.size()]; - for (int count = 0; count < values.size(); ++count) { - primitiveValues[count] = ((Long) values.get(count)).longValue(); - } - return primitiveValues; - } else if (fieldType.getName().equals("double")) { - double[] primitiveValues = new double[values.size()]; - for (int count = 0; count < values.size(); ++count) { - primitiveValues[count] = ((Double) values.get(count)).doubleValue(); - } - return primitiveValues; - } - } - return values; - } - - public abstract String getText(T source) throws XML2JavaMapperException; - - public abstract Iterator<T> getChildElements(T parent) throws XML2JavaMapperException; - - public abstract String getElementName(T element) throws XML2JavaMapperException; - - public abstract boolean isTextElement(T element) throws XML2JavaMapperException; - - public abstract boolean isTextOnly(T element) throws XML2JavaMapperException; - - public abstract T getFirstChildWithName(T element, QName name) throws XML2JavaMapperException; - - public abstract T getRootElement(T element) throws XML2JavaMapperException; - - @Override - public Class<Object> getTargetType() { - return Object.class; - } - - @Override - public String getTargetDataBinding() { - return JavaBeansDataBinding.NAME; - } -} diff --git a/tags/java/sca/2.0-M4-RC1/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/XML2JavaMapperException.java b/tags/java/sca/2.0-M4-RC1/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/XML2JavaMapperException.java deleted file mode 100644 index ae06d68e67..0000000000 --- a/tags/java/sca/2.0-M4-RC1/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/XML2JavaMapperException.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * 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.sca.databinding.javabeans; - -import javax.xml.namespace.QName; - -/** - * This exception is used to encapsulate and rethrow exceptions that arise out - * of converting XML Data to Java Objects. - * - * @version $Rev$ $Date$ - */ -public class XML2JavaMapperException extends RuntimeException { - private static final long serialVersionUID = 6596530102591630642L; - - private QName xmlElementName; - private String javaFieldName; - private Class javaType; - - public XML2JavaMapperException(String message) { - super(message); - } - - public XML2JavaMapperException(Throwable cause) { - super(cause); - } - - public QName getXmlElementName() { - return xmlElementName; - } - - public void setXmlElementName(QName xmlElementName) { - this.xmlElementName = xmlElementName; - } - - public String getJavaFieldName() { - return javaFieldName; - } - - public void setJavaFieldName(String javaFieldName) { - this.javaFieldName = javaFieldName; - } - - public Class getJavaType() { - return javaType; - } - - public void setJavaType(Class javaType) { - this.javaType = javaType; - } - - @Override - public String getMessage() { - return super.getMessage() + " <" + getJavaFieldName() + "> " + " in <" + getJavaType() + ">"; - } - - - -} |