Author: nthaker
Date: Mon Jul 12 22:16:54 2010
New Revision: 963508

URL: http://svn.apache.org/viewvc?rev=963508&view=rev
Log:
AXIS2-4775
This change ensures that we will use Request and Response wrapper Bean packaged 
by customer or we will Generate Wrappers if they are not packaged.

Added:
    
axis/axis2/java/core/trunk/modules/jaxws/test/org/apache/axis2/jaxws/wrapper/
    
axis/axis2/java/core/trunk/modules/jaxws/test/org/apache/axis2/jaxws/wrapper/beans/
    
axis/axis2/java/core/trunk/modules/jaxws/test/org/apache/axis2/jaxws/wrapper/beans/AddNumbersException.java
    
axis/axis2/java/core/trunk/modules/jaxws/test/org/apache/axis2/jaxws/wrapper/beans/AddNumbersService.java
    
axis/axis2/java/core/trunk/modules/jaxws/test/org/apache/axis2/jaxws/wrapper/beans/WrapperBeanMarshallTests.java
    axis/axis2/java/core/trunk/modules/jaxws/wsgen-tests.xml
Modified:
    axis/axis2/java/core/trunk/modules/jaxws/pom.xml
    
axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/runtime/description/marshal/impl/ArtifactProcessor.java

Modified: axis/axis2/java/core/trunk/modules/jaxws/pom.xml
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/jaxws/pom.xml?rev=963508&r1=963507&r2=963508&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/jaxws/pom.xml (original)
+++ axis/axis2/java/core/trunk/modules/jaxws/pom.xml Mon Jul 12 22:16:54 2010
@@ -1,5 +1,4 @@
 <?xml version="1.0" encoding="UTF-8"?>
-
 <!--
   ~ Licensed to the Apache Software Foundation (ASF) under one
   ~ or more contributor license agreements. See the NOTICE file
@@ -20,7 +19,7 @@
   -->
 
 <project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>   
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.axis2</groupId>
@@ -98,7 +97,25 @@
             <version>${version}</version>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>wsdl4j</groupId>
+            <artifactId>wsdl4j</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.sun.xml.ws</groupId>
+            <artifactId>jaxws-tools</artifactId>
+            <version>2.1.3</version>
+        </dependency>
+        <!-- If we dont include tools.jar as dependency, maven throws 
NoClassDefFound on wsGen run -->
+        <dependency>
+            <groupId>java</groupId>
+            <artifactId>tools</artifactId>
+            <version>$version</version>
+            <scope>system</scope>
+            <systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
+        </dependency>        
     </dependencies>
+    
     <build>
         <sourceDirectory>src</sourceDirectory>
         <testSourceDirectory>test</testSourceDirectory>
@@ -203,34 +220,39 @@
                     <compilerVersion>1.5</compilerVersion>
                     <source>1.5</source>
                     <target>1.5</target>
+                    
                 </configuration>
             </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-antrun-plugin</artifactId>
+                
                 <executions>
                     <execution>
                         <id>gen-ts</id>
                         <phase>generate-test-sources</phase>
                         <configuration>
-                            <tasks unless="maven.test.skip">
+                            <tasks unless="maven.test.skip"> 
                                 <!-- Theres got to be a better way to do this 
-->
                                 <property name="schema.source.dir" 
value="test-resources/xsd"/>
                                 <property name="wsdl.source.dir" 
value="test-resources/wsdl"/>
-                                <property name="schema.output.base.dir" 
value="target/schema"/>
+                                <property name="schema.output.base.dir" 
value="target/schema"/>                             
                                 <property name="schema.generated.src.dir" 
value="${schema.output.base.dir}/src"/>
                                 <property name="schema.generated.classes.dir"
                                           
value="${schema.output.base.dir}/classes"/>
+                               
                                 <!-- make the dirs -->
                                 <mkdir dir="${schema.output.base.dir}"/>
                                 <mkdir dir="${schema.generated.src.dir}"/>
                                 <mkdir dir="${schema.generated.classes.dir}"/>
+
                                 <!-- Run JAXB schema compiler with designated 
schemas -->
                                 <echo>Generating JAX-B classes from XSDs</echo>
 
                                 <echo>Generating java from echo.xsd</echo>
                                 <java classname="com.sun.tools.xjc.Driver" 
fork="true">
                                     <classpath 
refid="maven.runtime.classpath"/>
+                                    
                                     <classpath 
