You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by na...@apache.org on 2008/05/05 02:34:25 UTC
svn commit: r653286 - in /incubator/tuscany/java/sca/modules:
core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/module/
interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/
interface-wsdl-java2wsdl/src...
Author: nash
Date: Sun May 4 17:34:24 2008
New Revision: 653286
URL: http://svn.apache.org/viewvc?rev=653286&view=rev
Log:
Add exception/fault support to new Java2WSDL runtime mapping code
Added:
incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/TestException.java
incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/TestFault.java
incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/TestFaultBean.java
Modified:
incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/module/DataBindingModuleActivator.java
incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSFaultExceptionMapper.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-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/interface2wsdl/Interface2WSDLGenerator.java
incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/interface2wsdl/WSDLDefinitionGenerator.java
incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/TestJavaInterface.java
incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/interface2wsdl/Java2WSDLGeneratorTestCase.java
incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/java2wsdl/Java2WSDLHelperTestCase.java
incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/Operation.java
incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/impl/OperationImpl.java
Modified: incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/module/DataBindingModuleActivator.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/module/DataBindingModuleActivator.java?rev=653286&r1=653285&r2=653286&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/module/DataBindingModuleActivator.java (original)
+++ incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/module/DataBindingModuleActivator.java Sun May 4 17:34:24 2008
@@ -81,7 +81,7 @@
// [rfeng] The JAX-WS processor should come before the Databinding processor to make sure @WebService
// is honored as Remoteable
- javaFactory.addInterfaceVisitor(new JAXWSJavaInterfaceProcessor(faultExceptionMapper));
+ javaFactory.addInterfaceVisitor(new JAXWSJavaInterfaceProcessor(dataBindings, faultExceptionMapper));
javaFactory.addInterfaceVisitor(new DataBindingJavaInterfaceProcessor(dataBindings));
Modified: incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSFaultExceptionMapper.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/JAXWSFaultExceptionMapper.java?rev=653286&r1=653285&r2=653286&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSFaultExceptionMapper.java (original)
+++ incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSFaultExceptionMapper.java Sun May 4 17:34:24 2008
@@ -41,6 +41,11 @@
* @version $Rev$ $Date$
*/
public class JAXWSFaultExceptionMapper implements FaultExceptionMapper {
+ public static final String GETCAUSE = "getCause";
+ public static final String GETLOCALIZEDMESSAGE = "getLocalizedMessage";
+ public static final String GETSTACKTRACE = "getStackTrace";
+ public static final String GETCLASS = "getClass";
+
private static final Class<?>[] EMPTY_CLASS_ARRAY = new Class[0];
private DataBindingExtensionPoint dataBindingExtensionPoint;
@@ -154,9 +159,7 @@
for (PropertyDescriptor pd : beanInfo.getPropertyDescriptors()) {
Method getter = pd.getReadMethod();
String name = getter.getName();
- if ("getClass".equals(name) || "getStackTrace".equals(name)
- || "getCause".equals(name)
- || "getLocalizedMessage".equals(name)) {
+ if (!isMappedGetter(name)) {
continue;
}
String prefix = "get";
@@ -195,9 +198,16 @@
Class<?> faultBean = null;
WebFault fault = cls.getAnnotation(WebFault.class);
if (fault != null) {
- faultName = new QName(fault.targetNamespace(), fault.name());
- XMLType xmlType = new XMLType(faultName, null);
- faultType.setLogical(xmlType);
+ if (!"".equals(fault.name()) || !"".equals(fault.targetNamespace())) {
+ QName faultQName = ((XMLType)faultType.getLogical()).getElementName();
+ String faultNS = "".equals(fault.targetNamespace()) ?
+ faultQName.getNamespaceURI() : fault.targetNamespace();
+ String faultLocal = "".equals(fault.name()) ?
+ faultQName.getLocalPart() : fault.name();
+ faultName = new QName(faultNS, faultLocal);
+ XMLType xmlType = new XMLType(faultName, null);
+ faultType.setLogical(xmlType);
+ }
if (!"".equals(fault.faultBean())) {
try {
faultBean = Class.forName(fault.faultBean(), false, cls.getClassLoader());
@@ -246,6 +256,17 @@
return result;
}
+ public static boolean isMappedGetter(String methodName) {
+ if (GETCAUSE.equals(methodName)
+ || GETLOCALIZEDMESSAGE.equals(methodName)
+ || GETSTACKTRACE.equals(methodName)
+ || GETCLASS.equals(methodName)) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+
public void setDataBindingExtensionPoint(DataBindingExtensionPoint dataBindingExtensionPoint) {
this.dataBindingExtensionPoint = dataBindingExtensionPoint;
}
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=653286&r1=653285&r2=653286&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 Sun May 4 17:34:24 2008
@@ -21,6 +21,7 @@
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
@@ -36,10 +37,13 @@
import javax.xml.ws.RequestWrapper;
import javax.xml.ws.ResponseWrapper;
+import org.apache.tuscany.sca.databinding.DataBindingExtensionPoint;
+import org.apache.tuscany.sca.databinding.javabeans.JavaExceptionDataBinding;
import org.apache.tuscany.sca.interfacedef.DataType;
import org.apache.tuscany.sca.interfacedef.FaultExceptionMapper;
import org.apache.tuscany.sca.interfacedef.InvalidInterfaceException;
import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.interfacedef.impl.DataTypeImpl;
import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
import org.apache.tuscany.sca.interfacedef.java.JavaOperation;
import org.apache.tuscany.sca.interfacedef.java.impl.JavaInterfaceUtil;
@@ -57,10 +61,14 @@
public class JAXWSJavaInterfaceProcessor implements JavaInterfaceVisitor {
private static final String JAXB_DATABINDING = "javax.xml.bind.JAXBElement";
private static final String SCHEMA_NS = "http://www.w3.org/2001/XMLSchema";
+ private static final String GET = "get";
+ private DataBindingExtensionPoint dataBindingExtensionPoint;
private FaultExceptionMapper faultExceptionMapper;
- public JAXWSJavaInterfaceProcessor(FaultExceptionMapper faultExceptionMapper) {
+ public JAXWSJavaInterfaceProcessor(DataBindingExtensionPoint dataBindingExtensionPoint,
+ FaultExceptionMapper faultExceptionMapper) {
super();
+ this.dataBindingExtensionPoint = dataBindingExtensionPoint;
this.faultExceptionMapper = faultExceptionMapper;
}
@@ -219,8 +227,56 @@
if (operation!= null && operation.getFaultTypes() != null) {
for (DataType exceptionType : operation.getFaultTypes()) {
faultExceptionMapper.introspectFaultDataType(exceptionType);
+ DataType faultType = (DataType)exceptionType.getLogical();
+ if (faultType.getDataBinding() == JavaExceptionDataBinding.NAME) {
+ // The exception class doesn't have an associated bean class, so
+ // synthesize a virtual bean by introspecting the exception class.
+ createSyntheticBean(operation, exceptionType);
+ }
+ }
+ }
+ }
+
+ private void createSyntheticBean(Operation operation, DataType exceptionType) {
+ DataType faultType = (DataType)exceptionType.getLogical();
+ QName faultBeanName = ((XMLType)faultType.getLogical()).getElementName();
+ List<DataType<XMLType>> beanDataTypes = new ArrayList<DataType<XMLType>>();
+ for (Method aMethod : exceptionType.getPhysical().getMethods()) {
+ if (Modifier.isPublic(aMethod.getModifiers())
+ && aMethod.getName().startsWith(GET)
+ && aMethod.getParameterTypes().length == 0
+ && JAXWSFaultExceptionMapper.isMappedGetter(aMethod.getName())) {
+ String propName = resolvePropertyFromMethod(aMethod.getName());
+ QName propQName = new QName(faultBeanName.getNamespaceURI(), propName);
+ Class propType = aMethod.getReturnType();
+ XMLType xmlPropType = new XMLType(propQName, null);
+ DataType<XMLType> propDT = new DataTypeImpl<XMLType>(propType, xmlPropType);
+ org.apache.tuscany.sca.databinding.annotation.DataType dt =
+ aMethod.getAnnotation(org.apache.tuscany.sca.databinding.annotation.DataType.class);
+ if (dt != null) {
+ propDT.setDataBinding(dt.value());
+ }
+ dataBindingExtensionPoint.introspectType(propDT, aMethod.getAnnotations());
+
+ // sort the list lexicographically as specified in JAX-WS spec section 3.7
+ int i = 0;
+ for (; i < beanDataTypes.size(); i++) {
+ if (beanDataTypes.get(i).getLogical().getElementName()
+ .getLocalPart().compareTo(propName) > 0) {
+ break;
+ }
+ }
+ beanDataTypes.add(i, propDT);
}
}
+ operation.getFaultBeans().put(faultBeanName, beanDataTypes);
+ }
+
+ private String resolvePropertyFromMethod(String methodName) {
+ StringBuffer propName = new StringBuffer();
+ propName.append(Character.toLowerCase(methodName.charAt(GET.length())));
+ propName.append(methodName.substring(GET.length() + 1));
+ return propName.toString();
}
private <T extends Annotation> T getAnnotation(Method method, int index, Class<T> annotationType) {
Modified: incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/interface2wsdl/Interface2WSDLGenerator.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/interface2wsdl/Interface2WSDLGenerator.java?rev=653286&r1=653285&r2=653286&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/interface2wsdl/Interface2WSDLGenerator.java (original)
+++ incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/interface2wsdl/Interface2WSDLGenerator.java Sun May 4 17:34:24 2008
@@ -30,6 +30,7 @@
import javax.wsdl.BindingOperation;
import javax.wsdl.Definition;
import javax.wsdl.Input;
+import javax.wsdl.Fault;
import javax.wsdl.Message;
import javax.wsdl.OperationType;
import javax.wsdl.Output;
@@ -212,24 +213,31 @@
Element wrapper = schemaDoc.createElementNS(SCHEMA_NS, "xs:element");
schema.appendChild(wrapper);
wrapper.setAttribute("name", entry.getKey().getLocalPart());
- Element complexType = schemaDoc.createElementNS(SCHEMA_NS, "xs:complexType");
- wrapper.appendChild(complexType);
- if (entry.getValue().size() > 0) {
- Element sequence = schemaDoc.createElementNS(SCHEMA_NS, "xs:sequence");
- complexType.appendChild(sequence);
- for (ElementInfo element: entry.getValue()) {
- Element xsElement = schemaDoc.createElementNS(SCHEMA_NS, "xs:element");
- if (element.isMany()) {
- xsElement.setAttribute("maxOccurs", "unbounded");
+ if (entry.getValue().size() == 1 && entry.getValue().get(0).getQName() == null) {
+ // special case for global fault element
+ QName typeName = entry.getValue().get(0).getType().getQName();
+ wrapper.setAttribute("type", typeName.getLocalPart());
+ } else {
+ // normal wrapper containing type definition inline
+ Element complexType = schemaDoc.createElementNS(SCHEMA_NS, "xs:complexType");
+ wrapper.appendChild(complexType);
+ if (entry.getValue().size() > 0) {
+ Element sequence = schemaDoc.createElementNS(SCHEMA_NS, "xs:sequence");
+ complexType.appendChild(sequence);
+ for (ElementInfo element: entry.getValue()) {
+ Element xsElement = schemaDoc.createElementNS(SCHEMA_NS, "xs:element");
+ if (element.isMany()) {
+ xsElement.setAttribute("maxOccurs", "unbounded");
+ }
+ xsElement.setAttribute("minOccurs", "0");
+ xsElement.setAttribute("name", element.getQName().getLocalPart());
+ if (element.isNillable()) {
+ xsElement.setAttribute("nillable", "true");
+ }
+ QName typeName = element.getType().getQName();
+ xsElement.setAttribute("type", typeName.getLocalPart());
+ sequence.appendChild(xsElement);
}
- xsElement.setAttribute("minOccurs", "0");
- xsElement.setAttribute("name", element.getQName().getLocalPart());
- if (element.isNillable()) {
- xsElement.setAttribute("nillable", "true");
- }
- QName typeName = element.getType().getQName();
- xsElement.setAttribute("type", typeName.getLocalPart());
- sequence.appendChild(xsElement);
}
}
}
@@ -290,9 +298,9 @@
operation.setUndefined(false);
Input input = definition.createInput();
- input.setName("input");
Message inputMsg = definition.createMessage();
- QName inputMsgName = new QName(definition.getQName().getNamespaceURI(), op.getName());
+ String namespaceURI = definition.getQName().getNamespaceURI();
+ QName inputMsgName = new QName(namespaceURI, op.getName());
inputMsg.setQName(inputMsgName);
inputMsg.setUndefined(false);
definition.addMessage(inputMsg);
@@ -314,9 +322,8 @@
if (!op.isNonBlocking()) {
Output output = definition.createOutput();
- output.setName("output");
Message outputMsg = definition.createMessage();
- QName outputMsgName = new QName(definition.getQName().getNamespaceURI(), op.getName() + "Response");
+ QName outputMsgName = new QName(namespaceURI, op.getName() + "Response");
outputMsg.setQName(outputMsgName);
outputMsg.setUndefined(false);
definition.addMessage(outputMsg);
@@ -334,6 +341,37 @@
operation.setStyle(OperationType.ONE_WAY);
}
+ for (DataType<DataType> faultType: op.getFaultTypes()) {
+ Fault fault = definition.createFault();
+ QName faultName = ((XMLType)faultType.getLogical().getLogical()).getElementName();
+ fault.setName(faultName.getLocalPart());
+ Message faultMsg = definition.getMessage(faultName);
+ if (faultMsg == null) {
+ faultMsg = definition.createMessage();
+ faultMsg.setQName(faultName);
+ faultMsg.setUndefined(false);
+ definition.addMessage(faultMsg);
+ faultMsg.addPart(generatePart(definition, faultType.getLogical(), faultName.getLocalPart()));
+ }
+ fault.setMessage(faultMsg);
+ operation.addFault(fault);
+ List<ElementInfo> elements = null;
+ if (faultType.getLogical().getPhysical() != faultType.getPhysical()) {
+ // create special wrapper for type indirection to real fault bean
+ elements = new ArrayList<ElementInfo>(1);
+ DataType logical = faultType.getLogical();
+ elements.add(getElementInfo(logical.getPhysical(),logical.getLogical(), null, javaTypes));
+ } else {
+ // convert synthesized fault bean to a wrapper type
+ elements = new ArrayList<ElementInfo>();
+ for (DataType<XMLType> propDT: op.getFaultBeans().get(faultName)) {
+ XMLType logical = propDT.getLogical();
+ elements.add(getElementInfo(propDT.getPhysical(), logical, logical.getElementName(), javaTypes));
+ }
+ }
+ wrappers.put(faultName, elements);
+ }
+
operation.setUndefined(false);
return operation;
}
Modified: incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/interface2wsdl/WSDLDefinitionGenerator.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/interface2wsdl/WSDLDefinitionGenerator.java?rev=653286&r1=653285&r2=653286&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/interface2wsdl/WSDLDefinitionGenerator.java (original)
+++ incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/interface2wsdl/WSDLDefinitionGenerator.java Sun May 4 17:34:24 2008
@@ -40,10 +40,12 @@
import javax.wsdl.extensions.soap.SOAPAddress;
import javax.wsdl.extensions.soap.SOAPBinding;
import javax.wsdl.extensions.soap.SOAPBody;
+import javax.wsdl.extensions.soap.SOAPFault;
import javax.wsdl.extensions.soap.SOAPOperation;
import javax.wsdl.extensions.soap12.SOAP12Address;
import javax.wsdl.extensions.soap12.SOAP12Binding;
import javax.wsdl.extensions.soap12.SOAP12Body;
+import javax.wsdl.extensions.soap12.SOAP12Fault;
import javax.wsdl.extensions.soap12.SOAP12Operation;
import javax.wsdl.factory.WSDLFactory;
import javax.wsdl.xml.WSDLReader;
@@ -60,11 +62,13 @@
private static final QName SOAP_ADDRESS = new QName(SOAP_NS, "address");
private static final QName SOAP_BINDING = new QName(SOAP_NS, "binding");
private static final QName SOAP_BODY = new QName(SOAP_NS, "body");
+ private static final QName SOAP_FAULT = new QName(SOAP_NS, "fault");
private static final QName SOAP_OPERATION = new QName(SOAP_NS, "operation");
private static final String SOAP12_NS = "http://schemas.xmlsoap.org/wsdl/soap12/";
private static final QName SOAP12_ADDRESS = new QName(SOAP12_NS, "address");
private static final QName SOAP12_BINDING = new QName(SOAP12_NS, "binding");
private static final QName SOAP12_BODY = new QName(SOAP12_NS, "body");
+ private static final QName SOAP12_FAULT = new QName(SOAP12_NS, "fault");
private static final QName SOAP12_OPERATION = new QName(SOAP12_NS, "operation");
private static final String BINDING_SUFFIX = "Binding";
@@ -75,6 +79,7 @@
private QName soapAddress;
private QName soapBinding;
private QName soapBody;
+ private QName soapFault;
private QName soapOperation;
public WSDLDefinitionGenerator(boolean requiresSOAP12) {
@@ -83,6 +88,7 @@
soapAddress = requiresSOAP12 ? SOAP12_ADDRESS : SOAP_ADDRESS;
soapBinding = requiresSOAP12 ? SOAP12_BINDING : SOAP_BINDING;
soapBody = requiresSOAP12 ? SOAP12_BODY : SOAP_BODY;
+ soapFault = requiresSOAP12 ? SOAP12_FAULT : SOAP_FAULT;
soapOperation = requiresSOAP12 ? SOAP12_OPERATION : SOAP_OPERATION;
}
@@ -191,7 +197,10 @@
for (Iterator fi = operation.getFaults().values().iterator(); fi.hasNext();) {
Fault fault = (Fault)fi.next();
BindingFault bindingFault = definition.createBindingFault();
- configureBindingFault(bindingFault, fault);
+ ExtensibilityElement faultExtension =
+ definition.getExtensionRegistry().createExtension(BindingFault.class, soapFault);
+ configureBindingFault(bindingFault, faultExtension, fault);
+ bindingFault.addExtensibilityElement(faultExtension);
bindingOperation.addBindingFault(bindingFault);
}
return bindingOperation;
@@ -210,8 +219,19 @@
bindingOutput.setName(output.getName());
}
- protected void configureBindingFault(BindingFault bindingFault, Fault fault) throws WSDLException {
- bindingFault.setName(fault.getName());
+ protected void configureBindingFault(BindingFault bindingFault,
+ ExtensibilityElement faultExtension,
+ Fault fault)
+ throws WSDLException {
+ String faultName = fault.getName();
+ bindingFault.setName(faultName);
+ if (requiresSOAP12) {
+ ((SOAP12Fault)faultExtension).setName(faultName);
+ ((SOAP12Fault)faultExtension).setUse("literal");
+ } else {
+ ((SOAPFault)faultExtension).setName(faultName);
+ ((SOAPFault)faultExtension).setUse("literal");
+ }
}
public Service createService(Definition definition, PortType portType) {
Added: incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/TestException.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/TestException.java?rev=653286&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/TestException.java (added)
+++ incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/TestException.java Sun May 4 17:34:24 2008
@@ -0,0 +1,43 @@
+/*
+ * 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.interfacedef.wsdl;
+
+public class TestException extends Exception {
+
+ private String userdata;
+
+ public TestException(String message) {
+ super(message);
+ }
+
+ public TestException(String message, String userdata) {
+ super(message);
+ this.userdata = userdata;
+ }
+
+ public String getUserdata() {
+ return userdata;
+ }
+
+ public void setUserdata(String userdata) {
+ this.userdata = userdata;
+ }
+
+}
Added: incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/TestFault.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/TestFault.java?rev=653286&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/TestFault.java (added)
+++ incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/TestFault.java Sun May 4 17:34:24 2008
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.tuscany.sca.interfacedef.wsdl;
+
+import javax.xml.ws.WebFault;
+
+@WebFault(faultBean="org.apache.tuscany.sca.interfacedef.wsdl.TestFaultBean")
+public class TestFault extends Exception {
+
+ private TestFaultBean bean;
+
+ public TestFault(TestFaultBean bean, String message) {
+ super(message);
+ this.bean = bean;
+ }
+
+ public TestFault(TestFaultBean bean, String message, Throwable cause) {
+ super(message, cause);
+ this.bean = bean;
+ }
+
+ public TestFaultBean getFaultInfo() {
+ return bean;
+ }
+}
Added: incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/TestFaultBean.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/TestFaultBean.java?rev=653286&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/TestFaultBean.java (added)
+++ incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/TestFaultBean.java Sun May 4 17:34:24 2008
@@ -0,0 +1,50 @@
+/*
+ * 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.interfacedef.wsdl;
+
+public class TestFaultBean {
+ private String lastName;
+ private String firstName;
+ private float age;
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public float getAge() {
+ return age;
+ }
+
+ public void setAge(float age) {
+ this.age = age;
+ }
+}
Modified: incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/TestJavaInterface.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/TestJavaInterface.java?rev=653286&r1=653285&r2=653286&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/TestJavaInterface.java (original)
+++ incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/TestJavaInterface.java Sun May 4 17:34:24 2008
@@ -46,5 +46,8 @@
void dummy();
@WebMethod
- void m6(TestJavaClass info);
+ void m6(TestJavaClass info) throws TestException;
+
+ @WebMethod
+ void m7(TestJavaClass info) throws TestFault;
}
Modified: incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/interface2wsdl/Java2WSDLGeneratorTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/interface2wsdl/Java2WSDLGeneratorTestCase.java?rev=653286&r1=653285&r2=653286&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/interface2wsdl/Java2WSDLGeneratorTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/interface2wsdl/Java2WSDLGeneratorTestCase.java Sun May 4 17:34:24 2008
@@ -28,6 +28,7 @@
import org.apache.tuscany.sca.databinding.DefaultDataBindingExtensionPoint;
import org.apache.tuscany.sca.interfacedef.java.DefaultJavaInterfaceFactory;
import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
+import org.apache.tuscany.sca.interfacedef.java.jaxws.JAXWSFaultExceptionMapper;
import org.apache.tuscany.sca.interfacedef.java.jaxws.JAXWSJavaInterfaceProcessor;
import org.apache.tuscany.sca.interfacedef.wsdl.DefaultWSDLFactory;
import org.apache.tuscany.sca.interfacedef.wsdl.TestJavaInterface;
@@ -43,8 +44,9 @@
public void testGenerate() throws Exception {
DefaultJavaInterfaceFactory iFactory = new DefaultJavaInterfaceFactory();
JavaInterface iface = iFactory.createJavaInterface(TestJavaInterface.class);
- new JAXWSJavaInterfaceProcessor().visitInterface(iface);
DefaultDataBindingExtensionPoint dataBindings = new DefaultDataBindingExtensionPoint();
+ JAXWSFaultExceptionMapper faultExceptionMapper = new JAXWSFaultExceptionMapper(dataBindings);
+ new JAXWSJavaInterfaceProcessor(dataBindings, faultExceptionMapper).visitInterface(iface);
new DataBindingJavaInterfaceProcessor(dataBindings).visitInterface(iface);
WSDLDefinition wsdlDefinition = new DefaultWSDLFactory().createWSDLDefinition();
Interface2WSDLGenerator generator = new Interface2WSDLGenerator(false);
Modified: incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/java2wsdl/Java2WSDLHelperTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/java2wsdl/Java2WSDLHelperTestCase.java?rev=653286&r1=653285&r2=653286&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/java2wsdl/Java2WSDLHelperTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/java2wsdl/Java2WSDLHelperTestCase.java Sun May 4 17:34:24 2008
@@ -34,6 +34,7 @@
import org.apache.tuscany.sca.interfacedef.java.DefaultJavaInterfaceFactory;
import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceContract;
+import org.apache.tuscany.sca.interfacedef.java.jaxws.JAXWSFaultExceptionMapper;
import org.apache.tuscany.sca.interfacedef.java.jaxws.JAXWSJavaInterfaceProcessor;
import org.apache.tuscany.sca.interfacedef.wsdl.TestJavaInterface;
import org.apache.tuscany.sca.interfacedef.wsdl.WSDLInterface;
@@ -66,8 +67,9 @@
DefaultJavaInterfaceFactory factory = new DefaultJavaInterfaceFactory();
JavaInterfaceContract javaIC = factory.createJavaInterfaceContract();
JavaInterface iface = factory.createJavaInterface(HelloWorld.class);
- new JAXWSJavaInterfaceProcessor().visitInterface(iface);
DefaultDataBindingExtensionPoint dataBindings = new DefaultDataBindingExtensionPoint();
+ JAXWSFaultExceptionMapper faultExceptionMapper = new JAXWSFaultExceptionMapper(dataBindings);
+ new JAXWSJavaInterfaceProcessor(dataBindings, faultExceptionMapper).visitInterface(iface);
new DataBindingJavaInterfaceProcessor(dataBindings).visitInterface(iface);
javaIC.setInterface(iface);
WSDLInterfaceContract wsdlIC = Java2WSDLHelper.createWSDLInterfaceContract(javaIC);
@@ -80,7 +82,7 @@
JavaInterfaceContract javaIC2 = factory.createJavaInterfaceContract();
JavaInterface iface2 = factory.createJavaInterface(TestJavaInterface.class);
- new JAXWSJavaInterfaceProcessor().visitInterface(iface2);
+ new JAXWSJavaInterfaceProcessor(dataBindings, faultExceptionMapper).visitInterface(iface2);
new DataBindingJavaInterfaceProcessor(dataBindings).visitInterface(iface2);
javaIC2.setInterface(iface2);
WSDLInterfaceContract wsdlIC2 = Java2WSDLHelper.createWSDLInterfaceContract(javaIC2);
Modified: incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/Operation.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/Operation.java?rev=653286&r1=653285&r2=653286&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/Operation.java (original)
+++ incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/Operation.java Sun May 4 17:34:24 2008
@@ -19,8 +19,11 @@
package org.apache.tuscany.sca.interfacedef;
import java.util.List;
+import java.util.Map;
+import javax.xml.namespace.QName;
import org.apache.tuscany.sca.interfacedef.util.WrapperInfo;
+import org.apache.tuscany.sca.interfacedef.util.XMLType;
import org.apache.tuscany.sca.policy.PolicySetAttachPoint;
/**
@@ -173,6 +176,19 @@
void setDynamic(boolean b);
/**
+ * Get the synthesized fault beans for this operation
+ *
+ * @return the fault beans
+ */
+ Map<QName, List<DataType<XMLType>>> getFaultBeans();
+
+ /**
+ * Set the synthesized fault beans for this operation
+ * @param faultBeans
+ */
+ void setFaultBeans(Map<QName, List<DataType<XMLType>>> faultBeans);
+
+ /**
* Implementations must support cloning.
*/
Object clone() throws CloneNotSupportedException;
Modified: incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/impl/OperationImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/impl/OperationImpl.java?rev=653286&r1=653285&r2=653286&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/impl/OperationImpl.java (original)
+++ incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/impl/OperationImpl.java Sun May 4 17:34:24 2008
@@ -19,13 +19,17 @@
package org.apache.tuscany.sca.interfacedef.impl;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
+import javax.xml.namespace.QName;
import org.apache.tuscany.sca.interfacedef.ConversationSequence;
import org.apache.tuscany.sca.interfacedef.DataType;
import org.apache.tuscany.sca.interfacedef.Interface;
import org.apache.tuscany.sca.interfacedef.Operation;
import org.apache.tuscany.sca.interfacedef.util.WrapperInfo;
+import org.apache.tuscany.sca.interfacedef.util.XMLType;
import org.apache.tuscany.sca.policy.Intent;
import org.apache.tuscany.sca.policy.IntentAttachPointType;
import org.apache.tuscany.sca.policy.PolicySet;
@@ -49,6 +53,7 @@
private WrapperInfo wrapper;
private String dataBinding;
private boolean dynamic;
+ private Map<QName, List<DataType<XMLType>>> faultBeans;
private List<PolicySet> applicablePolicySets = new ArrayList<PolicySet>();
private List<PolicySet> policySets = new ArrayList<PolicySet>();
@@ -61,6 +66,7 @@
public OperationImpl() {
inputType = new DataTypeImpl<List<DataType>>("idl:input", Object[].class, new ArrayList<DataType>());
faultTypes = new ArrayList<DataType>();
+ faultBeans = new HashMap<QName, List<DataType<XMLType>>>();
}
public String getName() {
@@ -272,6 +278,14 @@
public void setDynamic(boolean b) {
this.dynamic = b;
}
+
+ public Map<QName, List<DataType<XMLType>>> getFaultBeans() {
+ return faultBeans;
+ }
+
+ public void setFaultBeans(Map<QName, List<DataType<XMLType>>> faultBeans) {
+ this.faultBeans = faultBeans;
+ }
@Override
public OperationImpl clone() throws CloneNotSupportedException {
@@ -293,7 +307,7 @@
clonedInputType.setDataBinding(inputType.getDataBinding());
copy.inputType = clonedInputType;
- if(this.outputType!=null) {
+ if (this.outputType != null) {
copy.outputType = (DataType) this.outputType.clone();
}