summaryrefslogtreecommitdiffstats
path: root/java/sca/modules/databinding/src
diff options
context:
space:
mode:
authorrfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68>2009-07-21 07:03:47 +0000
committerrfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68>2009-07-21 07:03:47 +0000
commitab6904bc2f622129bc548391745b08eb0c219e57 (patch)
tree5c7599119182bfa8e65c0d6605e933396aedffd2 /java/sca/modules/databinding/src
parent8d70ef6d556ad29b93d5d40e91c4c9304638c9e9 (diff)
Fix svn:eol-style and svn:keywords properties for java/xml files
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@796166 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/sca/modules/databinding/src')
-rw-r--r--java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/externalizable/ExternalizableDataBinding.java78
-rw-r--r--java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/DOMNode2JavaBeanTransformer.java196
-rw-r--r--java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/Java2XMLMapperException.java138
-rw-r--r--java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBean2DOMNodeTransformer.java158
-rw-r--r--java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBean2XMLTransformer.java524
-rw-r--r--java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBeansDataBinding.java324
-rw-r--r--java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaExceptionDataBinding.java70
-rw-r--r--java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/XML2JavaBeanTransformer.java658
-rw-r--r--java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/XML2JavaMapperException.java152
-rw-r--r--java/sca/modules/databinding/src/test/resources/org/apache/tuscany/sca/databinding/impl/order.wsdl150
10 files changed, 1224 insertions, 1224 deletions
diff --git a/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/externalizable/ExternalizableDataBinding.java b/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/externalizable/ExternalizableDataBinding.java
index 6f3456fdf0..51ca792171 100644
--- a/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/externalizable/ExternalizableDataBinding.java
+++ b/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/externalizable/ExternalizableDataBinding.java
@@ -1,39 +1,39 @@
-/*
- * 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.externalizable;
-
-import org.apache.tuscany.sca.databinding.impl.BaseDataBinding;
-
-/**
- * DataNinding for Externalizable objects.
- *
- * @version $Rev$ $Date$
- */
-public class ExternalizableDataBinding extends BaseDataBinding {
-
- public static final String NAME = java.io.Externalizable.class.getName();
-
- public ExternalizableDataBinding() {
- super(NAME, java.io.Externalizable.class);
- }
-
-
-
-}
+/*
+ * 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.externalizable;
+
+import org.apache.tuscany.sca.databinding.impl.BaseDataBinding;
+
+/**
+ * DataNinding for Externalizable objects.
+ *
+ * @version $Rev$ $Date$
+ */
+public class ExternalizableDataBinding extends BaseDataBinding {
+
+ public static final String NAME = java.io.Externalizable.class.getName();
+
+ public ExternalizableDataBinding() {
+ super(NAME, java.io.Externalizable.class);
+ }
+
+
+
+}
diff --git a/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/DOMNode2JavaBeanTransformer.java b/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/DOMNode2JavaBeanTransformer.java
index f86d1b29e0..fbca9b0444 100644
--- a/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/DOMNode2JavaBeanTransformer.java
+++ b/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/DOMNode2JavaBeanTransformer.java
@@ -1,98 +1,98 @@
-/*
- * 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;
- }
-}
+/*
+ * 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/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/Java2XMLMapperException.java b/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/Java2XMLMapperException.java
index 9615f43572..5dc13bd60b 100644
--- a/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/Java2XMLMapperException.java
+++ b/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/Java2XMLMapperException.java
@@ -1,69 +1,69 @@
-/*
- * 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;
- }
-
-}
+/*
+ * 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/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBean2DOMNodeTransformer.java b/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBean2DOMNodeTransformer.java
index 58f594751a..b29fdf4c55 100644
--- a/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBean2DOMNodeTransformer.java
+++ b/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBean2DOMNodeTransformer.java
@@ -1,79 +1,79 @@
-/*
- * 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 javax.xml.parsers.ParserConfigurationException;
-
-import org.apache.tuscany.sca.databinding.impl.DOMHelper;
-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 Document factory;
-
- public JavaBean2DOMNodeTransformer() {
- super();
- try {
- factory = DOMHelper.newDocument();
- } catch (ParserConfigurationException e) {
- throw new Java2XMLMapperException(e);
- }
- }
-
- @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 factory.createElementNS(qName.getNamespaceURI(), qualifedName);
- }
-
- @Override
- public void appendText(Node parentElement, String textData) throws Java2XMLMapperException {
- Node textNode;
- if (textData != null) {
- textNode = factory.createTextNode(textData);
- } else {
- Attr nil = factory.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;
- }
-
-}
+/*
+ * 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 javax.xml.parsers.ParserConfigurationException;
+
+import org.apache.tuscany.sca.databinding.impl.DOMHelper;
+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 Document factory;
+
+ public JavaBean2DOMNodeTransformer() {
+ super();
+ try {
+ factory = DOMHelper.newDocument();
+ } catch (ParserConfigurationException e) {
+ throw new Java2XMLMapperException(e);
+ }
+ }
+
+ @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 factory.createElementNS(qName.getNamespaceURI(), qualifedName);
+ }
+
+ @Override
+ public void appendText(Node parentElement, String textData) throws Java2XMLMapperException {
+ Node textNode;
+ if (textData != null) {
+ textNode = factory.createTextNode(textData);
+ } else {
+ Attr nil = factory.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/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBean2XMLTransformer.java b/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBean2XMLTransformer.java
index b96b394bb8..b94b944a98 100644
--- a/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBean2XMLTransformer.java
+++ b/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBean2XMLTransformer.java
@@ -1,262 +1,262 @@
-/*
- * 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;
-}
+/*
+ * 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/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBeansDataBinding.java b/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBeansDataBinding.java
index 2234aa07c2..4981699792 100644
--- a/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBeansDataBinding.java
+++ b/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBeansDataBinding.java
@@ -1,162 +1,162 @@
-/*
- * 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;
- }
-
-}
+/*
+ * 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/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaExceptionDataBinding.java b/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaExceptionDataBinding.java
index 7ae64c6a27..6886462ac8 100644
--- a/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaExceptionDataBinding.java
+++ b/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaExceptionDataBinding.java
@@ -1,35 +1,35 @@
-/*
- * 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);
- }
-}
+/*
+ * 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/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/XML2JavaBeanTransformer.java b/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/XML2JavaBeanTransformer.java
index b441340c38..6a30605f0f 100644
--- a/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/XML2JavaBeanTransformer.java
+++ b/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/XML2JavaBeanTransformer.java
@@ -1,329 +1,329 @@
-/*
- * 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;
- }
-}
+/*
+ * 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/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/XML2JavaMapperException.java b/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/XML2JavaMapperException.java
index a723fd445c..ae06d68e67 100644
--- a/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/XML2JavaMapperException.java
+++ b/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/XML2JavaMapperException.java
@@ -1,76 +1,76 @@
-/*
- * 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() + ">";
- }
-
-
-
-}
+/*
+ * 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() + ">";
+ }
+
+
+
+}
diff --git a/java/sca/modules/databinding/src/test/resources/org/apache/tuscany/sca/databinding/impl/order.wsdl b/java/sca/modules/databinding/src/test/resources/org/apache/tuscany/sca/databinding/impl/order.wsdl
index 100890e10b..f011ca9f32 100644
--- a/java/sca/modules/databinding/src/test/resources/org/apache/tuscany/sca/databinding/impl/order.wsdl
+++ b/java/sca/modules/databinding/src/test/resources/org/apache/tuscany/sca/databinding/impl/order.wsdl
@@ -1,76 +1,76 @@
-<?xml version="1.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.
--->
-<definitions name="StockQuote" targetNamespace="http://example.com/order.wsdl" xmlns:tns="http://example.com/order.wsdl"
- xmlns:xsd1="http://example.com/order.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns="http://schemas.xmlsoap.org/wsdl/">
-
- <types>
- <schema targetNamespace="http://example.com/order.xsd" xmlns="http://www.w3.org/2001/XMLSchema"
- xmlns:ipo="http://www.example.com/IPO">
- <import namespace="http://www.example.com/IPO" schemaLocation="ipo.xsd"/>
- <element name="checkOrderStatus">
- <complexType>
- <sequence>
- <element name="customerId" type="string" />
- <element name="order" type="ipo:PurchaseOrderType" />
- <element name="flag" type="int" />
- </sequence>
- </complexType>
- </element>
- <element name="checkOrderStatusResponse">
- <complexType>
- <sequence>
- <element name="status" type="string" />
- </sequence>
- </complexType>
- </element>
- <element name="note" type="string" />
- </schema>
- </types>
-
- <message name="CheckOrderStatusInput1">
- <part name="body" element="xsd1:checkOrderStatus" />
- </message>
-
- <message name="CheckOrderStatusOutput1">
- <part name="body" element="xsd1:checkOrderStatusResponse" />
- </message>
-
- <message name="CheckOrderStatusInput2">
- <part name="p1" element="xsd1:checkOrderStatus" />
- <part name="p2" element="xsd1:note" />
- </message>
-
- <message name="CheckOrderStatusOutput2">
- <part name="p1" element="xsd1:checkOrderStatusResponse" />
- </message>
-
- <portType name="OrderPortType">
- <operation name="checkOrderStatus">
- <input message="tns:CheckOrderStatusInput1" />
- <output message="tns:CheckOrderStatusOutput1" />
- </operation>
- <operation name="checkOrderStatus2">
- <input message="tns:CheckOrderStatusInput2" />
- <output message="tns:CheckOrderStatusOutput2" />
- </operation>
- </portType>
-
+<?xml version="1.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.
+-->
+<definitions name="StockQuote" targetNamespace="http://example.com/order.wsdl" xmlns:tns="http://example.com/order.wsdl"
+ xmlns:xsd1="http://example.com/order.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns="http://schemas.xmlsoap.org/wsdl/">
+
+ <types>
+ <schema targetNamespace="http://example.com/order.xsd" xmlns="http://www.w3.org/2001/XMLSchema"
+ xmlns:ipo="http://www.example.com/IPO">
+ <import namespace="http://www.example.com/IPO" schemaLocation="ipo.xsd"/>
+ <element name="checkOrderStatus">
+ <complexType>
+ <sequence>
+ <element name="customerId" type="string" />
+ <element name="order" type="ipo:PurchaseOrderType" />
+ <element name="flag" type="int" />
+ </sequence>
+ </complexType>
+ </element>
+ <element name="checkOrderStatusResponse">
+ <complexType>
+ <sequence>
+ <element name="status" type="string" />
+ </sequence>
+ </complexType>
+ </element>
+ <element name="note" type="string" />
+ </schema>
+ </types>
+
+ <message name="CheckOrderStatusInput1">
+ <part name="body" element="xsd1:checkOrderStatus" />
+ </message>
+
+ <message name="CheckOrderStatusOutput1">
+ <part name="body" element="xsd1:checkOrderStatusResponse" />
+ </message>
+
+ <message name="CheckOrderStatusInput2">
+ <part name="p1" element="xsd1:checkOrderStatus" />
+ <part name="p2" element="xsd1:note" />
+ </message>
+
+ <message name="CheckOrderStatusOutput2">
+ <part name="p1" element="xsd1:checkOrderStatusResponse" />
+ </message>
+
+ <portType name="OrderPortType">
+ <operation name="checkOrderStatus">
+ <input message="tns:CheckOrderStatusInput1" />
+ <output message="tns:CheckOrderStatusOutput1" />
+ </operation>
+ <operation name="checkOrderStatus2">
+ <input message="tns:CheckOrderStatusInput2" />
+ <output message="tns:CheckOrderStatusOutput2" />
+ </operation>
+ </portType>
+
</definitions> \ No newline at end of file