location="${compiled.classes.dir}"/>
                                     <arg line="-d ${schema.generated.src.dir} 
-quiet  ${schema.source.dir}/echo.xsd"/>
                                 </java>
@@ -266,7 +288,7 @@
                                     <classpath 
refid="maven.runtime.classpath"/>
                                     <classpath 
location="${compiled.classes.dir}"/>
                                     <arg line="-d ${schema.generated.src.dir} 
-quiet -wsdl ${wsdl.source.dir}/AddNumbers.wsdl"/>
-                                </java>
+                                </java>                                
                             </tasks>
                         </configuration>
                         <goals>
@@ -287,6 +309,22 @@
                                 <property name="addressing_version" 
value="${version}"/>
                                 <ant antfile="build.xml" inheritall="true" 
inheritrefs="true"
                                      dir="." target="build-repo"/>
+
+                                                               <property 
name="compile_classpath" refid="maven.compile.classpath" />
+                                                               <property 
name="runtime_classpath" refid="maven.runtime.classpath" />
+                                                               <property 
name="test_classpath" refid="maven.test.classpath" />
+                                                               <property 
name="plugin_classpath" refid="maven.plugin.classpath" />
+                                
+                                <!-- Defining wsGen task -->
+                                                               <taskdef 
name="wsgen" loaderRef="refwsgen" classname="com.sun.tools.ws.ant.WsGen">
+                                                                       
<classpath>
+                                                                               
<path refid="maven.runtime.classpath" />
+                                                                               
<path refid="maven.compile.classpath" />
+                                                                       
</classpath>
+                                                               </taskdef> 
+                                                               <!-- Invoking 
test cases that need to generate artifacts using wsGen -->                      
         
+                                <ant antfile="wsgen-tests.xml" 
inheritall="true" inheritrefs="true"
+                                     dir="." target="run-wsgen-tests"/>
                             </tasks>
                         </configuration>
                         <goals>
@@ -374,6 +412,13 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-surefire-report-plugin</artifactId>
+                <reportSets>
+                    <reportSet>
+                        <reports>
+                            <report>report-only</report>
+                        </reports>
+                    </reportSet>
+                </reportSets>
             </plugin>
         </plugins>
     </reporting>

Modified: 
axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/runtime/description/marshal/impl/ArtifactProcessor.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/runtime/description/marshal/impl/ArtifactProcessor.java?rev=963508&r1=963507&r2=963508&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/runtime/description/marshal/impl/ArtifactProcessor.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/runtime/description/marshal/impl/ArtifactProcessor.java
 Mon Jul 12 22:16:54 2010
@@ -238,12 +238,27 @@ class ArtifactProcessor {
                                 wrapperClass = newValue;
                             }
                         }
