From: Chad B. <cwb...@us...> - 2007-06-15 18:12:49
|
User: cwbrandon Date: 07/06/15 11:12:51 Modified: support/webservice-client/src/main/java/org/andromda/cartridges/support/webservice/client Tag: V3_x_HEAD WebServiceClient.java Axis2ClientUtils.java Log: add support for typesafe enums Revision Changes Path No revision No revision 1.1.2.2 +12 -5 cartridges/support/webservice-client/src/main/java/org/andromda/cartridges/support/webservice/client/Attic/WebServiceClient.java Index: WebServiceClient.java =================================================================== RCS file: /cvsroot/andromda/cartridges/support/webservice-client/src/main/java/org/andromda/cartridges/support/webservice/client/Attic/WebServiceClient.java,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -u -w -r1.1.2.1 -r1.1.2.2 --- WebServiceClient.java 12 Jun 2007 03:45:25 -0000 1.1.2.1 +++ WebServiceClient.java 15 Jun 2007 18:12:50 -0000 1.1.2.2 @@ -288,12 +288,19 @@ if (method.getReturnType() != void.class) { + try + { result = Axis2ClientUtils.deserialize( response.getFirstElement(), method.getReturnType(), new DefaultObjectSupplier()); } + catch (Exception exception) + { + throw new AxisFault(exception); + } + } omElement = null; response = null; return result; 1.1.2.2 +131 -4 cartridges/support/webservice-client/src/main/java/org/andromda/cartridges/support/webservice/client/Attic/Axis2ClientUtils.java Index: Axis2ClientUtils.java =================================================================== RCS file: /cvsroot/andromda/cartridges/support/webservice-client/src/main/java/org/andromda/cartridges/support/webservice/client/Attic/Axis2ClientUtils.java,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -u -w -r1.1.2.1 -r1.1.2.2 --- Axis2ClientUtils.java 12 Jun 2007 03:45:25 -0000 1.1.2.1 +++ Axis2ClientUtils.java 15 Jun 2007 18:12:51 -0000 1.1.2.2 @@ -196,7 +196,7 @@ definition, NAME, bean.getClass().getSimpleName()); - if (SimpleTypeMapper.isSimpleType(bean)) + if (isSimpleType(bean)) { omElement.addChild(factory.createOMText(SimpleTypeMapper.getStringValue(bean))); } @@ -574,17 +574,18 @@ * @param type the java type. * @param objectSupplier the "object supplier" used to construct objects from given classes. * @return the deserialized object. + * @throws Exception */ public static Object deserialize( OMElement element, final Class type, - final ObjectSupplier objectSupplier) + final ObjectSupplier objectSupplier) throws Exception { Object bean = null; - if (SimpleTypeMapper.isSimpleType(type)) + if (isSimpleType(type)) { bean = - SimpleTypeMapper.getSimpleTypeObject( + getSimpleTypeObject( type, element); } @@ -672,4 +673,130 @@ } return found; } + + /** + * First delegate to the Axis2 simple type mapper, if that says + * its simple, it is, otherwise check to see if the type is an enumeration (typesafe + * or Java5 version). + * + * @param bean the bean to check. + * @return true/false + */ + private static boolean isSimpleType(final Object bean) + { + return isSimpleType(bean != null ? bean.getClass() : null); + } + + /** + * First delegate to the Axis2 simple type mapper, if that says + * its simple, it is, otherwise check to see if the type is an enumeration (typesafe + * or Java5 version). + * + * @param type the type to check. + * @return true/false + */ + private static boolean isSimpleType(final Class type) + { + return java.util.Calendar.class.isAssignableFrom(type) || + java.util.Date.class.isAssignableFrom(type) || + SimpleTypeMapper.isSimpleType(type) || + isEnumeration(type); + } + + /** + * Constructs a type object for the given type and element. + * + * @param type the class type to construct. + * @param element the element containing the value. + * @return the constructed object or null if one couldn't be constructed. + * @throws Exception + */ + public static Object getSimpleTypeObject(Class type, OMElement element) + throws Exception + { + Object object = SimpleTypeMapper.getSimpleTypeObject(type, element); + if (object == null && type != null && element != null) + { + if (type.isEnum()) + { + + } + else + { + final Method fromMethod = getEnumerationFromMethod(type); + if (fromMethod != null) + { + object = fromMethod.invoke(type, new Object[]{element.getText()}); + } + } + } + return object; + } + + private static final String FROM = "from"; + + /** + * Indicates whether or not the given type represents an enumeration. + * + * @param type the type to check. + * @return true/false + */ + private static boolean isEnumeration(final Class type) + { + return isEnumeration(type, getEnumerationFromMethod(type)); + } + + /** + * Indicates whether or not the given type represents an enumeration by checking + * whether the type is an actual "enum" class or the "fromMethod" is not null. + * + * @param type the type to check. + * @param the "from" method used to construct a typesafe enumeration from it's simple type. + * @return true/false + */ + private static boolean isEnumeration(final Class type, final Method fromMethod) + { + boolean enumeration = false; + if (type != null) + { + enumeration = type.isEnum(); + if (!enumeration) + { + enumeration = fromMethod != null; + } + } + return enumeration; + } + + /** + * Gets the "from" method for a type safe enumeration. + * + * @param type the type. + * @return the "from" method (i.e. fromString, etc). + */ + private static Method getEnumerationFromMethod(final Class type) + { + Method fromMethod = null; + if (type != null) + { + // - check for the typesafe enum pattern + for (final Method method : type.getMethods()) + { + if (method.getName().startsWith(FROM)) + { + final Class[] parameterTypes = method.getParameterTypes(); + if (parameterTypes.length == 1) + { + final Class parameterType = parameterTypes[0]; + if (method.getName().equals(FROM + parameterType.getSimpleName())) + { + fromMethod = method; + break; + } + } + } + } + } + return fromMethod; + } } \ No newline at end of file |
From: Chad B. <cwb...@us...> - 2007-07-17 21:23:14
|
User: cwbrandon Date: 07/07/17 14:23:08 Modified: support/webservice-client/src/main/java/org/andromda/cartridges/support/webservice/client Tag: V3_x_HEAD WebServiceClient.java Axis2ClientUtils.java Log: Improve error handling for missing operations in the WSDL Revision Changes Path No revision No revision 1.1.2.7 +36 -27 cartridges/support/webservice-client/src/main/java/org/andromda/cartridges/support/webservice/client/Attic/WebServiceClient.java Index: WebServiceClient.java =================================================================== RCS file: /cvsroot/andromda/cartridges/support/webservice-client/src/main/java/org/andromda/cartridges/support/webservice/client/Attic/WebServiceClient.java,v retrieving revision 1.1.2.6 retrieving revision 1.1.2.7 diff -u -w -r1.1.2.6 -r1.1.2.7 --- WebServiceClient.java 19 Jun 2007 16:38:04 -0000 1.1.2.6 +++ WebServiceClient.java 17 Jul 2007 21:23:07 -0000 1.1.2.7 @@ -52,6 +52,11 @@ private Definition definition; /** + * The WSDL url. + */ + private String wsdlUrl; + + /** * The monitor used for synchronization of the definition (to make it thread-safe). */ private final Object definitionMonitor = new Object(); @@ -111,6 +116,7 @@ { this.serviceClient = new ServiceClient(); this.serviceClass = serviceClass; + this.wsdlUrl = wsdlUrl; final WSDLReader reader = WSDLFactory.newInstance().newWSDLReader(); if (username != null && username.trim().length() > 0) { @@ -292,15 +298,7 @@ final Method method = this.getMethod( operationName, arguments); - OMElement omElement; - synchronized (this.definitionMonitor) - { - omElement = - Axis2ClientUtils.getOperationOMElement( - this.definition, - method, - arguments); - } + OMElement omElement = this.getOperationElement(method, arguments); Object result = null; try { @@ -324,6 +322,33 @@ } /** + * Retrieves the operation element from the internal WSDL definition. If it can't be found + * an exception is thrown indicating the name of the operation not found. + * + * @param method the method to invoke. + * @param arguments the arguments of the method + * @return the found operation element + */ + private OMElement getOperationElement(final Method method, Object[] arguments) + { + OMElement element = null; + synchronized (this.definitionMonitor) + { + element = + Axis2ClientUtils.getOperationOMElement( + this.definition, + method, + arguments); + } + if (element == null) + { + throw new WebServiceClientException("No operation named '" + method.getName() + + "' was found in WSDL: " + this.wsdlUrl); + } + return element; + } + + /** * Invoke the nonblocking/Asynchronous call * * @param operationName @@ -338,15 +363,7 @@ final Method method = this.getMethod( operationName, arguments); - OMElement omElement; - synchronized (this.definitionMonitor) - { - omElement = - Axis2ClientUtils.getOperationOMElement( - this.definition, - method, - arguments); - } + OMElement omElement = this.getOperationElement(method, arguments); try { this.serviceClient.sendReceiveNonBlocking( @@ -367,15 +384,7 @@ final Method method = this.getMethod( operationName, arguments); - OMElement omElement; - synchronized (this.definitionMonitor) - { - omElement = - Axis2ClientUtils.getOperationOMElement( - this.definition, - method, - arguments); - } + OMElement omElement = this.getOperationElement(method, arguments); try { this.serviceClient.sendRobust(omElement); 1.1.2.4 +57 -49 cartridges/support/webservice-client/src/main/java/org/andromda/cartridges/support/webservice/client/Attic/Axis2ClientUtils.java Index: Axis2ClientUtils.java =================================================================== RCS file: /cvsroot/andromda/cartridges/support/webservice-client/src/main/java/org/andromda/cartridges/support/webservice/client/Attic/Axis2ClientUtils.java,v retrieving revision 1.1.2.3 retrieving revision 1.1.2.4 diff -u -w -r1.1.2.3 -r1.1.2.4 --- Axis2ClientUtils.java 15 Jun 2007 18:44:13 -0000 1.1.2.3 +++ Axis2ClientUtils.java 17 Jul 2007 21:23:07 -0000 1.1.2.4 @@ -57,6 +57,8 @@ definition, NAME, operationName); + if (operationSchema != null) + { operationOMElement = getOMElement( definition, @@ -109,6 +111,7 @@ operationOMElement.addChild(element); } } + } catch (Exception exception) { throw new RuntimeException(exception); @@ -286,10 +289,15 @@ private static boolean isQualified(Schema schema) { + boolean isQualified = false; + if (schema != null) + { final String qualified = Axis2ClientUtils.getAttributeValue( schema.getElement(), ELEMENT_FORM_DEFAULT); - return QUALIFIED.equalsIgnoreCase(qualified); + isQualified = QUALIFIED.equalsIgnoreCase(qualified); + } + return isQualified; } private static String getTargetNamespace(Schema schema) |