Return-Path: Delivered-To: apmail-ws-axis-dev-archive@www.apache.org Received: (qmail 14007 invoked from network); 26 Jun 2007 12:47:28 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 26 Jun 2007 12:47:28 -0000 Received: (qmail 69690 invoked by uid 500); 26 Jun 2007 12:47:24 -0000 Delivered-To: apmail-ws-axis-dev-archive@ws.apache.org Received: (qmail 69582 invoked by uid 500); 26 Jun 2007 12:47:24 -0000 Mailing-List: contact axis-cvs-help@ws.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: List-Post: List-Id: Delivered-To: mailing list axis-cvs@ws.apache.org Received: (qmail 69566 invoked by uid 500); 26 Jun 2007 12:47:24 -0000 Delivered-To: apmail-ws-axis2-cvs@ws.apache.org Received: (qmail 69562 invoked by uid 99); 26 Jun 2007 12:47:24 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 26 Jun 2007 05:47:23 -0700 X-ASF-Spam-Status: No, hits=-99.5 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 26 Jun 2007 05:47:18 -0700 Received: by eris.apache.org (Postfix, from userid 65534) id 01DE41A981A; Tue, 26 Jun 2007 05:46:57 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r550792 [1/3] - in /webservices/axis2/trunk/java/modules: adb/src/org/apache/axis2/databinding/utils/ adb/src/org/apache/axis2/databinding/utils/reader/ adb/src/org/apache/axis2/rpc/receivers/ integration/ integration/test-resources/Complex... Date: Tue, 26 Jun 2007 12:46:57 -0000 To: axis2-cvs@ws.apache.org From: deepal@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20070626124658.01DE41A981A@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: deepal Date: Tue Jun 26 05:46:56 2007 New Revision: 550792 URL: http://svn.apache.org/viewvc?view=rev&rev=550792 Log: making sure our doclitBare wsdl generation is working fine. - Added a test case and generate code on the fly and invoke -Code cleanup in RPC MRs Added: webservices/axis2/trunk/java/modules/integration/test-resources/ComplexDataTypesDocLitBare/ webservices/axis2/trunk/java/modules/integration/test-resources/ComplexDataTypesDocLitBare/ComplexDataTypesDocLitBare.wsdl webservices/axis2/trunk/java/modules/integration/test/org/apache/axis2/rpc/complex/ComplexDataTypesDocLitBareTest.java webservices/axis2/trunk/java/modules/integration/test/org/tempuri/complex/ComplexDataTypesDocLitBare.java Modified: webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/databinding/utils/BeanUtil.java webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/databinding/utils/reader/ADBXMLStreamReaderImpl.java webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/rpc/receivers/RPCInOnlyMessageReceiver.java webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/rpc/receivers/RPCInOutAsyncMessageReceiver.java webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/rpc/receivers/RPCMessageReceiver.java webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/rpc/receivers/RPCUtil.java webservices/axis2/trunk/java/modules/integration/maven.xml webservices/axis2/trunk/java/modules/integration/test/org/tempuri/complex/data/arrays/ArrayOfanyType.java webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisMessage.java webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisService.java webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/java2wsdl/DocLitBareSchemaGenerator.java Modified: webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/databinding/utils/BeanUtil.java URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/databinding/utils/BeanUtil.java?view=diff&rev=550792&r1=550791&r2=550792 ============================================================================== --- webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/databinding/utils/BeanUtil.java (original) +++ webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/databinding/utils/BeanUtil.java Tue Jun 26 05:46:56 2007 @@ -64,12 +64,12 @@ * To Serilize Bean object this method is used, this will create an object array using given * bean object * - * @param beanObject - * @param beanName */ public static XMLStreamReader getPullParser(Object beanObject, QName beanName, - TypeTable typeTable, boolean qualified) { + TypeTable typeTable, + boolean qualified, + boolean processingDocLitBare) { try { JamServiceFactory factory = JamServiceFactory.getInstance(); JamServiceParams jam_service_parms = factory.createServiceParams(); @@ -156,13 +156,7 @@ throw new AxisFault("can not find read method for : " + propDesc.getName()); } - if (elemntNameSpace != null) { - object.add(new QName(elemntNameSpace.getNamespaceURI(), - propDesc.getName(), elemntNameSpace.getPrefix())); - } else { - object.add(new QName(beanName.getNamespaceURI(), - propDesc.getName(), beanName.getPrefix())); - } + addTypeQname(elemntNameSpace, object, propDesc, beanName,processingDocLitBare); object.add(value == null ? null : SimpleTypeMapper.getStringValue(value)); } else if (ptype.isArray()) { if (SimpleTypeMapper.isSimpleType(ptype.getComponentType())) { @@ -179,25 +173,11 @@ int i1 = Array.getLength(value); for (int j = 0; j < i1; j++) { Object o = Array.get(value, j); - if (elemntNameSpace != null) { - object.add(new QName(elemntNameSpace.getNamespaceURI(), - propDesc.getName(), - elemntNameSpace.getPrefix())); - } else { - object.add(new QName(beanName.getNamespaceURI(), - propDesc.getName(), beanName.getPrefix())); - } + addTypeQname(elemntNameSpace, object, propDesc, beanName,processingDocLitBare); object.add(o == null ? null : SimpleTypeMapper.getStringValue(o)); } } else { - if (elemntNameSpace != null) { - object.add(new QName(elemntNameSpace.getNamespaceURI(), - propDesc.getName(), - elemntNameSpace.getPrefix())); - } else { - object.add(new QName(beanName.getNamespaceURI(), - propDesc.getName(), beanName.getPrefix())); - } + addTypeQname(elemntNameSpace, object, propDesc, beanName,processingDocLitBare); object.add(value); } @@ -207,25 +187,11 @@ if (value != null) { for (int j = 0; j < value.length; j++) { Object o = value[j]; - if (elemntNameSpace != null) { - object.add(new QName(elemntNameSpace.getNamespaceURI(), - propDesc.getName(), - elemntNameSpace.getPrefix())); - } else { - object.add(new QName(beanName.getNamespaceURI(), - propDesc.getName(), beanName.getPrefix())); - } + addTypeQname(elemntNameSpace, object, propDesc, beanName,processingDocLitBare); object.add(o); } } else { - if (elemntNameSpace != null) { - object.add(new QName(elemntNameSpace.getNamespaceURI(), - propDesc.getName(), - elemntNameSpace.getPrefix())); - } else { - object.add(new QName(beanName.getNamespaceURI(), - propDesc.getName(), beanName.getPrefix())); - } + addTypeQname(elemntNameSpace, object, propDesc, beanName,processingDocLitBare); object.add(value); } } @@ -240,46 +206,20 @@ for (Iterator j = objList.iterator(); j.hasNext();) { Object o = j.next(); if (SimpleTypeMapper.isSimpleType(o)) { - if (elemntNameSpace != null) { - object.add(new QName(elemntNameSpace.getNamespaceURI(), - propDesc.getName(), - elemntNameSpace.getPrefix())); - } else { - object.add(new QName(beanName.getNamespaceURI(), - propDesc.getName(), beanName.getPrefix())); - } + addTypeQname(elemntNameSpace, object, propDesc, beanName,processingDocLitBare); object.add(o); } else { - if (elemntNameSpace != null) { - object.add(new QName(elemntNameSpace.getNamespaceURI(), - propDesc.getName(), - elemntNameSpace.getPrefix())); - } else { - object.add(new QName(beanName.getNamespaceURI(), - propDesc.getName(), beanName.getPrefix())); - } + addTypeQname(elemntNameSpace, object, propDesc, beanName ,processingDocLitBare); object.add(o); } } } else { - if (elemntNameSpace != null) { - object.add(new QName(elemntNameSpace.getNamespaceURI(), - propDesc.getName(), elemntNameSpace.getPrefix())); - } else { - object.add(new QName(beanName.getNamespaceURI(), - propDesc.getName(), beanName.getPrefix())); - } + addTypeQname(elemntNameSpace, object, propDesc, beanName,processingDocLitBare); object.add(value); } } else { - if (elemntNameSpace != null) { - object.add(new QName(elemntNameSpace.getNamespaceURI(), - propDesc.getName(), elemntNameSpace.getPrefix())); - } else { - object.add(new QName(beanName.getNamespaceURI(), - propDesc.getName(), beanName.getPrefix())); - } + addTypeQname(elemntNameSpace, object, propDesc, beanName,processingDocLitBare); Object value = propDesc.getReadMethod().invoke(beanObject, null); object.add(value); @@ -306,6 +246,25 @@ } } + private static void addTypeQname(QName elemntNameSpace, + ArrayList object, + PropertyDescriptor propDesc, + QName beanName, + boolean processingDocLitBare) { + if (elemntNameSpace != null) { + object.add(new QName(elemntNameSpace.getNamespaceURI(), + propDesc.getName(), elemntNameSpace.getPrefix())); + } else { + if(processingDocLitBare){ + object.add(new QName(propDesc.getName())); + } else { + object.add(new QName(beanName.getNamespaceURI(), + propDesc.getName(), beanName.getPrefix())); + } + + } + } + /** * to get the pull parser for a given bean object , generate the wrpper element using class * name @@ -318,7 +277,7 @@ className = className.substring(className.lastIndexOf('.') + 1, className.length()); } - return getPullParser(beanObject, new QName(className), null, false); + return getPullParser(beanObject, new QName(className), null, false, false); } public static Object deserialize(Class beanClass, @@ -684,6 +643,11 @@ } } } + + + + + public static OMElement getOMElement(QName opName, Object [] args, Modified: webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/databinding/utils/reader/ADBXMLStreamReaderImpl.java URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/databinding/utils/reader/ADBXMLStreamReaderImpl.java?view=diff&rev=550792&r1=550791&r2=550792 ============================================================================== --- webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/databinding/utils/reader/ADBXMLStreamReaderImpl.java (original) +++ webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/databinding/utils/reader/ADBXMLStreamReaderImpl.java Tue Jun 26 05:46:56 2007 @@ -978,7 +978,7 @@ //the thing as a bean and try generating events from it childReader = new WrappingXMLStreamReader (BeanUtil.getPullParser(propertyValue, - propertyQName, typeTable, qualified)); + propertyQName, typeTable, qualified, false)); //we cannot register the namespace context here } Modified: webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/rpc/receivers/RPCInOnlyMessageReceiver.java URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/rpc/receivers/RPCInOnlyMessageReceiver.java?view=diff&rev=550792&r1=550791&r2=550792 ============================================================================== --- webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/rpc/receivers/RPCInOnlyMessageReceiver.java (original) +++ webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/rpc/receivers/RPCInOnlyMessageReceiver.java Tue Jun 26 05:46:56 2007 @@ -16,7 +16,6 @@ package org.apache.axis2.rpc.receivers; import org.apache.axiom.om.OMElement; -import org.apache.axiom.om.OMNamespace; import org.apache.axis2.AxisFault; import org.apache.axis2.context.MessageContext; import org.apache.axis2.description.AxisMessage; @@ -26,7 +25,6 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import javax.xml.namespace.QName; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @@ -48,8 +46,7 @@ .getFirstElement(); AxisMessage inAxisMessage = op.getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE); - String messageNameSpace; - QName elementQName; + String messageNameSpace = null; String methodName = op.getName().getLocalPart(); Method[] methods = ImplClass.getMethods(); for (int i = 0; i < methods.length; i++) { @@ -59,32 +56,11 @@ } } if (inAxisMessage != null) { - if (inAxisMessage.getElementQName() == null) { - // method accept empty SOAPbody - method.invoke(obj, new Object[0]); - } else { - elementQName = inAxisMessage.getElementQName(); - messageNameSpace = elementQName.getNamespaceURI(); - OMNamespace namespace = methodElement.getNamespace(); - if (messageNameSpace != null) { - if (namespace == null || - !messageNameSpace.equals(namespace.getNamespaceURI())) { - throw new AxisFault("namespace mismatch require " + - messageNameSpace + - " found " + - methodElement.getNamespace().getNamespaceURI()); - } - } else if (namespace != null) { - throw new AxisFault( - "namespace mismatch. Axis Oepration expects non-namespace " + - "qualified element. But received a namespace qualified element"); - } - - Object[] objectArray = RPCUtil.processRequest(methodElement, method, - inMessage - .getAxisService().getObjectSupplier()); - method.invoke(obj, objectArray); - } + RPCUtil.invokeServiceClass(inAxisMessage, + method, + obj, + messageNameSpace, + methodElement,inMessage); } } catch (InvocationTargetException e) { Modified: webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/rpc/receivers/RPCInOutAsyncMessageReceiver.java URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/rpc/receivers/RPCInOutAsyncMessageReceiver.java?view=diff&rev=550792&r1=550791&r2=550792 ============================================================================== --- webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/rpc/receivers/RPCInOutAsyncMessageReceiver.java (original) +++ webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/rpc/receivers/RPCInOutAsyncMessageReceiver.java Tue Jun 26 05:46:56 2007 @@ -29,7 +29,6 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import javax.xml.namespace.QName; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @@ -70,7 +69,6 @@ AxisMessage inaxisMessage = op.getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE); String messageNameSpace = null; - QName elementQName; String methodName = op.getName().getLocalPart(); Method[] methods = ImplClass.getMethods(); for (int i = 0; i < methods.length; i++) { @@ -81,32 +79,11 @@ } Object resObject = null; if (inaxisMessage != null) { - if (inaxisMessage.getElementQName() == null) { - // method accept empty SOAPbody - resObject = method.invoke(obj, new Object[0]); - } else { - elementQName = inaxisMessage.getElementQName(); - messageNameSpace = elementQName.getNamespaceURI(); - OMNamespace namespace = methodElement.getNamespace(); - if (messageNameSpace != null) { - if (namespace == null || - !messageNameSpace.equals(namespace.getNamespaceURI())) { - throw new AxisFault("namespace mismatch require " + - messageNameSpace + - " found " + methodElement.getNamespace().getNamespaceURI()); - } - } else if (namespace != null) { - throw new AxisFault( - "namespace mismatch. Axis Oepration expects non-namespace " + - "qualified element. But received a namespace qualified element"); - } - - Object[] objectArray = RPCUtil.processRequest(methodElement, - method, inMessage - .getAxisService().getObjectSupplier()); - resObject = method.invoke(obj, objectArray); - } - + resObject = RPCUtil.invokeServiceClass(inaxisMessage, + method, + obj, + messageNameSpace, + methodElement,inMessage); } @@ -123,7 +100,7 @@ service.getSchemaTargetNamespacePrefix()); SOAPEnvelope envelope = fac.getDefaultEnvelope(); OMElement bodyContent = null; - RPCUtil.processResponse(resObject, service, + RPCUtil.processResponseAsDocLitWrapped(resObject, service, method, envelope, fac, ns, bodyContent, outMessage); } catch (InvocationTargetException e) { String msg = null; Modified: webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/rpc/receivers/RPCMessageReceiver.java URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/rpc/receivers/RPCMessageReceiver.java?view=diff&rev=550792&r1=550791&r2=550792 ============================================================================== --- webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/rpc/receivers/RPCMessageReceiver.java (original) +++ webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/rpc/receivers/RPCMessageReceiver.java Tue Jun 26 05:46:56 2007 @@ -29,12 +29,13 @@ import org.apache.axis2.description.AxisMessage; import org.apache.axis2.description.AxisOperation; import org.apache.axis2.description.AxisService; +import org.apache.axis2.description.Parameter; +import org.apache.axis2.description.java2wsdl.Java2WSDLConstants; import org.apache.axis2.receivers.AbstractInOutMessageReceiver; import org.apache.axis2.wsdl.WSDLConstants; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import javax.xml.namespace.QName; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @@ -68,14 +69,14 @@ Class ImplClass = obj.getClass(); AxisOperation op = inMessage.getOperationContext().getAxisOperation(); + method = (Method)(op.getParameterValue("myMethod")); AxisService service = inMessage.getAxisService(); OMElement methodElement = inMessage.getEnvelope().getBody() .getFirstElement(); AxisMessage inAxisMessage = op.getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE); String messageNameSpace = null; - QName elementQName; - method = (Method)(op.getParameterValue("myMethod")); + if (method == null) { String methodName = op.getName().getLocalPart(); Method[] methods = ImplClass.getMethods(); @@ -94,36 +95,11 @@ } Object resObject = null; if (inAxisMessage != null) { - if (inAxisMessage.getElementQName() == null) { - // method accept empty SOAPbody - resObject = method.invoke(obj, new Object[0]); - } else { - elementQName = inAxisMessage.getElementQName(); - messageNameSpace = elementQName.getNamespaceURI(); - OMNamespace namespace = methodElement.getNamespace(); - if (messageNameSpace != null) { - if (namespace == null) { - throw new AxisFault("namespace mismatch require " + - messageNameSpace + - " found none"); - } - if (!messageNameSpace.equals(namespace.getNamespaceURI())) { - throw new AxisFault("namespace mismatch require " + - messageNameSpace + - " found " + methodElement.getNamespace().getNamespaceURI()); - } - } else if (namespace != null) { - throw new AxisFault( - "namespace mismatch. Axis Oepration expects non-namespace " + - "qualified element. But received a namespace qualified element"); - } - - Object[] objectArray = RPCUtil.processRequest(methodElement, method, - inMessage - .getAxisService().getObjectSupplier()); - resObject = method.invoke(obj, objectArray); - } - + resObject = RPCUtil.invokeServiceClass(inAxisMessage, + method, + obj, + messageNameSpace, + methodElement,inMessage); } @@ -139,9 +115,17 @@ service.getSchemaTargetNamespacePrefix()); SOAPEnvelope envelope = fac.getDefaultEnvelope(); OMElement bodyContent = null; - RPCUtil.processResponse(resObject, service, - method, envelope, fac, ns, - bodyContent, outMessage); + + Parameter generateBare = service.getParameter(Java2WSDLConstants.DOC_LIT_BARE_PARAMETER); + if (generateBare!=null && "true".equals(generateBare.getValue())) { + RPCUtil.processResonseAsDocLitBare(resObject, service, + envelope, fac, ns, + bodyContent, outMessage); + } else { + RPCUtil.processResponseAsDocLitWrapped(resObject, service, + method, envelope, fac, ns, + bodyContent, outMessage); + } outMessage.setEnvelope(envelope); } catch (InvocationTargetException e) { String msg = null; Modified: webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/rpc/receivers/RPCUtil.java URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/rpc/receivers/RPCUtil.java?view=diff&rev=550792&r1=550791&r2=550792 ============================================================================== --- webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/rpc/receivers/RPCUtil.java (original) +++ webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/rpc/receivers/RPCUtil.java Tue Jun 26 05:46:56 2007 @@ -19,14 +19,11 @@ import org.apache.axis2.description.java2wsdl.TypeTable; import org.apache.axis2.engine.ObjectSupplier; import org.apache.axis2.util.StreamWrapper; -import org.apache.ws.commons.schema.XmlSchemaComplexType; -import org.apache.ws.commons.schema.XmlSchemaElement; -import org.apache.ws.commons.schema.XmlSchemaObjectCollection; -import org.apache.ws.commons.schema.XmlSchemaSequence; import javax.xml.namespace.QName; import javax.xml.stream.XMLStreamReader; import java.lang.reflect.Array; +import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Collection; import java.util.Iterator; @@ -62,13 +59,13 @@ if (resObject != null) { //simple type if (resObject instanceof OMElement) { - OMElement result = (OMElement)resObject; + OMElement result = (OMElement) resObject; bodyContent = fac.createOMElement( method.getName() + "Response", ns); OMElement resWrapper; if (qualified) { resWrapper = fac.createOMElement(RETURN_WRAPPER, ns.getNamespaceURI(), - ns.getPrefix()); + ns.getPrefix()); } else { resWrapper = fac.createOMElement(RETURN_WRAPPER, null); } @@ -96,7 +93,7 @@ returnWrapper = new QName(RETURN_WRAPPER); } XMLStreamReader xr = BeanUtil.getPullParser(resObject, - returnWrapper, typeTable, qualified); + returnWrapper, typeTable, qualified, false); StAXOMBuilder stAXOMBuilder = OMXMLBuilderFactory.createStAXOMBuilder( OMAbstractFactory.getOMFactory(), new StreamWrapper(xr)); @@ -111,6 +108,42 @@ } } + public static void processObjectAsDocLitBare(SOAPFactory fac, + Object resObject, + OMElement bodyContent, + OMNamespace ns, + SOAPEnvelope envelope, + boolean qualified, + TypeTable typeTable, + String partName) { + if (resObject instanceof OMElement) { + OMElement result = (OMElement) resObject; + bodyContent = fac.createOMElement( + partName, ns); + bodyContent.addChild(result); + } else if (SimpleTypeMapper.isSimpleType(resObject)) { + bodyContent = fac.createOMElement( + partName, ns); + bodyContent.addChild(fac.createOMText(bodyContent, + SimpleTypeMapper.getStringValue(resObject))); + } else { + QName returnWrapper = new QName(ns.getNamespaceURI(), partName, ns.getPrefix()); + XMLStreamReader xr = BeanUtil.getPullParser(resObject, + returnWrapper, typeTable, qualified, true); + StAXOMBuilder stAXOMBuilder = + OMXMLBuilderFactory.createStAXOMBuilder( + OMAbstractFactory.getOMFactory(), new StreamWrapper(xr)); + OMElement documentElement = stAXOMBuilder.getDocumentElement(); + if (documentElement != null) { + envelope.getBody().addChild(documentElement); + } + } + if (bodyContent != null) { + envelope.getBody().addChild(bodyContent); + } + } + + public static Object[] processRequest(OMElement methodElement, Method method, ObjectSupplier objectSupplier) throws AxisFault { @@ -118,36 +151,204 @@ return BeanUtil.deserialize(methodElement, parameters, objectSupplier); } + public static Object invokeServiceClass(AxisMessage inAxisMessage, + Method method, + Object implClass, + String messageNameSpace, + OMElement methodElement, + MessageContext inMessage) throws AxisFault, + IllegalAccessException, InvocationTargetException { + if (inAxisMessage.getElementQName() == null) { + // method accept empty SOAPbody + return method.invoke(implClass, new Object[0]); + } else { + QName elementQName = inAxisMessage.getElementQName(); + messageNameSpace = elementQName.getNamespaceURI(); + OMNamespace namespace = methodElement.getNamespace(); + if (messageNameSpace != null) { + if (namespace == null) { + throw new AxisFault("namespace mismatch require " + + messageNameSpace + + " found none"); + } + if (!messageNameSpace.equals(namespace.getNamespaceURI())) { + throw new AxisFault("namespace mismatch require " + + messageNameSpace + + " found " + methodElement.getNamespace().getNamespaceURI()); + } + } else if (namespace != null) { + throw new AxisFault( + "namespace mismatch. Axis Oepration expects non-namespace " + + "qualified element. But received a namespace qualified element"); + } + Object[] objectArray; + if (inAxisMessage.isWrapped()) { + objectArray = RPCUtil.processRequest(methodElement, + method, inMessage.getAxisService().getObjectSupplier()); + } else { + objectArray = RPCUtil.processRequest((OMElement) methodElement.getParent(), + method, inMessage.getAxisService().getObjectSupplier()); + } + return method.invoke(implClass, objectArray); + + } + } + public static OMElement getResponseElement(QName resname, - Object [] objs, + Object[] objs, boolean qualified, TypeTable typeTable) { if (qualified) { return BeanUtil.getOMElement(resname, objs, - new QName(resname.getNamespaceURI(), - RETURN_WRAPPER, - resname.getPrefix()), - qualified, - typeTable); + new QName(resname.getNamespaceURI(), + RETURN_WRAPPER, + resname.getPrefix()), + qualified, + typeTable); } else { return BeanUtil.getOMElement(resname, objs, - new QName(RETURN_WRAPPER), qualified, - typeTable); + new QName(RETURN_WRAPPER), qualified, + typeTable); } } - public static void processResponse(Object resObject, - AxisService service, - Method method, - SOAPEnvelope envelope, - SOAPFactory fac, - OMNamespace ns, - OMElement bodyContent, - MessageContext outMessage + public static void processResonseAsDocLitBare(Object resObject, + AxisService service, + SOAPEnvelope envelope, + SOAPFactory fac, + OMNamespace ns, + OMElement bodyContent, + MessageContext outMessage ) throws Exception { QName elementQName = outMessage.getAxisMessage().getElementQName(); + String partName = outMessage.getAxisMessage().getPartName(); if (resObject == null) { - QName resName; + processNullReturns(service, envelope, partName); + } else { + if (resObject instanceof Object[]) { + QName resName = new QName(elementQName.getNamespaceURI(), + partName, + elementQName.getPrefix()); + OMElement bodyChild = RPCUtil.getResponseElement(resName, + (Object[]) resObject, + service.isElementFormDefault(), + service.getTypeTable()); + envelope.getBody().addChild(bodyChild); + } else { + if (resObject.getClass().isArray()) { + int length = Array.getLength(resObject); + Object objArray[]; + if (resObject instanceof byte[]) { + objArray = new Object[1]; + objArray[0] = Base64.encode((byte[]) resObject); + } else { + objArray = new Object[length]; + for (int i = 0; i < length; i++) { + objArray[i] = Array.get(resObject, i); + } + } + + QName resName = new QName(elementQName.getNamespaceURI(), + partName, + elementQName.getPrefix()); + OMElement bodyChild = RPCUtil.getResponseElement(resName, + objArray, + service.isElementFormDefault(), + service.getTypeTable()); + envelope.getBody().addChild(bodyChild); + } else { + if (SimpleTypeMapper.isCollection(resObject.getClass())) { + Collection collection = (Collection) resObject; + int size = collection.size(); + Object values[] = new Object[size]; + int count = 0; + for (Iterator iterator = collection.iterator(); iterator.hasNext();) { + values[count] = iterator.next(); + count++; + + } + QName resName = new QName(elementQName.getNamespaceURI(), + partName, + elementQName.getPrefix()); + OMElement bodyChild = RPCUtil.getResponseElement(resName, + values, + service.isElementFormDefault(), + service.getTypeTable()); + envelope.getBody().addChild(bodyChild); + } else if (SimpleTypeMapper.isDataHandler(resObject.getClass())) { + OMElement resElemt; + if (service.isElementFormDefault()) { + resElemt = fac.createOMElement(partName, ns); + } else { + resElemt = fac.createOMElement(partName, null); + } + OMText text = fac.createOMText(resObject, true); + resElemt.addChild(text); + envelope.getBody().addChild(resElemt); + } else { + if (service.isElementFormDefault()) { + RPCUtil.processObjectAsDocLitBare(fac, + resObject, + bodyContent, + ns, + envelope, + service.isElementFormDefault(), + service.getTypeTable(), + partName); + } else { + RPCUtil.processObjectAsDocLitBare(fac, + resObject, + bodyContent, + ns, + envelope, + service.isElementFormDefault(), + null, + partName); + } + } + } + } + } + outMessage.setEnvelope(envelope); + } + + /** + * This method is use to to crete the reposne when , the return value is null + * + * @param service Current AxisService + * @param envelope response enevelop + */ + private static void processNullReturns(AxisService service, + SOAPEnvelope envelope, String partName) { + QName resName; + if (service.isElementFormDefault()) { + resName = new QName(service.getSchematargetNamespace(), + partName, + service.getSchemaTargetNamespacePrefix()); + } else { + resName = new QName(partName); + } + XMLStreamReader xr = new NullXMLStreamReader(resName); + StreamWrapper parser = new StreamWrapper(xr); + StAXOMBuilder stAXOMBuilder = + OMXMLBuilderFactory.createStAXOMBuilder( + OMAbstractFactory.getSOAP11Factory(), parser); + envelope.getBody().addChild(stAXOMBuilder.getDocumentElement()); + } + + + public static void processResponseAsDocLitWrapped(Object resObject, + AxisService service, + Method method, + SOAPEnvelope envelope, + SOAPFactory fac, + OMNamespace ns, + OMElement bodyContent, + MessageContext outMessage + ) throws Exception { + QName elementQName = outMessage.getAxisMessage().getElementQName(); + if (resObject == null) { + QName resName; if (service.isElementFormDefault()) { resName = new QName(service.getSchematargetNamespace(), RETURN_WRAPPER, @@ -168,21 +369,21 @@ } else { if (resObject instanceof Object[]) { - QName resName = new QName(elementQName.getNamespaceURI(), - method.getName() + "Response", - elementQName.getPrefix()); - OMElement bodyChild = RPCUtil.getResponseElement(resName, - (Object[])resObject, - service.isElementFormDefault(), - service.getTypeTable()); - envelope.getBody().addChild(bodyChild); + QName resName = new QName(elementQName.getNamespaceURI(), + method.getName() + "Response", + elementQName.getPrefix()); + OMElement bodyChild = RPCUtil.getResponseElement(resName, + (Object[]) resObject, + service.isElementFormDefault(), + service.getTypeTable()); + envelope.getBody().addChild(bodyChild); } else { if (resObject.getClass().isArray()) { int length = Array.getLength(resObject); - Object objArray []; + Object objArray[]; if (resObject instanceof byte[]) { objArray = new Object[1]; - objArray[0] = Base64.encode((byte[])resObject); + objArray[0] = Base64.encode((byte[]) resObject); } else { objArray = new Object[length]; for (int i = 0; i < length; i++) { @@ -191,31 +392,31 @@ } QName resName = new QName(elementQName.getNamespaceURI(), - method.getName() + "Response", - elementQName.getPrefix()); + method.getName() + "Response", + elementQName.getPrefix()); OMElement bodyChild = RPCUtil.getResponseElement(resName, - objArray, - service.isElementFormDefault(), - service.getTypeTable()); + objArray, + service.isElementFormDefault(), + service.getTypeTable()); envelope.getBody().addChild(bodyChild); } else { if (SimpleTypeMapper.isCollection(resObject.getClass())) { - Collection collection = (Collection)resObject; + Collection collection = (Collection) resObject; int size = collection.size(); - Object values [] = new Object[size]; + Object values[] = new Object[size]; int count = 0; for (Iterator iterator = collection.iterator(); iterator.hasNext();) { values[count] = iterator.next(); - count ++; + count++; } QName resName = new QName(elementQName.getNamespaceURI(), - method.getName() + "Response", - elementQName.getPrefix()); + method.getName() + "Response", + elementQName.getPrefix()); OMElement bodyChild = RPCUtil.getResponseElement(resName, - values, - service.isElementFormDefault(), - service.getTypeTable()); + values, + service.isElementFormDefault(), + service.getTypeTable()); envelope.getBody().addChild(bodyChild); } else if (SimpleTypeMapper.isDataHandler(resObject.getClass())) { OMElement resElemt = fac.createOMElement(method.getName() + "Response", ns); @@ -232,48 +433,19 @@ } else { if (service.isElementFormDefault()) { RPCUtil.processResponse(fac, resObject, bodyContent, ns, - envelope, method, - service.isElementFormDefault(), - service.getTypeTable()); + envelope, method, + service.isElementFormDefault(), + service.getTypeTable()); } else { RPCUtil.processResponse(fac, resObject, bodyContent, ns, - envelope, method, - service.isElementFormDefault(), - null); + envelope, method, + service.isElementFormDefault(), + null); } } } } } outMessage.setEnvelope(envelope); - } - - /** - * This can be used to get the part name of the response - * - * @param outMessage : AxisMessage - * @return String - */ - private static String getReturnName(AxisMessage outMessage) { - if (outMessage != null) { - Object element = outMessage.getSchemaElement(); - if (element instanceof XmlSchemaComplexType) { - XmlSchemaComplexType xmlSchemaComplexType = (XmlSchemaComplexType)element; - Object particle = xmlSchemaComplexType.getParticle(); - if (particle instanceof XmlSchemaSequence) { - XmlSchemaSequence xmlSchemaSequence = (XmlSchemaSequence)particle; - Object items = xmlSchemaSequence.getItems(); - if (items instanceof XmlSchemaObjectCollection) { - XmlSchemaObjectCollection xmlSchemaObjectCollection = - (XmlSchemaObjectCollection)items; - Object schemaElement = xmlSchemaObjectCollection.getItem(0); - if (schemaElement instanceof XmlSchemaElement) { - return ((XmlSchemaElement)schemaElement).getName(); - } - } - } - } - } - return RETURN_WRAPPER; } } Modified: webservices/axis2/trunk/java/modules/integration/maven.xml URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/integration/maven.xml?view=diff&rev=550792&r1=550791&r2=550792 ============================================================================== --- webservices/axis2/trunk/java/modules/integration/maven.xml (original) +++ webservices/axis2/trunk/java/modules/integration/maven.xml Tue Jun 26 05:46:56 2007 @@ -39,6 +39,22 @@ + + Compiling ComplexDataTypesDocLitBare.wsdl + + + + + + + + + + + + + + Compiling DocumentUnwrappingTest.wsdl --------------------------------------------------------------------- To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org For additional commands, e-mail: axis-cvs-help@ws.apache.org