Author: rfeng
Date: Wed May 28 10:36:29 2008
New Revision: 661026
URL: http://svn.apache.org/viewvc?rev=661026&view=rev
Log:
Enhance the wrapper processing by adding wrapper bean classes
Added:
incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/com/
incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/com/example/
incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/com/example/stock/
incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/com/example/stock/StockQuoteOffer.java
(with props)
Modified:
incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Input2InputTransformer.java
incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Output2OutputTransformer.java
incubator/tuscany/java/sca/modules/databinding-axiom/src/main/java/org/apache/tuscany/sca/databinding/axiom/OMElementWrapperHandler.java
incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextCache.java
incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBWrapperHandler.java
incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandlerTestCase.java
incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOWrapperHandler.java
incubator/tuscany/java/sca/modules/databinding-sdo/src/test/java/org/apache/tuscany/sca/databinding/sdo/SDOWrapperHandlerTestCase.java
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/WrapperHandler.java
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/DOMWrapperHandler.java
incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSJavaInterfaceProcessor.java
incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/DataType.java
incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/impl/DataTypeImpl.java
incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/util/FaultException.java
incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/util/WrapperInfo.java
Modified:
incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Input2InputTransformer.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Input2InputTransformer.java?rev=661026&r1=661025&r2=661026&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Input2InputTransformer.java
(original)
+++
incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Input2InputTransformer.java
Wed May 28 10:36:29 2008
@@ -117,16 +117,18 @@
ElementInfo wrapperElement = wrapper.getInputWrapperElement();
if (source == null) {
- Object targetWrapper =
targetWrapperHandler.create(wrapperElement, context);
+ Object targetWrapper =
targetWrapperHandler.create(wrapperElement, null, context);
return new Object[] {targetWrapper};
}
// If the source can be wrapped, wrapped it first
if (sourceWrapperHandler != null) {
+ Class<?> sourceWrapperClass =
+ sourceOp.getWrapper() != null ?
sourceOp.getWrapper().getInputWrapperClass() : null;
DataType sourceWrapperType =
- sourceWrapperHandler.getWrapperType(wrapperElement,
wrapper.getInputChildElements(), context);
+ sourceWrapperHandler.getWrapperType(wrapperElement,
sourceWrapperClass, context);
if (sourceWrapperType != null) {
- Object sourceWrapper =
sourceWrapperHandler.create(wrapperElement, context);
+ Object sourceWrapper =
sourceWrapperHandler.create(wrapperElement, null, context);
if (sourceWrapper != null) {
for (int i = 0; i < source.length; i++) {
ElementInfo argElement =
wrapper.getInputChildElements().get(i);
@@ -140,7 +142,7 @@
}
}
// Fall back to child by child transformation
- Object targetWrapper = targetWrapperHandler.create(wrapperElement,
context);
+ Object targetWrapper = targetWrapperHandler.create(wrapperElement,
null, context);
List<DataType> argTypes =
wrapper.getUnwrappedInputType().getLogical();
for (int i = 0; i < source.length; i++) {
@@ -163,8 +165,11 @@
// FIXME: This is a workaround for the wsdless support as it
passes in child elements
// under the wrapper that only matches by position
if (sourceWrapperHandler.isInstance(sourceWrapper,
wrapperElement, childElements, context)) {
+ Class<?> targetWrapperClass =
+ targetOp.getWrapper() != null ?
targetOp.getWrapper().getInputWrapperClass() : null;
+
DataType targetWrapperType =
- targetWrapperHandler.getWrapperType(wrapperElement,
childElements, context);
+ targetWrapperHandler.getWrapperType(wrapperElement,
targetWrapperClass, context);
if (targetWrapperType != null) {
Object targetWrapper =
mediator.mediate(sourceWrapper,
sourceType.getLogical().get(0), targetWrapperType, context
Modified:
incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Output2OutputTransformer.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Output2OutputTransformer.java?rev=661026&r1=661025&r2=661026&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Output2OutputTransformer.java
(original)
+++
incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Output2OutputTransformer.java
Wed May 28 10:36:29 2008
@@ -136,10 +136,11 @@
// If the source can be wrapped, wrapped it first
if (sourceWrapperHandler != null) {
- DataType sourceWrapperType =
- sourceWrapperHandler.getWrapperType(wrapperElement,
childElements, context);
+ Class<?> sourceWrapperClass =
+ sourceOp.getWrapper() != null ?
sourceOp.getWrapper().getOutputWrapperClass() : null;
+ DataType sourceWrapperType =
sourceWrapperHandler.getWrapperType(wrapperElement, null, context);
if (sourceWrapperType != null) {
- Object sourceWrapper =
sourceWrapperHandler.create(wrapperElement, context);
+ Object sourceWrapper =
sourceWrapperHandler.create(wrapperElement, null, context);
if (sourceWrapper != null) {
if (!childElements.isEmpty()) {
// Set the return value
@@ -153,7 +154,7 @@
}
}
}
- Object targetWrapper =
targetWrapperHandler.create(wrapper.getOutputWrapperElement(), context);
+ Object targetWrapper =
targetWrapperHandler.create(wrapper.getOutputWrapperElement(), null, context);
if (childElements.isEmpty()) {
// void output
@@ -179,8 +180,11 @@
// FIXME: This is a workaround for the wsdless support as
it passes in child elements
// under the wrapper that only matches by position
if (sourceWrapperHandler.isInstance(sourceWrapper,
wrapperElement, childElements, context)) {
+ Class<?> targetWrapperClass =
+ targetOp.getWrapper() != null ?
targetOp.getWrapper().getOutputWrapperClass() : null;
+
DataType targetWrapperType =
-
targetWrapperHandler.getWrapperType(wrapperElement, childElements, context);
+
targetWrapperHandler.getWrapperType(wrapperElement, targetWrapperClass,
context);
if (targetWrapperType != null) {
Object targetWrapper =
mediator.mediate(sourceWrapper,
sourceType.getLogical(), targetWrapperType, context
Modified:
incubator/tuscany/java/sca/modules/databinding-axiom/src/main/java/org/apache/tuscany/sca/databinding/axiom/OMElementWrapperHandler.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-axiom/src/main/java/org/apache/tuscany/sca/databinding/axiom/OMElementWrapperHandler.java?rev=661026&r1=661025&r2=661026&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/databinding-axiom/src/main/java/org/apache/tuscany/sca/databinding/axiom/OMElementWrapperHandler.java
(original)
+++
incubator/tuscany/java/sca/modules/databinding-axiom/src/main/java/org/apache/tuscany/sca/databinding/axiom/OMElementWrapperHandler.java
Wed May 28 10:36:29 2008
@@ -55,7 +55,7 @@
this.factory = OMAbstractFactory.getOMFactory();
}
- public OMElement create(ElementInfo element, TransformationContext
context) {
+ public OMElement create(ElementInfo element, Class<? extends OMElement>
wrapperClass, TransformationContext context) {
OMElement wrapper = AxiomHelper.createOMElement(factory,
element.getQName());
return wrapper;
}
@@ -101,9 +101,9 @@
}
/**
- * @see
org.apache.tuscany.sca.databinding.WrapperHandler#getWrapperType(org.apache.tuscany.sca.interfacedef.util.ElementInfo,
List, org.apache.tuscany.sca.databinding.TransformationContext)
+ * @see
org.apache.tuscany.sca.databinding.WrapperHandler#getWrapperType(org.apache.tuscany.sca.interfacedef.util.ElementInfo,
Class, org.apache.tuscany.sca.databinding.TransformationContext)
*/
- public DataType getWrapperType(ElementInfo element, List<ElementInfo>
childElements, TransformationContext context) {
+ public DataType getWrapperType(ElementInfo element, Class<? extends
OMElement> wrapperClass, TransformationContext context) {
DataType<XMLType> wrapperType =
new DataTypeImpl<XMLType>(AxiomDataBinding.NAME, OMElement.class,
new XMLType(element));
return wrapperType;
Modified:
incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextCache.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextCache.java?rev=661026&r1=661025&r2=661026&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextCache.java
(original)
+++
incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextCache.java
Wed May 28 10:36:29 2008
@@ -43,6 +43,7 @@
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
+import javax.xml.bind.annotation.XmlSchema;
import javax.xml.datatype.Duration;
import javax.xml.datatype.XMLGregorianCalendar;
import javax.xml.namespace.QName;
@@ -163,7 +164,7 @@
try {
Class<?> cls = forName(p + ".package-info", false, cl);
if (cls != null) {
- return true;
+ return cls.isAnnotationPresent(XmlSchema.class);
}
//Catch Throwable as ClassLoader can throw an NoClassDefFoundError
that
//does not extend Exception. So we will absorb any Throwable
exception here.
Modified:
incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBWrapperHandler.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBWrapperHandler.java?rev=661026&r1=661025&r2=661026&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBWrapperHandler.java
(original)
+++
incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBWrapperHandler.java
Wed May 28 10:36:29 2008
@@ -20,14 +20,13 @@
package org.apache.tuscany.sca.databinding.jaxb;
import java.lang.reflect.Method;
+import java.security.AccessController;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
import java.util.ArrayList;
import java.util.List;
-import javax.xml.bind.JAXBElement;
-import javax.xml.bind.annotation.XmlElementDecl;
-import javax.xml.bind.annotation.XmlRegistry;
import javax.xml.bind.annotation.XmlType;
-import javax.xml.namespace.QName;
import org.apache.tuscany.sca.databinding.TransformationContext;
import org.apache.tuscany.sca.databinding.TransformationException;
@@ -42,45 +41,25 @@
*
* @version $Rev$ $Date$
*/
-public class JAXBWrapperHandler implements WrapperHandler<JAXBElement<?>> {
+public class JAXBWrapperHandler implements WrapperHandler<Object> {
- public JAXBElement<?> create(ElementInfo element, TransformationContext
context) {
+ public Object create(ElementInfo element, final Class<? extends Object>
wrapperClass, TransformationContext context) {
try {
- // FIXME: How do we map the global element to a factory?
- String packageName = null;
- String factoryClassName = packageName + ".ObjectFactory";
- ClassLoader classLoader = context != null ?
context.getClassLoader() : null;
- if (classLoader == null) {
- //FIXME Understand why we need this, the ClassLoader should be
passed in
- classLoader = Thread.currentThread().getContextClassLoader();
+ if (wrapperClass == null) {
+ return null;
}
- Class<?> factoryClass = Class.forName(factoryClassName, true,
classLoader);
- assert factoryClass.isAnnotationPresent(XmlRegistry.class);
- Object factory = factoryClass.newInstance();
- QName elementName = element.getQName();
- Method method = null;
- for (Method m : factoryClass.getMethods()) {
- XmlElementDecl xmlElement =
m.getAnnotation(XmlElementDecl.class);
- QName name = new QName(xmlElement.namespace(),
xmlElement.name());
- if (xmlElement != null && name.equals(elementName)) {
- method = m;
- break;
+ return AccessController.doPrivileged(new
PrivilegedExceptionAction<Object>() {
+ public Object run() throws Exception {
+ return wrapperClass.newInstance();
}
- }
- if (method != null) {
- Class typeClass = method.getParameterTypes()[0];
- Object value = typeClass.newInstance();
- return (JAXBElement<?>)method.invoke(factory, new Object[]
{value});
- } else {
- throw new TransformationException("ObjectFactory cannot be
resolved.");
- }
- } catch (Exception e) {
+ });
+ } catch (PrivilegedActionException e) {
throw new TransformationException(e);
}
}
- public void setChild(JAXBElement<?> wrapper, int i, ElementInfo
childElement, Object value) {
- Object wrapperValue = wrapper.getValue();
+ public void setChild(Object wrapper, int i, ElementInfo childElement,
Object value) {
+ Object wrapperValue = wrapper;
Class<?> wrapperClass = wrapperValue.getClass();
XmlType xmlType = wrapperClass.getAnnotation(XmlType.class);
@@ -107,8 +86,8 @@
/**
* @see
org.apache.tuscany.sca.databinding.WrapperHandler#getChildren(java.lang.Object,
List, TransformationContext)
*/
- public List getChildren(JAXBElement<?> wrapper, List<ElementInfo>
childElements, TransformationContext context) {
- Object wrapperValue = wrapper.getValue();
+ public List getChildren(Object wrapper, List<ElementInfo> childElements,
TransformationContext context) {
+ Object wrapperValue = wrapper;
Class<?> wrapperClass = wrapperValue.getClass();
XmlType xmlType = wrapperClass.getAnnotation(XmlType.class);
@@ -127,40 +106,15 @@
}
/**
- * @see
org.apache.tuscany.sca.databinding.WrapperHandler#getWrapperType(org.apache.tuscany.sca.interfacedef.util.ElementInfo,
List, org.apache.tuscany.sca.databinding.TransformationContext)
+ * @see
org.apache.tuscany.sca.databinding.WrapperHandler#getWrapperType(org.apache.tuscany.sca.interfacedef.util.ElementInfo,
Class, org.apache.tuscany.sca.databinding.TransformationContext)
*/
- public DataType getWrapperType(ElementInfo element, List<ElementInfo>
childElements, TransformationContext context) {
- try {
- // FIXME: How do we map the global element to a factory?
- String packageName = null;
- String factoryClassName = packageName + ".ObjectFactory";
- ClassLoader classLoader = context != null ?
context.getClassLoader() : null;
- if (classLoader == null) {
- //FIXME Understand why we need this, the ClassLoader should be
passed in
- classLoader = Thread.currentThread().getContextClassLoader();
- }
- Class<?> factoryClass = Class.forName(factoryClassName, true,
classLoader);
- assert factoryClass.isAnnotationPresent(XmlRegistry.class);
- QName elementName = element.getQName();
- Method method = null;
- for (Method m : factoryClass.getMethods()) {
- XmlElementDecl xmlElement =
m.getAnnotation(XmlElementDecl.class);
- QName name = new QName(xmlElement.namespace(),
xmlElement.name());
- if (xmlElement != null && name.equals(elementName)) {
- method = m;
- break;
- }
- }
- if (method != null) {
- Class typeClass = method.getParameterTypes()[0];
- DataType<XMLType> wrapperType =
- new DataTypeImpl<XMLType>(JAXBDataBinding.NAME, typeClass,
new XMLType(element));
- return wrapperType;
- }
-
- return null;
- } catch (Throwable e) {
+ public DataType getWrapperType(ElementInfo element,
+ Class<? extends Object> wrapperClass,
+ TransformationContext context) {
+ if (wrapperClass == null) {
return null;
+ } else {
+ return new DataTypeImpl<XMLType>(JAXBDataBinding.NAME,
wrapperClass, new XMLType(element));
}
}
Added:
incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/com/example/stock/StockQuoteOffer.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/com/example/stock/StockQuoteOffer.java?rev=661026&view=auto
==============================================================================
---
incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/com/example/stock/StockQuoteOffer.java
(added)
+++
incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/com/example/stock/StockQuoteOffer.java
Wed May 28 10:36:29 2008
@@ -0,0 +1,45 @@
+/*
+ * 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 com.example.stock;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+/**
+ * <p>Java class for anonymous complex type.
+ *
+ */
[EMAIL PROTECTED](XmlAccessType.FIELD)
[EMAIL PROTECTED](name = "", propOrder = {"input"})
[EMAIL PROTECTED](name = "stockQuoteOffer")
+public class StockQuoteOffer {
+
+ protected String input;
+
+ public String getInput() {
+ return this.input;
+ }
+
+ public void setInput(String input) {
+ this.input = input;
+ }
+
+}
Propchange:
incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/com/example/stock/StockQuoteOffer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/com/example/stock/StockQuoteOffer.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified:
incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandlerTestCase.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandlerTestCase.java?rev=661026&r1=661025&r2=661026&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandlerTestCase.java
(original)
+++
incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandlerTestCase.java
Wed May 28 10:36:29 2008
@@ -21,14 +21,15 @@
import java.util.List;
-import javax.xml.bind.JAXBElement;
+import javax.xml.namespace.QName;
+import junit.framework.Assert;
import junit.framework.TestCase;
import org.apache.tuscany.sca.databinding.jaxb.JAXBWrapperHandler;
+import org.apache.tuscany.sca.interfacedef.util.ElementInfo;
-import com.example.ipo.jaxb.ObjectFactory;
-import com.example.ipo.jaxb.PurchaseOrderType;
+import com.example.stock.StockQuoteOffer;
/**
* Test case for JAXBExceptionHandler
@@ -36,7 +37,7 @@
* @version $Rev$ $Date$
*/
public class JAXBWrapperHandlerTestCase extends TestCase {
- // private static final QName ELEMENT = new
QName("http://www.example.com/IPO", "purchaseOrder");
+ private static final QName ELEMENT = new
QName("http://www.example.com/stock", "stockQuoteOffer");
private JAXBWrapperHandler handler;
/**
@@ -49,26 +50,23 @@
}
public void testCreate() {
- // ElementInfo element = new ElementInfo(ELEMENT, null);
- // JAXBElement<?> jaxbElement = handler.create(element, null);
+ ElementInfo element = new ElementInfo(ELEMENT, null);
+ Object offer = handler.create(element, StockQuoteOffer.class, null);
+ Assert.assertTrue(offer instanceof StockQuoteOffer);
}
public void testSetChild() {
- ObjectFactory factory = new ObjectFactory();
- PurchaseOrderType po = factory.createPurchaseOrderType();
- JAXBElement<PurchaseOrderType> wrapper =
factory.createPurchaseOrder(po);
- handler.setChild(wrapper, 2, null, "Comment");
+ StockQuoteOffer wrapper = new StockQuoteOffer();
+ handler.setChild(wrapper, 0, null, "IBM");
+ Assert.assertEquals("IBM", wrapper.getInput());
}
public void testGetChildren() {
- ObjectFactory factory = new ObjectFactory();
- PurchaseOrderType po = factory.createPurchaseOrderType();
- po.setComment("Comment");
- JAXBElement<PurchaseOrderType> wrapper =
factory.createPurchaseOrder(po);
+ StockQuoteOffer wrapper = new StockQuoteOffer();
+ wrapper.setInput("IBM");
List children = handler.getChildren(wrapper, null, null);
assertNotNull(children);
- assertEquals(4, children.size());
- assertEquals("Comment", children.get(2));
- assertNull(children.get(0));
+ assertEquals(1, children.size());
+ assertEquals("IBM", children.get(0));
}
}
Modified:
incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOWrapperHandler.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOWrapperHandler.java?rev=661026&r1=661025&r2=661026&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOWrapperHandler.java
(original)
+++
incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOWrapperHandler.java
Wed May 28 10:36:29 2008
@@ -50,9 +50,9 @@
public class SDOWrapperHandler implements WrapperHandler<Object> {
/**
- * @see
org.apache.tuscany.sca.databinding.WrapperHandler#create(ElementInfo,
TransformationContext)
+ * @see
org.apache.tuscany.sca.databinding.WrapperHandler#create(ElementInfo, Class,
TransformationContext)
*/
- public Object create(ElementInfo element, TransformationContext context) {
+ public Object create(ElementInfo element, Class<? extends Object>
wrapperClass, TransformationContext context) {
DataObject wrapper = null;
HelperContext helperContext =
SDOContextHelper.getHelperContext(context);
Type sdoType = getSDOType(helperContext, element);
@@ -105,23 +105,13 @@
}
/**
- * @see
org.apache.tuscany.sca.databinding.WrapperHandler#getWrapperType(org.apache.tuscany.sca.interfacedef.util.ElementInfo,
List, org.apache.tuscany.sca.databinding.TransformationContext)
+ * @see
org.apache.tuscany.sca.databinding.WrapperHandler#getWrapperType(org.apache.tuscany.sca.interfacedef.util.ElementInfo,
Class, org.apache.tuscany.sca.databinding.TransformationContext)
*/
- public DataType getWrapperType(ElementInfo element, List<ElementInfo>
childElements, TransformationContext context) {
- // FIXME: [rfeng] Temporarily disable the wrapping support for SDO to
work around a few issues
- // in the WSDL-less story:
https://issues.apache.org/jira/browse/TUSCANY-1713
-// if (true) {
-// return null;
-// }
+ public DataType getWrapperType(ElementInfo element, Class<? extends
Object> wrapperClass, TransformationContext context) {
HelperContext helperContext =
SDOContextHelper.getHelperContext(context);
Type sdoType = getSDOType(helperContext, element);
if (sdoType != null) {
// Check if child elements matches
- for (ElementInfo child : childElements) {
- if (sdoType.getProperty(child.getQName().getLocalPart()) ==
null) {
- return null;
- }
- }
Class physical = sdoType.getInstanceClass();
DataType<XMLType> wrapperType =
new DataTypeImpl<XMLType>(SDODataBinding.NAME, physical, new
XMLType(element));
Modified:
incubator/tuscany/java/sca/modules/databinding-sdo/src/test/java/org/apache/tuscany/sca/databinding/sdo/SDOWrapperHandlerTestCase.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-sdo/src/test/java/org/apache/tuscany/sca/databinding/sdo/SDOWrapperHandlerTestCase.java?rev=661026&r1=661025&r2=661026&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/databinding-sdo/src/test/java/org/apache/tuscany/sca/databinding/sdo/SDOWrapperHandlerTestCase.java
(original)
+++
incubator/tuscany/java/sca/modules/databinding-sdo/src/test/java/org/apache/tuscany/sca/databinding/sdo/SDOWrapperHandlerTestCase.java
Wed May 28 10:36:29 2008
@@ -68,7 +68,7 @@
XSDHelper xsdHelper = context.getXSDHelper();
xsdHelper.define(getClass().getResourceAsStream("/wrapper.xsd"), null);
ElementInfo element = new ElementInfo(new
QName("http://www.example.com/wrapper", "op"), null);
- DataObject wrapper = (DataObject) handler.create(element, null);
+ DataObject wrapper = (DataObject) handler.create(element, null, null);
assertNotNull(wrapper);
}
Modified:
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/WrapperHandler.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/WrapperHandler.java?rev=661026&r1=661025&r2=661026&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/WrapperHandler.java
(original)
+++
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/WrapperHandler.java
Wed May 28 10:36:29 2008
@@ -32,21 +32,21 @@
public interface WrapperHandler<T> {
/**
* Create a wrapper element
- *
* @param element The XSD element
+ * @param wrapperClass The Wrapper class
* @param context The transformation context
* @return An object representing the wrapper element
*/
- T create(ElementInfo element, TransformationContext context);
+ T create(ElementInfo element, Class<? extends T> wrapperClass,
TransformationContext context);
/**
* Get the data type for the wrapper
* @param element The wrapper element
- * @param childElements A list of child elements
+ * @param wrapperClass Wrapper class
* @param context The transformation context
* @return The data type of the wrapper, null if it's not a wrapper type
*/
- DataType getWrapperType(ElementInfo element, List<ElementInfo>
childElements, TransformationContext context);
+ DataType getWrapperType(ElementInfo element, Class<? extends T>
wrapperClass, TransformationContext context);
/**
* Check if the given data is an instance of the wrapper
Modified:
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/DOMWrapperHandler.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/DOMWrapperHandler.java?rev=661026&r1=661025&r2=661026&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/DOMWrapperHandler.java
(original)
+++
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/DOMWrapperHandler.java
Wed May 28 10:36:29 2008
@@ -45,7 +45,7 @@
super();
}
- public Node create(ElementInfo element, TransformationContext context) {
+ public Node create(ElementInfo element, Class<? extends Node>
wrapperClass, TransformationContext context) {
try {
Document document = DOMHelper.newDocument();
QName name = element.getQName();
@@ -80,9 +80,9 @@
}
/**
- * @see
org.apache.tuscany.sca.databinding.WrapperHandler#getWrapperType(org.apache.tuscany.sca.interfacedef.util.ElementInfo,
List, org.apache.tuscany.sca.databinding.TransformationContext)
+ * @see
org.apache.tuscany.sca.databinding.WrapperHandler#getWrapperType(org.apache.tuscany.sca.interfacedef.util.ElementInfo,
Class, org.apache.tuscany.sca.databinding.TransformationContext)
*/
- public DataType getWrapperType(ElementInfo element, List<ElementInfo>
childElements, TransformationContext context) {
+ public DataType getWrapperType(ElementInfo element, Class<? extends Node>
wrapperClass, TransformationContext context) {
DataType<XMLType> wrapperType =
new DataTypeImpl<XMLType>(DOMDataBinding.NAME, Node.class, new
XMLType(element));
return wrapperType;
Modified:
incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSJavaInterfaceProcessor.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSJavaInterfaceProcessor.java?rev=661026&r1=661025&r2=661026&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSJavaInterfaceProcessor.java
(original)
+++
incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSJavaInterfaceProcessor.java
Wed May 28 10:36:29 2008
@@ -22,6 +22,9 @@
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
+import java.security.AccessController;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
@@ -74,10 +77,18 @@
public JAXWSJavaInterfaceProcessor() {
super();
}
+
+ private static String capitalize(String name) {
+ if (name == null || name.length() == 0) {
+ return name;
+ } else {
+ return Character.toUpperCase(name.charAt(0)) + name.substring(1);
+ }
+ }
public void visitInterface(JavaInterface contract) throws
InvalidInterfaceException {
- Class<?> clazz = contract.getJavaClass();
+ final Class<?> clazz = contract.getJavaClass();
WebService webService = clazz.getAnnotation(WebService.class);
String tns = JavaXMLMapper.getNamespace(clazz);
String localName = clazz.getSimpleName();
@@ -171,6 +182,21 @@
String ns = requestWrapper == null ? tns :
getValue(requestWrapper.targetNamespace(), tns);
String name =
requestWrapper == null ? operationName :
getValue(requestWrapper.localName(), operationName);
+ String wrapperBeanName = requestWrapper == null ? "" :
requestWrapper.className();
+ if ("".equals(wrapperBeanName)) {
+ wrapperBeanName = clazz.getPackage().getName() + ".jaxws."
+ capitalize(method.getName());
+ }
+ Class<?> inputWrapperClass = null;
+ try {
+ final String className = wrapperBeanName;
+ inputWrapperClass = AccessController.doPrivileged(new
PrivilegedExceptionAction<Class<?>>() {
+ public Class<?> run() throws ClassNotFoundException {
+ return Class.forName(className, false,
clazz.getClassLoader());
+ }
+ });
+ } catch (PrivilegedActionException e) {
+ // Ignore
+ }
QName inputWrapper = new QName(ns, name);
ResponseWrapper responseWrapper =
method.getAnnotation(ResponseWrapper.class);
@@ -178,6 +204,22 @@
name =
responseWrapper == null ? operationName + "Response" :
getValue(responseWrapper.localName(),
operationName + "Response");
+ wrapperBeanName = responseWrapper == null ? "" :
responseWrapper.className();
+ if ("".equals(wrapperBeanName)) {
+ wrapperBeanName =
+ clazz.getPackage().getName() + ".jaxws." +
capitalize(method.getName()) + "Response";
+ }
+ Class<?> outputWrapperClass = null;
+ try {
+ final String className = wrapperBeanName;
+ outputWrapperClass = AccessController.doPrivileged(new
PrivilegedExceptionAction<Class<?>>() {
+ public Class<?> run() throws ClassNotFoundException {
+ return Class.forName(className, false,
clazz.getClassLoader());
+ }
+ });
+ } catch (PrivilegedActionException e) {
+ // Ignore
+ }
QName outputWrapper = new QName(ns, name);
List<ElementInfo> inputElements = new ArrayList<ElementInfo>();
@@ -216,6 +258,8 @@
WrapperInfo wrapperInfo =
new WrapperInfo(JAXB_DATABINDING, new
ElementInfo(inputWrapper, null),
new ElementInfo(outputWrapper, null),
inputElements, outputElements);
+ wrapperInfo.setInputWrapperClass(inputWrapperClass);
+ wrapperInfo.setOutputWrapperClass(outputWrapperClass);
operation.setWrapper(wrapperInfo);
}
}
Modified:
incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/DataType.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/DataType.java?rev=661026&r1=661025&r2=661026&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/DataType.java
(original)
+++
incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/DataType.java
Wed May 28 10:36:29 2008
@@ -18,6 +18,7 @@
*/
package org.apache.tuscany.sca.interfacedef;
+import java.lang.reflect.Type;
/**
* Representation of the type of data associated with an operation. Data is
@@ -41,14 +42,26 @@
* Set the java type for the data
* @param cls
*/
- void setPhysical(Class cls);
+ void setPhysical(Class<?> cls);
/**
* Returns the physical type used by the runtime.
*
* @return the physical type used by the runtime
*/
- Class getPhysical();
+ Class<?> getPhysical();
+
+ /**
+ * Get the java generic type
+ * @return The java generic type
+ */
+ Type getGenericType();
+
+ /**
+ * Set the java generic type
+ * @param genericType
+ */
+ void setGenericType(Type genericType);
/**
* Returns the logical identifier used by the assembly. The type of this
@@ -66,22 +79,26 @@
L getLogical();
/**
- * @return
+ * Get the databinding for the given data type
+ * @return the databinding
*/
String getDataBinding();
/**
+ * Set the databinding for the given data type
* @param dataBinding the dataBinding to set
*/
void setDataBinding(String dataBinding);
/**
- * @return
+ * Clone a data type
+ * @return The cloned data type
* @throws CloneNotSupportedException
*/
Object clone() throws CloneNotSupportedException;
/**
+ * Set the logical type of the data type
* @param logical the logical to set
*/
void setLogical(L logical);
Modified:
incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/impl/DataTypeImpl.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/impl/DataTypeImpl.java?rev=661026&r1=661025&r2=661026&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/impl/DataTypeImpl.java
(original)
+++
incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/impl/DataTypeImpl.java
Wed May 28 10:36:29 2008
@@ -18,6 +18,8 @@
*/
package org.apache.tuscany.sca.interfacedef.impl;
+import java.lang.reflect.Type;
+
import org.apache.tuscany.sca.interfacedef.DataType;
/**
@@ -38,9 +40,9 @@
* @version $Rev$ $Date$
*/
public class DataTypeImpl<L> implements DataType<L> {
- private boolean unresolved = true;
private String dataBinding;
- private Class physical;
+ private Class<?> physical;
+ private Type genericType;
private L logical;
/**
@@ -50,14 +52,30 @@
* @param logical the logical type
* @see #getLogical()
*/
- public DataTypeImpl(Class physical, L logical) {
- this.physical = physical;
- this.logical = logical;
+ public DataTypeImpl(Class<?> physical, L logical) {
+ this(null, physical, physical, logical);
+ }
+
+ /**
+ * @param dataBinding
+ * @param physical
+ * @param logical
+ */
+ public DataTypeImpl(String dataBinding, Class<?> physical, L logical) {
+ this(dataBinding, physical, physical, logical);
}
- public DataTypeImpl(String dataBinding, Class physical, L logical) {
+ /**
+ * @param dataBinding
+ * @param physical
+ * @param genericType
+ * @param logical
+ */
+ public DataTypeImpl(String dataBinding, Class<?> physical, Type
genericType, L logical) {
+ super();
this.dataBinding = dataBinding;
this.physical = physical;
+ this.genericType = genericType;
this.logical = logical;
}
@@ -66,11 +84,34 @@
*
* @return the physical type used by the runtime
*/
- public Class getPhysical() {
+ public Class<?> getPhysical() {
return physical;
}
/**
+ * @param physical the physical to set
+ */
+ public void setPhysical(Class<?> physical) {
+ this.physical = physical;
+ }
+
+ /**
+ * Get the java generic type
+ * @return The java generic type
+ */
+ public Type getGenericType() {
+ return genericType;
+ }
+
+ /**
+ * Set the java generic type
+ * @param genericType
+ */
+ public void setGenericType(Type genericType) {
+ this.genericType = genericType;
+ }
+
+ /**
* Returns the logical identifier used by the assembly. The type of this
* value identifies the logical type system in use. Known values are:
* <ul>
@@ -87,6 +128,13 @@
return logical;
}
+ /**
+ * @param logical the logical to set
+ */
+ public void setLogical(L logical) {
+ this.logical = logical;
+ }
+
public String getDataBinding() {
return dataBinding;
}
@@ -112,78 +160,46 @@
return copy;
}
- /**
- * @param logical the logical to set
- */
- public void setLogical(L logical) {
- this.logical = logical;
- }
-
@Override
public int hashCode() {
- final int PRIME = 31;
+ final int prime = 31;
int result = 1;
- result = PRIME * result + ((dataBinding == null) ? 0 :
dataBinding.hashCode());
- result = PRIME * result + ((logical == null) ? 0 : logical.hashCode());
- result = PRIME * result + ((physical == null) ? 0 :
physical.hashCode());
+ result = prime * result + ((dataBinding == null) ? 0 :
dataBinding.hashCode());
+ result = prime * result + ((genericType == null) ? 0 :
genericType.hashCode());
+ result = prime * result + ((logical == null) ? 0 : logical.hashCode());
+ result = prime * result + ((physical == null) ? 0 :
physical.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
- if (this == obj) {
+ if (this == obj)
return true;
- }
- if (obj == null) {
+ if (obj == null)
return false;
- }
- if (getClass() != obj.getClass()) {
+ if (getClass() != obj.getClass())
return false;
- }
final DataTypeImpl other = (DataTypeImpl)obj;
if (dataBinding == null) {
- if (other.dataBinding != null) {
+ if (other.dataBinding != null)
return false;
- }
- } else if (!dataBinding.equals(other.dataBinding)) {
+ } else if (!dataBinding.equals(other.dataBinding))
+ return false;
+ if (genericType == null) {
+ if (other.genericType != null)
+ return false;
+ } else if (!genericType.equals(other.genericType))
return false;
- }
if (logical == null) {
- if (other.logical != null) {
+ if (other.logical != null)
return false;
- }
- } else if (!logical.equals(other.logical)) {
+ } else if (!logical.equals(other.logical))
return false;
- }
if (physical == null) {
- if (other.physical != null) {
+ if (other.physical != null)
return false;
- }
- } else if (!physical.equals(other.physical)) {
+ } else if (!physical.equals(other.physical))
return false;
- }
return true;
}
-
- /**
- * @return the unresolved
- */
- public boolean isUnresolved() {
- return unresolved;
- }
-
- /**
- * @param unresolved the unresolved to set
- */
- public void setUnresolved(boolean unresolved) {
- this.unresolved = unresolved;
- }
-
- /**
- * @param physical the physical to set
- */
- public void setPhysical(Class physical) {
- this.physical = physical;
- }
-
}
Modified:
incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/util/FaultException.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/util/FaultException.java?rev=661026&r1=661025&r2=661026&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/util/FaultException.java
(original)
+++
incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/util/FaultException.java
Wed May 28 10:36:29 2008
@@ -28,7 +28,7 @@
*/
public class FaultException extends Exception {
private static final long serialVersionUID = -8002583655240625792L;
- private Object faultInfo;
+ private transient Object faultInfo; // FIXME: How to serialize it?
private QName faultName;
/**
Modified:
incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/util/WrapperInfo.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/util/WrapperInfo.java?rev=661026&r1=661025&r2=661026&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/util/WrapperInfo.java
(original)
+++
incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/util/WrapperInfo.java
Wed May 28 10:36:29 2008
@@ -61,7 +61,10 @@
private DataType<XMLType> unwrappedOutputType;
private String dataBinding;
-
+
+ private Class<?> inputWrapperClass;
+ private Class<?> outputWrapperClass;
+
public WrapperInfo(String dataBinding,
ElementInfo inputWrapperElement,
ElementInfo outputWrapperElement,
@@ -147,4 +150,20 @@
}
return unwrappedOutputType;
}
+
+ public Class<?> getInputWrapperClass() {
+ return inputWrapperClass;
+ }
+
+ public void setInputWrapperClass(Class<?> inputWrapperClass) {
+ this.inputWrapperClass = inputWrapperClass;
+ }
+
+ public Class<?> getOutputWrapperClass() {
+ return outputWrapperClass;
+ }
+
+ public void setOutputWrapperClass(Class<?> outputWrapperClass) {
+ this.outputWrapperClass = outputWrapperClass;
+ }
}