Hey Dims,
Looks like we've got more tab chars. Also, no svn props set...

--kevan
On Feb 12, 2007, at 1:16 PM, [EMAIL PROTECTED] wrote:

Author: dims
Date: Mon Feb 12 10:16:14 2007
New Revision: 506561

URL: http://svn.apache.org/viewvc?view=rev&rev=506561
Log:
Fix for GERONIMO-2822 - Axis2 Integration - Get invoke() method working for WSDL provided scenario

Added:
geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/ apache/geronimo/axis2/AxisServiceGenerator.java
Modified:
geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/ apache/geronimo/axis2/Axis2WebServiceContainer.java

Modified: geronimo/server/trunk/modules/geronimo-axis2/src/main/ java/org/apache/geronimo/axis2/Axis2WebServiceContainer.java URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/ geronimo-axis2/src/main/java/org/apache/geronimo/axis2/ Axis2WebServiceContainer.java?view=diff&rev=506561&r1=506560&r2=506561 ====================================================================== ======== --- geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/ apache/geronimo/axis2/Axis2WebServiceContainer.java (original) +++ geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/ apache/geronimo/axis2/Axis2WebServiceContainer.java Mon Feb 12 10:16:14 2007
@@ -138,142 +138,8 @@
configurationContext.setServicePath (portInfo.getLocation());

             if(wsdlDefinition != null){ //WSDL Has been provided
-                       WSDLToAxisServiceBuilder wsdlBuilder = null;
-                       
-                       WSDLFactory factory = WSDLFactory.newInstance();
-                       WSDLWriter writer = factory.newWSDLWriter();
-               
-                       ByteArrayOutputStream out = new ByteArrayOutputStream();
-                       writer.writeWSDL(wsdlDefinition, out);
- String wsdlContent = out.toString("UTF-8"); //TODO Pass correct encoding from WSDL
-               
- OMNamespace documentElementNS = ((OMElement) XMLUtils.toOM(new StringReader(wsdlContent))).getNamespace();
-                       
- Map<QName, Service> serviceMap = wsdlDefinition.getServices(); - Service wsdlService = serviceMap.values().iterator ().next();
-               
-               Map<String, Port> portMap = wsdlService.getPorts();
-               Port port = portMap.values().iterator().next();
-               String portName = port.getName();
-                       QName serviceQName = wsdlService.getQName();
-
-                       //Decide on WSDL Version :
- if (WSDLConstants.WSDL20_2006Constants.DEFAULT_NAMESPACE_URI.equals (documentElementNS.getNamespaceURI())){ - wsdlBuilder = new WSDL20ToAxisServiceBuilder(new StringBufferInputStream(wsdlContent), serviceQName, null);
-               }
- else if(Constants.NS_URI_WSDL11.equals (documentElementNS.getNamespaceURI())){ - wsdlBuilder = new WSDL11ToAxisServiceBuilder (wsdlDefinition, serviceQName , portName);
-               }
-               //populate with axis2 objects
-               service = wsdlBuilder.populateService();
- service.addParameter(new Parameter("ServiceClass", endpointClassName));
-                service.setWsdlFound(true);
-                service.setClassLoader(classLoader);
-               
-               //Goind to create annotations by hand
- DescriptionBuilderComposite dbc = new DescriptionBuilderComposite();
-               dbc.setClassLoader(classLoader);
- HashMap<String, DescriptionBuilderComposite> dbcMap = new HashMap<String, DescriptionBuilderComposite>();
-               
-               //Service related annotations
- WebServiceAnnot serviceAnnot = WebServiceAnnot.createWebServiceAnnotImpl();
-                serviceAnnot.setPortName(portName);
-                serviceAnnot.setServiceName(service.getName());
-                serviceAnnot.setName(service.getName());
- serviceAnnot.setTargetNamespace (service.getTargetNamespace()); - //don't set endpointinterface now otherwise you'll get a - //Validation error: SEI must not set a value for @WebService.endpointInterface.
-                //The default value is "".
- //serviceAnnot.setEndpointInterface (endpointClassName);
-               
- Class endPointClass = classLoader.loadClass (endpointClassName);
-                       Method[] classMethods = endPointClass.getMethods();
-                       
- for(Iterator<AxisOperation> opIterator = service.getOperations() ; opIterator.hasNext() ;){
-                               AxisOperation operation = opIterator.next();
- JAXWSMessageReceiver receiver = JAXWSMessageReceiver.class.newInstance();
-                        operation.setMessageReceiver(receiver);
-                               
-                               for(Method method : classMethods){
-                                       // TODO Is this correct method?
- String axisOpName = operation.getName ().getLocalPart();
-                                       
-                                       if(method.getName().equals(axisOpName)){
-                                               //Method level annotations
- MethodDescriptionComposite mdc = new MethodDescriptionComposite(); - WebMethodAnnot webMethodAnnot = WebMethodAnnot.createWebMethodAnnotImpl();
-                                               
webMethodAnnot.setOperationName(method.getName());
-//                                             
methodAnnot.setAction(operation.get);
-//                                             methodAnnot.setExclude(false);
-                                               
-                                               
mdc.setWebMethodAnnot(webMethodAnnot);
-
-                                               
mdc.setMethodName(method.getName());
-                                               
mdc.setDescriptionBuilderCompositeRef(dbc);
-
- String MEP = operation.getMessageExchangePattern();
-                                       
-                                       if (WSDLUtil.isInputPresentForMEP(MEP)) 
{
- AxisMessage inAxisMessage = operation.getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
-                                               if(inAxisMessage != null){
-                                                       //TODO: Has to explore 
more
- Class[] paramTypes = method.getParameterTypes ();
-                                                       int i = 0;
-                                                       for(Class paramType : 
paramTypes){
-                                                               //Parameter 
level annotations
- ParameterDescriptionComposite pdc = new ParameterDescriptionComposite(); - WebParamAnnot webParamAnnot = WebParamAnnot.createWebParamAnnotImpl();
-
-                                                               
webParamAnnot.setName("arg"+i);
- webParamAnnot.setName (inAxisMessage.getElementQName().getLocalPart()); - webParamAnnot.setTargetNamespace (inAxisMessage.getElementQName().getNamespaceURI());
-                                                               
-                                                               
pdc.setWebParamAnnot(webParamAnnot);
-                                                               String 
strParamType = paramType.toString();
-                                                               
-                                                               
pdc.setMethodDescriptionCompositeRef(mdc);
- pdc.setParameterType(strParamType.split(" ") [1]);
-                                                               
mdc.addParameterDescriptionComposite(pdc, i);
-                                                               //TODO: Do we 
need to set these things?
- RequestWrapperAnnot requestWrapAnnot = RequestWrapperAnnot.createRequestWrapperAnnotImpl(); - requestWrapAnnot.setLocalName (inAxisMessage.getElementQName().getLocalPart()); - requestWrapAnnot.setTargetNamespace (inAxisMessage.getElementQName().getNamespaceURI());
-                                                               
-                                                               
mdc.setRequestWrapperAnnot(requestWrapAnnot);
-                                                               i++;
-                                                       }
-                                               }
-                                       }
-                                       
-                                       if 
(WSDLUtil.isOutputPresentForMEP(MEP)) {
- AxisMessage outAxisMessage = operation.getMessage(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
-                                               
-                                               if(outAxisMessage != null){
- mdc.setReturnType(method.getReturnType ().toString().split(" ")[1]);
-                                                       //TODO:
- ResponseWrapperAnnot responseWrapAnnot = ResponseWrapperAnnot.createResponseWrapperAnnotImpl(); - responseWrapAnnot.setLocalName (outAxisMessage.getElementQName().getLocalPart()); - responseWrapAnnot.setTargetNamespace (outAxisMessage.getElementQName().getNamespaceURI());
-                                                       
mdc.setResponseWrapperAnnot(responseWrapAnnot);
-                                               }
-                                       }
-                                       mdc.setWebMethodAnnot(webMethodAnnot);
-                                       dbc.addMethodDescriptionComposite(mdc);
-                                       
-                                               break;
-                                       }
-                               }
-                       }
-               
-               dbc.setWebServiceAnnot(serviceAnnot);
-                       dbc.setWsdlDefinition(wsdlDefinition);
-                       dbc.setClassName(endpointClassName);
- dbc.setCustomWsdlGenerator(new WSDLGeneratorImpl (wsdlDefinition));
-                       dbcMap.put(endpointClassName, dbc);
- List<ServiceDescription> serviceDescList = DescriptionFactory.createServiceDescriptionFromDBCMap(dbcMap);
-                ServiceDescription sd = serviceDescList.get(0);
- Parameter serviceDescription = new Parameter (EndpointDescription.AXIS_SERVICE_PARAMETER, sd.getEndpointDescriptions()[0]);
-                service.addParameter(serviceDescription);
+ AxisServiceGenerator serviceGen = new AxisServiceGenerator(); + service = serviceGen.getServiceFromWSDL(portInfo, endpointClassName, wsdlDefinition, classLoader);
                                                
             }else { //No WSDL, Axis2 will handle it. Is it ?
service = AxisService.createService (endpointClassName, configurationContext.getAxisConfiguration(), JAXWSMessageReceiver.class);

Added: geronimo/server/trunk/modules/geronimo-axis2/src/main/java/ org/apache/geronimo/axis2/AxisServiceGenerator.java URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/ geronimo-axis2/src/main/java/org/apache/geronimo/axis2/ AxisServiceGenerator.java?view=auto&rev=506561 ====================================================================== ======== --- geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/ apache/geronimo/axis2/AxisServiceGenerator.java (added) +++ geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/ apache/geronimo/axis2/AxisServiceGenerator.java Mon Feb 12 10:16:14 2007
@@ -0,0 +1,296 @@
+/**
+ * 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.geronimo.axis2;
+
+import java.io.ByteArrayOutputStream;
+import java.io.StringBufferInputStream;
+import java.io.StringReader;
+import java.lang.reflect.Method;
+import java.net.URI;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.wsdl.Definition;
+import javax.wsdl.Port;
+import javax.wsdl.Service;
+import javax.wsdl.factory.WSDLFactory;
+import javax.wsdl.xml.WSDLWriter;
+import javax.xml.namespace.QName;
+import javax.xml.ws.WebServiceException;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMNamespace;
+import org.apache.axis2.Constants;
+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.WSDL11ToAxisServiceBuilder;
+import org.apache.axis2.description.WSDL20ToAxisServiceBuilder;
+import org.apache.axis2.description.WSDLToAxisServiceBuilder;
+import org.apache.axis2.jaxws.description.DescriptionFactory;
+import org.apache.axis2.jaxws.description.EndpointDescription;
+import org.apache.axis2.jaxws.description.ServiceDescription;
+import org.apache.axis2.jaxws.description.builder.DescriptionBuilderComposite ; +import org.apache.axis2.jaxws.description.builder.MethodDescriptionComposite; +import org.apache.axis2.jaxws.description.builder.ParameterDescriptionComposi te; +import org.apache.axis2.jaxws.description.builder.ResponseWrapperAnnot;
+import org.apache.axis2.jaxws.description.builder.WebMethodAnnot;
+import org.apache.axis2.jaxws.description.builder.WebParamAnnot;
+import org.apache.axis2.jaxws.description.builder.WebResultAnnot;
+import org.apache.axis2.jaxws.description.builder.WebServiceAnnot;
+import org.apache.axis2.jaxws.description.builder.WsdlComposite;
+import org.apache.axis2.jaxws.description.builder.WsdlGenerator;
+import org.apache.axis2.jaxws.server.JAXWSMessageReceiver;
+import org.apache.axis2.util.XMLUtils;
+import org.apache.axis2.wsdl.WSDLConstants;
+import org.apache.axis2.wsdl.WSDLUtil;
+import org.apache.ws.commons.schema.XmlSchemaComplexType;
+import org.apache.ws.commons.schema.XmlSchemaElement;
+import org.apache.ws.commons.schema.XmlSchemaObject;
+import org.apache.ws.commons.schema.XmlSchemaSequence;
+import org.apache.ws.commons.schema.XmlSchemaType;
+
+public class AxisServiceGenerator {
+       
+       public AxisServiceGenerator(){
+               super();
+       }
+       
+ public AxisService getServiceFromWSDL (org.apache.geronimo.jaxws.PortInfo portInfo, String endpointClassName, Definition wsdlDefinition, ClassLoader classLoader) throws Exception {
+               WSDLToAxisServiceBuilder wsdlBuilder = null;
+               
+        WSDLFactory factory = WSDLFactory.newInstance();
+        WSDLWriter writer = factory.newWSDLWriter();
+
+        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        writer.writeWSDL(wsdlDefinition, out);
+ String wsdlContent = out.toString("UTF-8"); //TODO WSDL Doc must be either UTF-8 or UTF-16
+
+ OMNamespace documentElementNS = ((OMElement)XMLUtils.toOM(new StringReader(wsdlContent))).getNamespace();
+               
+               Map<QName, Service> serviceMap = wsdlDefinition.getServices();
+       Service wsdlService = serviceMap.values().iterator().next();
+       
+       Map<String, Port> portMap = wsdlService.getPorts();
+       Port port = portMap.values().iterator().next();
+       String portName = port.getName();
+               QName serviceQName = wsdlService.getQName();
+
+               //Decide WSDL Version :
+ if (WSDLConstants.WSDL20_2006Constants.DEFAULT_NAMESPACE_URI.equals (documentElementNS.getNamespaceURI())){ + wsdlBuilder = new WSDL20ToAxisServiceBuilder(new StringBufferInputStream(wsdlContent), serviceQName, null);
+       }
+ else if(Constants.NS_URI_WSDL11.equals (documentElementNS.getNamespaceURI())){ + wsdlBuilder = new WSDL11ToAxisServiceBuilder(wsdlDefinition, serviceQName , portName);
+       }
+       //populate with axis2 objects
+       AxisService service = wsdlBuilder.populateService();
+ service.addParameter(new Parameter("ServiceClass", endpointClassName));
+        service.setWsdlFound(true);
+        service.setClassLoader(classLoader);
+       
+       //Going to create annotations by hand
+ DescriptionBuilderComposite dbc = new DescriptionBuilderComposite();
+       dbc.setClassLoader(classLoader);
+ HashMap<String, DescriptionBuilderComposite> dbcMap = new HashMap<String, DescriptionBuilderComposite>();
+       
+       //Service related annotations
+ WebServiceAnnot serviceAnnot = WebServiceAnnot.createWebServiceAnnotImpl();
+        serviceAnnot.setPortName(portName);
+        serviceAnnot.setServiceName(service.getName());
+        serviceAnnot.setName(service.getName());
+ serviceAnnot.setTargetNamespace(service.getTargetNamespace ());
+       
+               Class endPointClass = classLoader.loadClass(endpointClassName);
+               Method[] classMethods = endPointClass.getMethods();
+               
+ for(Iterator<AxisOperation> opIterator = service.getOperations() ; opIterator.hasNext() ;){
+                       AxisOperation operation = opIterator.next();
+ operation.setMessageReceiver (JAXWSMessageReceiver.class.newInstance());
+                       
+                       for(Method method : classMethods){
+                               String axisOpName = 
operation.getName().getLocalPart();
+                               if(method.getName().equals(axisOpName)){
+                                       fillOperationInformation(method, 
operation, dbc);
+                                       break;
+                               }
+                       }
+               }
+       
+       dbc.setWebServiceAnnot(serviceAnnot);
+               dbc.setWsdlDefinition(wsdlDefinition);
+               dbc.setClassName(endpointClassName);
+ dbc.setCustomWsdlGenerator(new WSDLGeneratorImpl (wsdlDefinition));
+               dbcMap.put(endpointClassName, dbc);
+ List<ServiceDescription> serviceDescList = DescriptionFactory.createServiceDescriptionFromDBCMap(dbcMap);
+        ServiceDescription sd = serviceDescList.get(0);
+ Parameter serviceDescription = new Parameter (EndpointDescription.AXIS_SERVICE_PARAMETER, sd.getEndpointDescriptions()[0]);
+        service.addParameter(serviceDescription);
+
+        return service;
+       }
+       
+ private void fillOperationInformation(Method method, AxisOperation operation, DescriptionBuilderComposite dbc) throws Exception{
+                       
+                       MethodDescriptionComposite mdc = new 
MethodDescriptionComposite();
+ WebMethodAnnot webMethodAnnot = WebMethodAnnot.createWebMethodAnnotImpl();
+                       webMethodAnnot.setOperationName(method.getName());
+                       
+                       //TODO: Might need implement more here
+//                     
if(operation.getStyle().equals(AxisOperation.STYLE_DOC)){
+//                             
+//                     }else 
if(operation.getStyle().equals(AxisOperation.STYLE_RPC)){
+//                             
+//                     }
+                       
+                       
+                       mdc.setWebMethodAnnot(webMethodAnnot);
+                       mdc.setMethodName(method.getName());
+
+                       String MEP = operation.getMessageExchangePattern();
+                       
+                       if (WSDLUtil.isInputPresentForMEP(MEP)) {
+ AxisMessage inAxisMessage = operation.getMessage (WSDLConstants.MESSAGE_LABEL_IN_VALUE);
+                               if(inAxisMessage != null){
+                                       
+ XmlSchemaType schemaType = inAxisMessage.getSchemaElement ().getSchemaType();
+                                       
+                                       if(schemaType instanceof 
XmlSchemaComplexType){
+ XmlSchemaComplexType complexSchemaType = (XmlSchemaComplexType)schemaType;
+                                               
+ if(complexSchemaType.getParticle() instanceof XmlSchemaSequence){ + XmlSchemaSequence sequence = (XmlSchemaSequence) complexSchemaType.getParticle(); + for(Iterator iterator = sequence.getItems().getIterator(); iterator.hasNext();){ + XmlSchemaObject xmlObject = (XmlSchemaObject)iterator.next ();
+                                                               
+                                                               if(xmlObject 
instanceof XmlSchemaElement){
+                                                                       
XmlSchemaElement xmlElement = (XmlSchemaElement)xmlObject;
+                                                                       
+ ParameterDescriptionComposite pdc = new ParameterDescriptionComposite(); + WebParamAnnot webParamAnnot = WebParamAnnot.createWebParamAnnotImpl();
+                                               
+                                                                       
webParamAnnot.setName(xmlElement.getName());
+                                                                       
pdc.setWebParamAnnot(webParamAnnot);
+                                                                       
+                                                                       Class[] 
paramTypes = method.getParameterTypes();
+                                                                       
+                                                                       
for(Class paramType : paramTypes){
+                                                                               
String strParamType = paramType.toString();
+                                                                               
pdc.setParameterType(strParamType.split(" ")[1]);
+                                                                       }
+                                                                       
+                                                                       
mdc.addParameterDescriptionComposite(pdc);
+                                                               }
+                                                               
+                                                       }
+                                               }
+                                       }
+                               }
+                       }
+                       
+                       if (WSDLUtil.isOutputPresentForMEP(MEP)) {
+ AxisMessage outAxisMessage = operation.getMessage (WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
+                               
+                               if(outAxisMessage != null){
+
+ XmlSchemaType schemaType = outAxisMessage.getSchemaElement ().getSchemaType(); + mdc.setReturnType(method.getReturnType().toString().split(" ")[1]);
+                                       
+                                       if(schemaType instanceof 
XmlSchemaComplexType){
+ XmlSchemaComplexType complexSchemaType = (XmlSchemaComplexType)schemaType;
+                                                       
+ if(complexSchemaType.getParticle() instanceof XmlSchemaSequence){ + XmlSchemaSequence sequence = (XmlSchemaSequence) complexSchemaType.getParticle(); + for(Iterator iterator = sequence.getItems().getIterator (); iterator.hasNext();){ + XmlSchemaObject xmlObject = (XmlSchemaObject) iterator.next();
+                                                                       
+                                                                       
if(xmlObject instanceof XmlSchemaElement){
+                                                                               
XmlSchemaElement xmlElement = (XmlSchemaElement)xmlObject;
+ WebResultAnnot webResult = WebResultAnnot.createWebResultAnnotImpl();
+                                                                               
webResult.setName(xmlElement.getName());
+                                                                               
mdc.setWebResultAnnot(webResult);
+                                                                       }
+                                                               }
+                                                       }
+                                               }
+                                               
+ ResponseWrapperAnnot responseWrap = ResponseWrapperAnnot.createResponseWrapperAnnotImpl(); + responseWrap.setClassName(getWrapperClassName (outAxisMessage.getElementQName()));
+                                               
mdc.setResponseWrapperAnnot(responseWrap);
+                                       }
+                       }
+                       mdc.setWebMethodAnnot(webMethodAnnot);
+                       dbc.addMethodDescriptionComposite(mdc);
+       }
+       
+ //TODO: Has to verify how JAXB default class wrapper class generation logic
+       private String getWrapperClassName(QName element) throws Exception {
+               String localPart = element.getLocalPart();
+               String nameSpace = element.getNamespaceURI();
+               
+               URI nameSpaceURI = new URI(nameSpace);
+               
+               String host = nameSpaceURI.getHost();
+               String path = nameSpaceURI.getPath();
+               String[] pathParts = path.split("/");
+               int index = 0;
+               
+               while(index < host.length()){
+                       if(host.charAt(index) == '.'){
+                               break;
+                       }
+                       index ++;
+               }
+               
+ String packageName = host.substring(index+1, host.length()) +"."+host.substring(0, index);
+               
+               for(String pathPart : pathParts){
+                       if(!pathPart.equals("")){
+                               packageName += ("."+pathPart);
+                       }
+               }
+               
+               String className = localPart;
+               if(Character.isLowerCase(localPart.charAt(0))){
+ className = (char)Character.toUpperCase(localPart.charAt(0)) +className.substring(1, className.length());
+               }
+                               
+               return packageName + "." + className;
+       }
+       
+    private class WSDLGeneratorImpl implements WsdlGenerator {
+
+       private Definition def;
+       
+       public WSDLGeneratorImpl(Definition def) {
+               this.def = def;
+       }
+       
+ public WsdlComposite generateWsdl(String implClass, String bindingType) throws WebServiceException {
+               // Need WSDL generation code
+               WsdlComposite composite = new WsdlComposite();
+               composite.setWsdlFileName(implClass);
+ HashMap<String, Definition> testMap = new HashMap<String, Definition>();
+               testMap.put(composite.getWsdlFileName(), def);
+               composite.setWsdlDefinition(testMap);
+               return composite;
+       }
+    }
+}



Reply via email to