-                        if(cls==null && (type.equals("@WebFault")|| 
type.equals("faultInfo"))){
+                        
+                        if(cls==null && 
+                            (type.equals("@RequestWrapper")|| 
type.equals("@ResponseWrapper")||type.equals("@WebFault")|| 
type.equals("faultInfo"))){
+                            
+                            //Support for Fault Bean Generation
                             //As per JAX-WS 2.2 Specification section 3.7 an 
application programmer can choose not to
                             //package the faultBeans, if we have reached this 
point in the code then user has choosen
                             //not to package the fault bean. If there is a 
cache of generated artifacts available then 
                             //lets look for the missing faultBean there.
-
+                            
+                            //Support for Wrapper Bean Generation
+                            //As per JAX-WS 2.2 Specificaiton section 3.6.2.1 
pg 41 an application programmer does not use
+                            //the wrapper bean classes, so the application 
need not package these classes. If we have reached
+                            //this point in the code then user has choosen not 
to package these beans.
+                            
+                            //NOTE:If we find Generated artifacts from cache 
this guarantees that we will not use
+                            //DocLitWrappedMinimum marshaller code. The 
advantage of normal DocLitWrappedMarshaller is
+                            //that it is very robust and has support of lot 
more datatypes than in DocLitWrappedMinimum.
+                            if(log.isDebugEnabled()){
+                                log.debug("Adding cache to classpath");
+                            }
                             ClassFinderFactory cff =
                                 
(ClassFinderFactory)FactoryRegistry.getFactory(ClassFinderFactory.class);
                             ClassFinder cf = cff.getClassFinder();
@@ -317,11 +332,26 @@ class ArtifactProcessor {
                         if (cls2 == null) {
                             cls2 = loadClassOrNull(defaultValue, 
altClassLoader);
                         }
-                        if(cls2==null && (type.equals("faultInfo")|| 
type.equals("@WebFault"))){
-                            //As per JAX-WS 2.2 Specification section 3.7 an 
application programmer can choose not to
-                            //package the faultBeans, if we have reached this 
point in the code then user has choosen
-                            //not to package the fault bean. If there is a 
cache of generated artifacts available then 
-                            //lets look for the missing faultBean there.
+                        if(cls2==null && 
+                                       (type.equals("@RequestWrapper")|| 
type.equals("@ResponseWrapper")||type.equals("@WebFault")|| 
type.equals("faultInfo"))){
+
+                               //Support for Fault Bean Generation
+                               //As per JAX-WS 2.2 Specification section 3.7 
an application programmer can choose not to
+                               //package the faultBeans, if we have reached 
this point in the code then user has choosen
+                               //not to package the fault bean. If there is a 
cache of generated artifacts available then 
+                               //lets look for the missing faultBean there.
+
+                               //Support for Wrapper Bean Generation
+                               //As per JAX-WS 2.2 Specificaiton section 
3.6.2.1 pg 41 an application programmer does not use
+                               //the wrapper bean classes, so the application 
need not package these classes. If we have reached
+                               //this point in the code then user has choosen 
not to package these beans.
+
+                               //NOTE:If we find Generated artifacts from 
cache this guarantees that we will not use
+                               //DocLitWrappedMinimum marshaller code. The 
advantage of normal DocLitWrappedMarshaller is
+                               //that it is very robust and has support of lot 
more datatypes than in DocLitWrappedMinimum.
+                               if(log.isDebugEnabled()){
+                                       log.debug("Adding cache to classpath");
+                               }
                             if(log.isDebugEnabled()){
                                 log.debug("Adding cache to classpath");
                             }

Added: 
axis/axis2/java/core/trunk/modules/jaxws/test/org/apache/axis2/jaxws/wrapper/beans/AddNumbersException.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/jaxws/test/org/apache/axis2/jaxws/wrapper/beans/AddNumbersException.java?rev=963508&view=auto
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/jaxws/test/org/apache/axis2/jaxws/wrapper/beans/AddNumbersException.java
 (added)
+++ 
axis/axis2/java/core/trunk/modules/jaxws/test/org/apache/axis2/jaxws/wrapper/beans/AddNumbersException.java
 Mon Jul 12 22:16:54 2010
@@ -0,0 +1,18 @@
+
+package org.apache.axis2.jaxws.wrapper.beans;
+
+import javax.xml.ws.WebFault;
+
+...@webfault(name = "AddNumbersFault", targetNamespace = 
"http://org/test/addnumbers";)
+public class AddNumbersException extends Exception
+{
+
+       private String message = null;
+       public AddNumbersException(){}
+       public AddNumbersException(String message){
+               this.message = message;
+       }
+       public String getInfo(){
+               return message;
+       }
+}

Added: 
axis/axis2/java/core/trunk/modules/jaxws/test/org/apache/axis2/jaxws/wrapper/beans/AddNumbersService.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/jaxws/test/org/apache/axis2/jaxws/wrapper/beans/AddNumbersService.java?rev=963508&view=auto
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/jaxws/test/org/apache/axis2/jaxws/wrapper/beans/AddNumbersService.java
 (added)
+++ 
axis/axis2/java/core/trunk/modules/jaxws/test/org/apache/axis2/jaxws/wrapper/beans/AddNumbersService.java
 Mon Jul 12 22:16:54 2010
@@ -0,0 +1,15 @@
+package org.apache.axis2.jaxws.wrapper.beans;
+
+
+
+...@javax.jws.webservice (targetNamespace="http://org/test/addnumbers";, 
serviceName="AddNumbersService", portName="AddNumbersPort")
+public class AddNumbersService{
+
+    public int addNumbers(int arg0, int arg1) throws AddNumbersException {
+       if(arg0+arg1<0){
+                       throw new AddNumbersException("sum is less than 0");
+               }
+        return arg0+arg1;
+    }
+
+}
\ No newline at end of file

Added: 
axis/axis2/java/core/trunk/modules/jaxws/test/org/apache/axis2/jaxws/wrapper/beans/WrapperBeanMarshallTests.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/jaxws/test/org/apache/axis2/jaxws/wrapper/beans/WrapperBeanMarshallTests.java?rev=963508&view=auto
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/jaxws/test/org/apache/axis2/jaxws/wrapper/beans/WrapperBeanMarshallTests.java
 (added)
+++ 
axis/axis2/java/core/trunk/modules/jaxws/test/org/apache/axis2/jaxws/wrapper/beans/WrapperBeanMarshallTests.java
 Mon Jul 12 22:16:54 2010
@@ -0,0 +1,114 @@
+/**
+ * 
+ */
+package org.apache.axis2.jaxws.wrapper.beans;
+
+
+import org.apache.axis2.jaxws.Constants;
+import org.apache.axis2.jaxws.description.DescriptionFactory;
+import org.apache.axis2.jaxws.description.EndpointDescription;
+import org.apache.axis2.jaxws.description.EndpointDescriptionJava;
+import org.apache.axis2.jaxws.description.OperationDescription;
+import org.apache.axis2.jaxws.description.ServiceDescription;
+import org.apache.axis2.jaxws.marshaller.MethodMarshaller;
+import org.apache.axis2.jaxws.marshaller.factory.MethodMarshallerFactory;
+import 
org.apache.axis2.jaxws.marshaller.impl.alt.DocLitWrappedMinimalMethodMarshaller;
+import org.apache.axis2.jaxws.unitTest.TestLogger;
+
+import java.io.File;
+
+import junit.framework.TestCase;
+
+public class WrapperBeanMarshallTests extends TestCase {
+    /**
+     * This is the negative test case, when we do not use generated artifacts 
from cache
+     * and user did not package wrapper beans, we should see use of 
DocLitWrappedMinumumMarshaller.
+     */
+    public void testGetMarshallerOperationDescriptionBooleanNegative() {
+        TestLogger.logger.debug("---------------------------------------");
+        TestLogger.logger.debug("test: " + getName());
+
+        String cache_location = "/target/wscache/classes";
+        try{
+            String baseDir = new 
File(System.getProperty("basedir",".")).getCanonicalPath();
+            cache_location = new 
File(baseDir+cache_location).getAbsolutePath();
+            TestLogger.logger.debug("cache location ="+cache_location);
+            
+            //Get EndpointDescription.
+            //Set location on AxisConfiguraiton.
+            Class sei = AddNumbersService.class;
+            EndpointDescription description = getEndpointDesc(sei);
+            TestLogger.logger.debug("description objects where created 
successfully");
+            OperationDescription[] ops 
=description.getEndpointInterfaceDescription().getOperations();
+            assertNotNull( "OperationDescriptions where null", ops);
+            assertTrue("No Operation Descriptions where found", ops.length>0);
+            OperationDescription op = ops[0];
+            TestLogger.logger.debug("operation found, java 
methodName="+op.getJavaMethodName());
+            //Don not Set cache on AxisConfiguration.
+            //get Marshaller, verify its not DoclitWrappedMinimum.
+            TestLogger.logger.debug("ws_cache location NOT set on 
AxisConfigContext, location="+cache_location);
+            MethodMarshaller mm = MethodMarshallerFactory.getMarshaller(op, 
false);
+            assertNotNull("getMarshaller returned null", mm );
+            TestLogger.logger.debug("MethodMarshaller was created, 
type="+mm.getClass().getName());
+            assertTrue("Generated artifacts not found, Method marshaller 
should be DocLitWrappedMinimumMarshaller", (mm instanceof 
DocLitWrappedMinimalMethodMarshaller));
+        }catch(Exception e){
+            TestLogger.logger.debug("Exception ="+e.getMessage());
+            fail(e.getMessage());
+        }
+        
+    }
+    /**
+     * In this test case user did not package wrapper beans but we add 
generated artifacts from cache, we should see use of
+     * DocLitWrappedMarshaller. 
+     * Test method for {...@link 
org.apache.axis2.jaxws.marshaller.factory.MethodMarshallerFactory#getMarshaller(org.apache.axis2.jaxws.description.OperationDescription,
 boolean)}.
+     */
+    public void testGetMarshallerOperationDescriptionBoolean() {
+        TestLogger.logger.debug("---------------------------------------");
+        TestLogger.logger.debug("test: " + getName());
+
+        String cache_location = "/target/wscache/classes";
+        try{
+            String baseDir = new 
File(System.getProperty("basedir",".")).getCanonicalPath();
+            cache_location = new 
File(baseDir+cache_location).getAbsolutePath();
+            TestLogger.logger.debug("cache location ="+cache_location);
+            
+            //Get EndpointDescription.
+            //Set location on AxisConfiguraiton.
+            Class sei = AddNumbersService.class;
+            EndpointDescription description = getEndpointDesc(sei);
+            TestLogger.logger.debug("description objects where created 
successfully");
+            OperationDescription[] ops 
=description.getEndpointInterfaceDescription().getOperations();
+            assertNotNull( "OperationDescriptions where null", ops);
+            assertTrue("No Operation Descriptions where found", ops.length>0);
+            OperationDescription op = ops[0];
+            TestLogger.logger.debug("operation found, java 
methodName="+op.getJavaMethodName());
+            //Set cache on AxisConfiguration.
+            //get Marshaller, verify its not DoclitWrappedMinimum.
+            
description.getServiceDescription().getAxisConfigContext().setProperty(Constants.WS_CACHE,
 cache_location);
+            TestLogger.logger.debug("ws_cache location set on 
AxisConfigContext, location="+cache_location);
+            MethodMarshaller mm = MethodMarshallerFactory.getMarshaller(op, 
false);
+            assertNotNull("getMarshaller returned null", mm );
+            TestLogger.logger.debug("MethodMarshaller was created, 
type="+mm.getClass().getName());
+            assertTrue("Generated artifacts are in cache, Method marshaller 
should not be DocLitWrappedMinimumMarshaller", !(mm instanceof 
DocLitWrappedMinimalMethodMarshaller));
+        }catch(Exception e){
+            TestLogger.logger.debug("Exception ="+e.getMessage());
+            fail(e.getMessage());
+        }
+        
+    }
+
+    private EndpointDescription getEndpointDesc(Class implementationClass) {
+        // Use the description factory directly; this will be done within the 
JAX-WS runtime
+        ServiceDescription serviceDesc =
+                
DescriptionFactory.createServiceDescription(implementationClass);
+        assertNotNull(serviceDesc);
+
+        EndpointDescription[] endpointDesc = 
serviceDesc.getEndpointDescriptions();
+        assertNotNull(endpointDesc);
+        assertEquals(1, endpointDesc.length);
+
+        // TODO: How will the JAX-WS dispatcher get the appropriate port (i.e. 
endpoint)?  Currently assumes [0]
+        EndpointDescription testEndpointDesc = endpointDesc[0];
+        return testEndpointDesc;
+    }
+}

Added: axis/axis2/java/core/trunk/modules/jaxws/wsgen-tests.xml
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/jaxws/wsgen-tests.xml?rev=963508&view=auto
==============================================================================
--- axis/axis2/java/core/trunk/modules/jaxws/wsgen-tests.xml (added)
+++ axis/axis2/java/core/trunk/modules/jaxws/wsgen-tests.xml Mon Jul 12 
22:16:54 2010
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project basedir="." default="run-wsgen-tests" name="wsgen-tests">
+               
+       <property name="wscache.output.base.dir" value="target/wscache" />
+       <property name="wscache.generated.src.dir" 
value="${wscache.output.base.dir}/src" />
+       <property name="wscache.generated.classes.dir" 
value="${wscache.output.base.dir}/classes" />
+       <property name="compile.test.classes" value="target/test-classes" />
+    
+       
+    <target name="run-wsgen-tests" depends="wrapper-beans"/>
+    
+    
+       <target name="create-cache">
+               <mkdir dir="${wscache.output.base.dir}" />
+               <mkdir dir="${wscache.generated.src.dir}" />
+               <mkdir dir="${wscache.generated.classes.dir}" />
+       </target>
+       
+       <target name="wrapper-beans" depends="create-cache">
+          <echo>Generating artifacts for 
org.apache.axis2.jaxws.wrapper.beans.AddNumbersService </echo>
+               <wsgen 
+                 sei="org.apache.axis2.jaxws.wrapper.beans.AddNumbersService" 
+                 destdir="${wscache.generated.classes.dir}" 
+                 resourcedestdir="${wscache.generated.src.dir}" 
+                 keep="false"
+                 verbose="false" 
+                 genwsdl="true">
+                 <classpath>
+                  <pathelement path="${compile.test.classes}" />
+                  </classpath>
+               </wsgen>
+       </target>
+</project>
\ No newline at end of file


Reply via email to