beehive-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Eddie O'Neil" <ekon...@bea.com>
Subject Re: svn commit: rev 43630 - in incubator/beehive/trunk/wsm: . lib src/runtime/org/apache/beehive/wsm/axis src/runtime/org/apache/beehive/wsm/util test test/webapps test/webapps/AnnotatedAxis test/webapps/AnnotatedAxis/WEB-INF test/webapps/AnnotatedAxis/WE
Date Thu, 09 Sep 2004 20:12:04 GMT
Jonathan--

  Very cool, thanks!  Certainly not a huge deal; just a consistency thing.

  :)

Eddie



Jonathan Colwell wrote:

>Hi Eddie,
>
>I'll ask Michael to rearrange the jars and switch over to the common
>log4j jar.
>
>When I tossed all these jars in there together I had just grabbed them
>from the AXIS build and it was just too easy to grab the big pile of
>libraries that I knew played well together.  
>
>thanks,
>
>Jonathan
>
>-----Original Message-----
>From: Eddie O'Neil 
>Sent: Thursday, September 09, 2004 12:54 PM
>To: Beehive Dev
>Subject: Re: svn commit: rev 43630 - in incubator/beehive/trunk/wsm: .
>lib src/runtime/org/apache/beehive/wsm/axis
>src/runtime/org/apache/beehive/wsm/util test test/webapps
>test/webapps/AnnotatedAxis test/webapps/AnnotatedAxis/WEB-INF
>test/webapps/AnnotatedAxis/WE
>
>Michael--
>
>  Hey, a couple of comments about this change:
>
>1) we're trying to use <subproject>/external as the location of 
>externally referenced JARs rather than <subproject>/lib.  So, at least 
>according to the project layout plan on the wiki, the Axis JARs would 
>live there.
>2) there's a copy of Log4J 1.2.8 available in $BEEHIVE_HOME/external, 
>and Beehive as a whole (at least as far as I know) is using this 
>version, so maybe WSM's Axis snapshot can also use the same version.
>
>  Anyway, my $0.02.
>
>Thanks!
>
>Eddie
>
>
>
>mmerz@apache.org wrote:
>
>  
>
>>Author: mmerz
>>Date: Thu Sep  9 12:43:48 2004
>>New Revision: 43630
>>
>>Added:
>>  incubator/beehive/trunk/wsm/lib/axis-ant.jar   (contents, props
>>    
>>
>changed)
>  
>
>>  incubator/beehive/trunk/wsm/lib/axis.jar   (contents, props changed)
>>  incubator/beehive/trunk/wsm/lib/commons-discovery.jar   (contents,
>>    
>>
>props changed)
>  
>
>>  incubator/beehive/trunk/wsm/lib/commons-logging.jar   (contents,
>>    
>>
>props changed)
>  
>
>>  incubator/beehive/trunk/wsm/lib/jaxrpc.jar   (contents, props
>>    
>>
>changed)
>  
>
>>  incubator/beehive/trunk/wsm/lib/log4j-1.2.8.jar   (contents, props
>>    
>>
>changed)
>  
>
>>  incubator/beehive/trunk/wsm/lib/log4j.properties
>>  incubator/beehive/trunk/wsm/lib/saaj.jar   (contents, props changed)
>>  incubator/beehive/trunk/wsm/lib/wsdl4j.jar   (contents, props
>>    
>>
>changed)
>  
>
>incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/Anno
>tatedJWSHandler.java
>  
>
>incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/Axis
>Hook.java
>  
>
>incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/Depl
>oymentDumper.java
>  
>
>>  incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/util/
>>
>>    
>>
>incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/util/Clas
>spathUtils.java
>  
>
>incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/util/Java
>ArchiveFilter.java
>  
>
>>  incubator/beehive/trunk/wsm/test/
>>  incubator/beehive/trunk/wsm/test/webapps/
>>  incubator/beehive/trunk/wsm/test/webapps/AnnotatedAxis/
>>  incubator/beehive/trunk/wsm/test/webapps/AnnotatedAxis/Foo.jws
>>  incubator/beehive/trunk/wsm/test/webapps/AnnotatedAxis/WEB-INF/
>>
>>    
>>
>incubator/beehive/trunk/wsm/test/webapps/AnnotatedAxis/WEB-INF/Annotatio
>nBasedDeployment/
>  
>
>incubator/beehive/trunk/wsm/test/webapps/AnnotatedAxis/WEB-INF/Annotatio
>nBasedDeployment/Bar.java
>  
>
>incubator/beehive/trunk/wsm/test/webapps/AnnotatedAxis/WEB-INF/Annotatio
>nBasedDeployment/Foo.java
>  
>
>incubator/beehive/trunk/wsm/test/webapps/AnnotatedAxis/WEB-INF/Annotatio
>nBasedDeployment/dump.bat
>  
>
>incubator/beehive/trunk/wsm/test/webapps/AnnotatedAxis/WEB-INF/Annotatio
>nBasedDeployment/setEnv.bat
>  
>
>incubator/beehive/trunk/wsm/test/webapps/AnnotatedAxis/WEB-INF/classes/
>  
>
>>  incubator/beehive/trunk/wsm/test/webapps/AnnotatedAxis/WEB-INF/lib/
>>
>>    
>>
>incubator/beehive/trunk/wsm/test/webapps/AnnotatedAxis/WEB-INF/lib/log4j
>.properties
>  
>
>incubator/beehive/trunk/wsm/test/webapps/AnnotatedAxis/WEB-INF/server-co
>nfig.wsdd
>  
>
>incubator/beehive/trunk/wsm/test/webapps/AnnotatedAxis/WEB-INF/web.xml
>  
>
>>  incubator/beehive/trunk/wsm/test/webapps/AnnotatedAxis/happyaxis.jsp
>>  incubator/beehive/trunk/wsm/test/webapps/AnnotatedAxis/index.html
>>Modified:
>>  incubator/beehive/trunk/wsm/build.xml
>>Log:
>>Initial checkin of code connecting the JSR-181 object model to AXIS.
>>    
>>
>More details about AXIS WSM can be found on the Beehive Wiki:
>http://wiki.apache.org/beehive/axis_2dspecific_20implementation
>  
>
>>Contributor: Jonathan Colwell
>>
>>
>>
>>Modified: incubator/beehive/trunk/wsm/build.xml
>>=======================================================================
>>    
>>
>=======
>  
>
>>--- incubator/beehive/trunk/wsm/build.xml	(original)
>>+++ incubator/beehive/trunk/wsm/build.xml	Thu Sep  9 12:43:48 2004
>>@@ -31,6 +31,11 @@
>>  <property name="classes.dir" value="${build.dir}/classes" />
>>  <property name="jars.dir" value="${build.dir}/jars"/>
>>  <property name="docs.dir" value="${build.dir}/docs"/>
>>+  <property name="test.dir" value="test"/>
>>+  <property name="webapps.dir" value="${test.dir}/webapps"/>
>>+  <property name="dist.dir" value="${build.dir}/dist"/>
>>+  <property name="webapps.dist.dir" value="${dist.dir}/webapps"/>
>>+  <property name="axis.dir" value="AnnotatedAxis"/>
>>
>>  <property name="api.dir" value="src/api"/>
>>  <property name="api.classes" value="${classes.dir}/api"/>
>>@@ -38,7 +43,11 @@
>>  <property name="runtime.dir" value="src/runtime"/>
>>  <property name="runtime.classes" value="${classes.dir}/runtime"/>
>>
>>+  <property name="lib.dir" value="lib"/>
>>+
>>  <property name="wsm.jar" value="${jars.dir}/wsm.jar"/>
>>+  <property name="wsm-axis.jar" value="${jars.dir}/wsm-axis.jar"/>
>>+
>>
>>  <path id="api.classpath">
>>  </path>
>>@@ -51,10 +60,28 @@
>>    <pathelement location="${jsr173.jar}"/>
>>    <pathelement location="${junit.jar}"/>
>>    <pathelement location="${log4j.jar}"/>
>>-    <pathelement location="lib/xmltypes.jar"/>
>>-    <path id="${api.classpath}"/>
>>+    <pathelement location="${lib.dir}/xmltypes.jar"/>
>>+    <path refid="api.classpath"/>
>>+    <pathelement location="${api.classes}"/>
>>  </path>
>>
>>+<fileset id="axis.jars" dir="${lib.dir}">
>>+    <include name="wsdl4j.jar"/>
>>+    <include name="saaj.jar"/>
>>+    <include name="jaxrpc.jar"/>
>>+    <include name="commons-logging.jar"/>
>>+    <include name="commons-discovery.jar"/>
>>+    <include name="axis-ant.jar"/>
>>+    <include name="axis.jar"/>
>>+</fileset>
>>+
>>+<path id="axis.classpath">
>>+    <fileset refid="axis.jars"/>
>>+    <pathelement location="${os.JAVA_HOME}/lib/tools.jar"/>
>>+    <path refid="runtime.classpath"/>
>>+    <pathelement location="${runtime.classes}"/>
>>+</path>
>>+
>>  <!--
>>    
>>
>==================================================================== -->
>  
>
>>  <!-- usage - output usage   -->
>>  <!--
>>    
>>
>==================================================================== -->
>  
>
>>@@ -69,18 +96,26 @@
>>    <echo
>>    
>>
>message="---------------------------------------------------------------
>-" />
>  
>
>>    <echo message="|                      Standard Targets
>>    
>>
>|" />
>  
>
>>    <echo
>>    
>>
>message="---------------------------------------------------------------
>-" />
>  
>
>>-    <echo message="build       - build java classes and jar files" />
>>+    <echo message="build       - build core WSM classes and jar files"
>>    
>>
>/>
>  
>
>>+    <echo message="build_axis  - build AXIS dependent classes and jar
>>    
>>
>files" />
>  
>
>>+    <echo message="build_all   - build all classes and jar files" />
>>    <echo message="clean       - remove build files" />
>>-    <echo message="deploy      - does nothing for this project" />
>>+    <echo message="deploy      - prepares an axis webapp suitable for
>>    
>>
>deployment"/>
>  
>
>>+    <echo message="              to a servlet container" />
>>    <echo message="redeploy    - do an &quot;clean&quot;, &quot;,
>>    
>>
>&quot;build&quot; and &quot;deploy&quot;." />
>  
>
>>    <echo message="docs        - build the java docs" />
>>-    <echo message="drt         - runs the DRT (developer regression
>>    
>>
>test)" />
>  
>
>>+    <echo message="drt         - runs the DRT (developer regression
>>    
>>
>test) on the"/>
>  
>
>>+    <echo message="              core WSM components" />
>>    <echo message="" />
>>    <echo
>>    
>>
>message="---------------------------------------------------------------
>-" />
>  
>
>>    <echo message="|                  Project-Specific Targets
>>    
>>
>|" />
>  
>
>>    <echo
>>    
>>
>message="---------------------------------------------------------------
>-" />
>  
>
>>    <echo message="dirs        - Creates the output directories of the
>>    
>>
>build."/>
>  
>
>>-    <echo message="classes     - Compiles the source code of the
>>    
>>
>project."/>
>  
>
>>+    <echo message="classes     - Compiles the core source code of the
>>    
>>
>project and"/>
>  
>
>>+    <echo message="              copies properties and templates into
>>    
>>
>the build."/>
>  
>
>>+    <echo message="api         - Compiles the api source code of the
>>    
>>
>project."/>
>  
>
>>+    <echo message="runtime     - Compiles the runtime source code of
>>    
>>
>the project."/>
>  
>
>>+    <echo message="axis        - Compiles the axis dependent source
>>    
>>
>code of the project."/>
>  
>
>>    <echo
>>    
>>
>message="===============================================================
>=" />
>  
>
>>    <echo message="|      NOTE: THE WSM PROJECT ONLY BUILDS ON JDK1.5
>>    
>>
>|" />
>  
>
>>    <echo
>>    
>>
>message="===============================================================
>=" />
>  
>
>>@@ -101,30 +136,43 @@
>>  <!--
>>    
>>
>==================================================================== -->
>  
>
>>  <!-- Compiles the source code of the project. -->
>>  <!--
>>    
>>
>==================================================================== -->
>  
>
>>-  <target name="classes" depends="dirs" if="isJDK15">
>>-   
>>+  <target name="classes" depends="api, runtime" if="isJDK15">
>>+    <!-- Copy template files into the build -->
>>+    <copy todir="${runtime.classes}" overwrite="true" >
>>+      <fileset dir="${runtime.dir}"
>>    
>>
>includes="**/*.template,**/*.vm,META-INF/**" />
>  
>
>>+    </copy>
>>+
>>+    <!-- Copy property files into the build -->
>>+    <copy todir="${runtime.classes}" overwrite="true" >
>>+      <fileset dir="${runtime.dir}" includes="**/*.properties" />
>>+    </copy>
>>+  </target>
>>+
>>+  <target name="api" depends="dirs" if="isJDK15">
>>   <!-- Build the API classes -->
>>    <javac destdir="${api.classes}" classpathref="api.classpath"
>>    
>>
>source="1.5" debug="on" >
>  
>
>>      <src path="${api.dir}"/>
>>    </javac>
>>+  </target>
>>
>>+  <target name="runtime" depends="api" if="isJDK15">
>>    <!-- Build the runtime classes -->
>>    <javac destdir="${runtime.classes}"
>>    
>>
>classpathref="runtime.classpath" source="1.5" debug="on">
>  
>
>>      <src path="${runtime.dir}"/>
>>+      <exclude name="**/axis/**"/>
>>    </javac>
>>+  </target>
>>
>>-    <!-- Copy template files into the build -->
>>-    <copy todir="${runtime.classes}" overwrite="true" >
>>-      <fileset dir="${runtime.dir}"
>>    
>>
>includes="**/*.template,**/*.vm,META-INF/**" />
>  
>
>>-    </copy>
>>+  <target name="axis" depends="runtime" if="isJDK15">
>>+    <!-- Build the axis classes -->
>>+    <javac destdir="${runtime.classes}" classpathref="axis.classpath"
>>    
>>
>source="1.5" debug="on">
>  
>
>>+      <src path="${runtime.dir}"/>
>>+      <include name="**/axis/**"/>
>>+    </javac>
>>+  </target>
>>
>>-    <!-- Copy property files into the build -->
>>-    <copy todir="${runtime.classes}" overwrite="true" >
>>-      <fileset dir="${runtime.dir}" includes="**/*.properties" />
>>-    </copy>
>>
>>
>>-  </target>
>>
>>  <!--
>>    
>>
>==================================================================== -->
>  
>
>>  <!-- Jars up the classes, libraries, and resources. -->
>>@@ -136,7 +184,9 @@
>>
>>    <jar jarfile="${wsm.jar}" >
>>        <fileset dir="${api.classes}" />
>>-        <fileset dir="${runtime.classes}" />
>>+        <fileset dir="${runtime.classes}">
>>+            <exclude name="**/axis/**"/>
>>+        </fileset>
>>    </jar>
>>
>>    <echo message="--------------------------------------------------"
>>    
>>
>/>
>  
>
>>@@ -145,12 +195,28 @@
>>  </target>
>>
>>
>>+  <target name="build_axis" depends="axis" if="isJDK15">
>>+    <echo message="--------------------------------------------------"
>>    
>>
>/>
>  
>
>>+    <echo message="|      WSM-AXIS build starting
>>    
>>
>|" />
>  
>
>>+    <echo message="--------------------------------------------------"
>>    
>>
>/>
>  
>
>>+
>>+    <jar jarfile="${wsm-axis.jar}" >
>>+        <fileset dir="${runtime.classes}">
>>+            <include name="**/axis/**"/>
>>+        </fileset>
>>+    </jar>
>>+
>>+    <echo message="--------------------------------------------------"
>>    
>>
>/>
>  
>
>>+    <echo message="|      WSM-AXIS build ending
>>    
>>
>|" />
>  
>
>>+    <echo message="--------------------------------------------------"
>>    
>>
>/>
>  
>
>>+  </target>
>>+
>>+
>>  <!--
>>    
>>
>==================================================================== -->
>  
>
>>  <!-- build_all.  build this project and all inter-project
>>    
>>
>dependencies    -->
>  
>
>>  <!--
>>    
>>
>==================================================================== -->
>  
>
>>-  <target name="build_all">
>>-    <antcall target="build"/>
>>-  </target>
>>+  <target name="build_all" depends="build, build_axis"/>
>>+
>>
>>  <!--
>>    
>>
>==================================================================== -->
>  
>
>>  <!-- clean  -->
>>@@ -188,13 +254,23 @@
>>  <!--
>>    
>>
>==================================================================== -->
>  
>
>>  <!-- deploy -->
>>  <!--
>>    
>>
>==================================================================== -->
>  
>
>>-  <target name="deploy" depends="build"  if="isJDK15">
>>+  <target name="deploy" depends="build_all"  if="isJDK15">
>>    <echo message="--------------------------------------------------"
>>    
>>
>/>
>  
>
>>    <echo message="|      WSM deploy starting                 |" />
>>    <echo message="--------------------------------------------------"
>>    
>>
>/>
>  
>
>>-    <!-- Copy build output to client locations (lib dir of servers
>>    
>>
>etc) -->
>  
>
>>-
>>+    <mkdir dir="${webapps.dist.dir}"/>
>>+    <copy todir="${webapps.dist.dir}/${axis.dir}">
>>+      <fileset dir="${webapps.dir}/${axis.dir}"/>
>>+    </copy>
>>+    <copy todir="${webapps.dist.dir}/${axis.dir}/WEB-INF/lib">
>>+      <fileset refid="axis.jars"/>
>>+    </copy>
>>+    <copy todir="${webapps.dist.dir}/${axis.dir}/WEB-INF/lib">
>>+      <fileset dir="${jars.dir}" includes="**/*.jar"/>
>>+    </copy>
>>+    <copy file="${log4j.jar}"
>>+          todir="${webapps.dist.dir}/${axis.dir}/WEB-INF/lib"/>
>>    <echo message="--------------------------------------------------"
>>    
>>
>/>
>  
>
>>    <echo message="|       WSM deploy ending                   |" />
>>    <echo message="--------------------------------------------------"
>>    
>>
>/>
>  
>
>>@@ -248,8 +324,8 @@
>>  <!--
>>    
>>
>==================================================================== -->
>  
>
>>  <!-- drt -->
>>  <!--
>>    
>>
>==================================================================== -->
>  
>
>>-  <target name="drt" depends="deploy">
>>-    <ant dir="./drt" target="drt" inheritAll="false"/>
>>+  <target name="drt" depends="build">
>>+    <ant dir="drt" target="drt" inheritAll="false"/>
>>  </target>
>>
>></project>
>>
>>Added: incubator/beehive/trunk/wsm/lib/axis-ant.jar
>>=======================================================================
>>    
>>
>=======
>  
>
>>Binary file. No diff available.
>>
>>Added: incubator/beehive/trunk/wsm/lib/axis.jar
>>=======================================================================
>>    
>>
>=======
>  
>
>>Binary file. No diff available.
>>
>>Added: incubator/beehive/trunk/wsm/lib/commons-discovery.jar
>>=======================================================================
>>    
>>
>=======
>  
>
>>Binary file. No diff available.
>>
>>Added: incubator/beehive/trunk/wsm/lib/commons-logging.jar
>>=======================================================================
>>    
>>
>=======
>  
>
>>Binary file. No diff available.
>>
>>Added: incubator/beehive/trunk/wsm/lib/jaxrpc.jar
>>=======================================================================
>>    
>>
>=======
>  
>
>>Binary file. No diff available.
>>
>>Added: incubator/beehive/trunk/wsm/lib/log4j-1.2.8.jar
>>=======================================================================
>>    
>>
>=======
>  
>
>>Binary file. No diff available.
>>
>>Added: incubator/beehive/trunk/wsm/lib/log4j.properties
>>=======================================================================
>>    
>>
>=======
>  
>
>>--- (empty file)
>>+++ incubator/beehive/trunk/wsm/lib/log4j.properties	Thu Sep  9
>>    
>>
>12:43:48 2004
>  
>
>>@@ -0,0 +1,20 @@
>>+# Set root category priority to INFO and its only appender to CONSOLE.
>>
>>+log4j.rootCategory=INFO, CONSOLE
>>
>>+#log4j.rootCategory=INFO, CONSOLE, LOGFILE
>>
>>+
>>
>>+# Set the enterprise logger category to FATAL and its only appender to
>>    
>>
>CONSOLE.
>  
>
>>+log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE
>>
>>+
>>
>>+# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
>>
>>+log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
>>
>>+log4j.appender.CONSOLE.Threshold=INFO
>>
>>+log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
>>
>>+log4j.appender.CONSOLE.layout.ConversionPattern=- %m%n
>>
>>+
>>
>>+# LOGFILE is set to be a File appender using a PatternLayout.
>>
>>+log4j.appender.LOGFILE=org.apache.log4j.FileAppender
>>
>>+log4j.appender.LOGFILE.File=axis.log
>>
>>+log4j.appender.LOGFILE.Append=true
>>
>>+log4j.appender.LOGFILE.Threshold=INFO
>>
>>+log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
>>
>>+log4j.appender.LOGFILE.layout.ConversionPattern=%-4r [%t] %-5p %c %x -
>>    
>>
>%m%n
>  
>
>>Added: incubator/beehive/trunk/wsm/lib/saaj.jar
>>=======================================================================
>>    
>>
>=======
>  
>
>>Binary file. No diff available.
>>
>>Added: incubator/beehive/trunk/wsm/lib/wsdl4j.jar
>>=======================================================================
>>    
>>
>=======
>  
>
>>Binary file. No diff available.
>>
>>Added:
>>    
>>
>incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/Anno
>tatedJWSHandler.java
>  
>
>>=======================================================================
>>    
>>
>=======
>  
>
>>--- (empty file)
>>+++
>>    
>>
>incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/Anno
>tatedJWSHandler.java	Thu Sep  9 12:43:48 2004
>  
>
>>@@ -0,0 +1,459 @@
>>+/*
>>
>>+ * Copyright 2001-2004 The Apache Software Foundation.
>>
>>+ * 
>>
>>+ * Licensed 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.beehive.wsm.axis;
>>
>>+
>>
>>+import org.apache.beehive.wsm.jsr181.model.WebServiceTYPEMetadata;
>>
>>+import org.apache.beehive.wsm.jsr181.model.WebServiceMETHODMetadata;
>>
>>+import
>>    
>>
>org.apache.beehive.wsm.jsr181.model.WebServicePARAMETERMetadata;
>  
>
>>+import
>>    
>>
>org.apache.beehive.wsm.jsr181.processor.reflection.WsmReflectionAnnotati
>onProcessor;
>  
>
>>+
>>
>>+import java.io.File;
>>
>>+import java.io.FileFilter;
>>
>>+import java.io.FileInputStream;
>>
>>+import java.io.FileReader;
>>
>>+import java.io.FileWriter;
>>
>>+import java.io.IOException;
>>
>>+import java.io.InputStream;
>>
>>+import java.io.FileNotFoundException;
>>
>>+import java.net.URL;
>>
>>+import java.net.URLClassLoader;
>>
>>+import java.net.URLDecoder;
>>
>>+import java.util.HashMap;
>>
>>+import java.util.Iterator;
>>
>>+import java.util.List;
>>
>>+import java.util.StringTokenizer;
>>
>>+import java.util.jar.Attributes;
>>
>>+import java.util.jar.JarFile;
>>
>>+import java.util.jar.JarInputStream;
>>
>>+import java.util.jar.Manifest;
>>
>>+
>>
>>+import org.apache.axis.AxisFault;
>>
>>+import org.apache.axis.AxisProperties;
>>
>>+import org.apache.axis.Constants;
>>
>>+import org.apache.axis.MessageContext;
>>
>>+import org.apache.axis.components.compiler.Compiler;
>>
>>+import org.apache.axis.components.compiler.CompilerError;
>>
>>+import org.apache.axis.components.compiler.CompilerFactory;
>>
>>+import org.apache.axis.components.logger.LogFactory;
>>
>>+import org.apache.axis.description.ServiceDesc;
>>
>>+import org.apache.axis.handlers.JWSHandler;
>>
>>+import org.apache.axis.handlers.soap.SOAPService;
>>
>>+import org.apache.axis.providers.java.RPCProvider;
>>
>>+import org.apache.axis.transport.http.HTTPConstants;
>>
>>+import org.apache.axis.utils.ClassUtils;
>>
>>+import org.apache.axis.utils.JWSClassLoader;
>>
>>+import org.apache.axis.utils.Messages;
>>
>>+import org.apache.axis.utils.XMLUtils;
>>
>>+import org.apache.beehive.wsm.util.ClasspathUtils;
>>
>>+import org.apache.commons.logging.Log;
>>
>>+import org.w3c.dom.Document;
>>
>>+import org.w3c.dom.Element;
>>
>>+
>>
>>+/*********************************************************************
>>    
>>
>**********
>  
>
>>+ * A few annotation specific things added and lots of code copied 
>>
>>+ * from the JWSHandler base class by
>>
>>+ *
>>
>>+ * @author Jonathan Colwell (jcolwell@bea.com)
>>
>>+ * 
>>
>>+ * but most of the code was written by:
>>
>>+ * @author Glen Daniels (gdaniels@allaire.com)
>>
>>+ * @author Doug Davis (dug@us.ibm.com)
>>
>>+ * @author Sam Ruby (rubys@us.ibm.com)
>>
>>+ *
>>
>>+ */
>>
>>+public class AnnotatedJWSHandler extends JWSHandler {
>>
>>+
>>
>>+
>>
>>+  /**
>>
>>+   * If our path ends in the right file extension (*.jws), handle all
>>    
>>
>the
>  
>
>>+   * work necessary to compile the source file if it needs it, and set
>>
>>+   * up the "proxy" RPC service surrounding it as the MessageContext's
>>
>>+   * active service.
>>
>>+   *
>>
>>+   */ 
>>
>>+  protected void setupService(MessageContext msgContext) throws
>>    
>>
>Exception {
>  
>
>>+    // FORCE the targetService to be JWS if the URL is right.
>>
>>+    String realpath = msgContext.getStrProp(Constants.MC_REALPATH);
>>
>>+    String extension = (String)getOption(OPTION_JWS_FILE_EXTENSION);
>>
>>+    if (extension == null) extension = DEFAULT_JWS_FILE_EXTENSION;
>>
>>+        
>>
>>+    if ((realpath!=null) && (realpath.endsWith(extension))) {
>>
>>+      /* Grab the *.jws filename from the context - should have been
>>    
>>
>*/
>  
>
>>+      /* placed there by another handler (ie. HTTPActionHandler)
>>    
>>
>*/
>  
>
>>+
>>    
>>
>/***************************************************************/
>  
>
>>+      String   jwsFile = realpath;
>>
>>+      String rel = msgContext.getStrProp(Constants.MC_RELATIVE_PATH);
>>
>>+
>>
>>+      // Check for file existance, report error with
>>
>>+      // relative path to avoid giving out directory info.
>>
>>+      File  f2 = new File( jwsFile );
>>
>>+      if (!f2.exists()) {
>>
>>+        throw new FileNotFoundException(rel);
>>
>>+      }
>>
>>+
>>
>>+      if (rel.charAt(0) == '/') {
>>
>>+        rel = rel.substring(1);
>>
>>+      }
>>
>>+
>>
>>+      int lastSlash = rel.lastIndexOf('/');
>>
>>+      String dir = null;
>>
>>+            
>>
>>+      if (lastSlash > 0) {
>>
>>+        dir = rel.substring(0, lastSlash);
>>
>>+      }
>>
>>+            
>>
>>+      String file = rel.substring(lastSlash + 1);
>>
>>+            
>>
>>+      String outdir = msgContext.getStrProp( Constants.MC_JWS_CLASSDIR
>>    
>>
>);
>  
>
>>+      if ( outdir == null ) outdir = "." ;
>>
>>+            
>>
>>+      // Build matching directory structure under the output
>>
>>+      // directory.  In other words, if we have:
>>
>>+      //    /webroot/jws1/Foo.jws
>>
>>+      //
>>
>>+      // That will be compiled to:
>>
>>+      //    .../jwsOutputDirectory/jws1/Foo.class
>>
>>+      if (dir != null) {
>>
>>+        outdir = outdir + File.separator + dir;
>>
>>+      }
>>
>>+            
>>
>>+      // Confirm output directory exists.  If not, create it IF we're
>>
>>+      // allowed to.
>>
>>+      // !!! TODO: add a switch to control this.
>>
>>+      File outDirectory = new File(outdir);
>>
>>+      if (!outDirectory.exists()) {
>>
>>+        outDirectory.mkdirs();
>>
>>+      }
>>
>>+            
>>
>>+      if (log.isDebugEnabled())
>>
>>+        log.debug("jwsFile: " + jwsFile );
>>
>>+            
>>
>>+      String   jFile   = outdir + File.separator + file.substring(0,
>>    
>>
>file.length()-3) +
>  
>
>>+        "java" ;
>>
>>+      String   cFile   = outdir + File.separator + file.substring(0,
>>    
>>
>file.length()-3) +
>  
>
>>+        "class" ;
>>
>>+            
>>
>>+      if (log.isDebugEnabled()) {
>>
>>+        log.debug("jFile: " + jFile );
>>
>>+        log.debug("cFile: " + cFile );
>>
>>+        log.debug("outdir: " + outdir);
>>
>>+      }
>>
>>+            
>>
>>+      File  f1 = new File( cFile );
>>
>>+
>>
>>+      /* Get the class */
>>
>>+      /*****************/
>>
>>+      String clsName = null ;
>>
>>+      //clsName = msgContext.getStrProp(Constants.MC_RELATIVE_PATH);
>>
>>+      if ( clsName == null ) clsName = f2.getName();
>>
>>+      if ( clsName != null && clsName.charAt(0) == '/' )
>>
>>+        clsName = clsName.substring(1);
>>
>>+            
>>
>>+      clsName = clsName.substring( 0, clsName.length()-4 );
>>
>>+      clsName = clsName.replace('/', '.');
>>
>>+            
>>
>>+      if (log.isDebugEnabled())
>>
>>+        log.debug("ClsName: " + clsName );
>>
>>+            
>>
>>+      /* Check to see if we need to recompile */
>>
>>+      /****************************************/
>>
>>+      if ( !f1.exists() || f2.lastModified() > f1.lastModified() ) {
>>
>>+        /* If the class file doesn't exist, or it's older than the */
>>
>>+        /* java file then recompile the java file.                 */
>>
>>+        /* Start by copying the *.jws file to *.java               */
>>
>>+        /***********************************************************/
>>
>>+        log.debug(Messages.getMessage("compiling00", jwsFile) );
>>
>>+        log.debug(Messages.getMessage("copy00", jwsFile, jFile) );
>>
>>+        FileReader fr = new FileReader( jwsFile );
>>
>>+        FileWriter fw = new FileWriter( jFile );
>>
>>+        char[] buf = new char[4096];
>>
>>+        int    rc ;
>>
>>+        while ( (rc = fr.read( buf, 0, 4095)) >= 0 )
>>
>>+          fw.write( buf, 0, rc );
>>
>>+        fw.close();
>>
>>+        fr.close();
>>
>>+                
>>
>>+        /* Now run javac on the *.java file */
>>
>>+        /************************************/
>>
>>+        log.debug("javac " + jFile );
>>
>>+        // Process proc = rt.exec( "javac " + jFile );
>>
>>+        // proc.waitFor();
>>
>>+        Compiler          compiler = CompilerFactory.getCompiler();
>>
>>+                
>>
>>+        compiler.setClasspath(getDefaultClasspath(msgContext));
>>
>>+        compiler.setDestination(outdir);
>>
>>+        compiler.addFile(jFile);
>>
>>+                
>>
>>+        boolean result   = compiler.compile();
>>
>>+                
>>
>>+        /* Delete the temporary *.java file and check return code */
>>
>>+        /**********************************************************/
>>
>>+        (new File(jFile)).delete();
>>
>>+                
>>
>>+        if ( !result ) {
>>
>>+          /* Delete the *class file - sometimes it gets created even
>>    
>>
>*/
>  
>
>>+          /* when there are errors - so erase it so it doesn't
>>    
>>
>*/
>  
>
>>+          /* confuse us.
>>    
>>
>*/
>  
>
>>+
>>    
>>
>/***********************************************************/
>  
>
>>+          (new File(cFile)).delete();
>>
>>+                    
>>
>>+          Document doc = XMLUtils.newDocument();
>>
>>+                    
>>
>>+          Element         root = doc.createElementNS("", "Errors");
>>
>>+          StringBuffer message = new StringBuffer("Error compiling ");
>>
>>+          message.append(jFile);
>>
>>+          message.append(":\n");
>>
>>+                    
>>
>>+          List errors = compiler.getErrors();
>>
>>+          int count = errors.size();
>>
>>+          for (int i = 0; i < count; i++) {
>>
>>+            CompilerError error = (CompilerError) errors.get(i);
>>
>>+            if (i > 0) message.append("\n");
>>
>>+            message.append("Line ");
>>
>>+            message.append(error.getStartLine());
>>
>>+            message.append(", column ");
>>
>>+            message.append(error.getStartColumn());
>>
>>+            message.append(": ");
>>
>>+            message.append(error.getMessage());
>>
>>+          }
>>
>>+          root.appendChild( doc.createTextNode( message.toString() )
>>    
>>
>);
>  
>
>>+          throw new AxisFault( "Server.compileError",
>>
>>+                               Messages.getMessage("badCompile00",
>>    
>>
>jFile),
>  
>
>>+                               null, new Element[] { root } );
>>
>>+        }
>>
>>+        ClassUtils.removeClassLoader( clsName );
>>
>>+        // And clean out the cached service.
>>
>>+        soapServices.remove(clsName);
>>
>>+      }
>>
>>+            
>>
>>+      ClassLoader cl = ClassUtils.getClassLoader(clsName);
>>
>>+      if (cl == null) {
>>
>>+        cl = new JWSClassLoader(clsName,
>>
>>+                                msgContext.getClassLoader(),
>>
>>+                                cFile);
>>
>>+      }
>>
>>+            
>>
>>+      msgContext.setClassLoader(cl);
>>
>>+
>>
>>+      WebServiceTYPEMetadata wsm = WsmReflectionAnnotationProcessor
>>
>>+          .getObjectModel(cl.loadClass(clsName));
>>
>>+              
>>
>>+      /* Create a new RPCProvider - this will be the "service"   */
>>
>>+      /* that we invoke.
>>    
>>
>*/
>  
>
>>+
>>    
>>
>/******************************************************************/
>  
>
>>+      // Cache the rpc service created to handle the class.  The cache
>>
>>+      // is based on class name, so only one .jws/.jwr class can be
>>    
>>
>active
>  
>
>>+      // in the system at a time.
>>
>>+      SOAPService rpc = (SOAPService)soapServices.get(clsName);
>>
>>+      if (rpc == null) {
>>
>>+        rpc = new SOAPService(new RPCProvider());
>>
>>+        rpc.setName(wsm.getWsName());
>>
>>+        rpc.setOption(RPCProvider.OPTION_CLASSNAME, clsName );
>>
>>+        rpc.setEngine(msgContext.getAxisEngine());
>>
>>+
>>
>>+        /* Support specification of "allowedMethods" as a parameter.
>>
>>+           String allowed =
>>    
>>
>(String)getOption(RPCProvider.OPTION_ALLOWEDMETHODS);
>  
>
>>+           if (allowed == null) allowed = "*";
>>
>>+        */
>>
>>+     
>>
>>+        
>>
>>+        // Take the setting for the scope option from the handler
>>
>>+        // parameter named "scope"
>>
>>+        String scope = (String)getOption(RPCProvider.OPTION_SCOPE);
>>
>>+                if (scope == null) scope = "Request";
>>
>>+        rpc.setOption(RPCProvider.OPTION_SCOPE, scope);
>>
>>+                
>>
>>+        ServiceDesc sd = AxisHook.createServiceDesc(wsm, cl);
>>
>>+        rpc.setServiceDescription(sd);
>>
>>+     
>>
>>+        List allowedMethodNames = sd.getAllowedMethods();
>>
>>+        Iterator allowIt = allowedMethodNames.iterator();
>>
>>+        StringBuffer sb = new StringBuffer();
>>
>>+        boolean firstPass = true;
>>
>>+        while (allowIt.hasNext()) {
>>
>>+          if (firstPass) {
>>
>>+            sb.append(' ');
>>
>>+            firstPass = false;
>>
>>+          }
>>
>>+          sb.append(((String)allowIt.next()));
>>
>>+        }
>>
>>+        rpc.setOption(RPCProvider.OPTION_ALLOWEDMETHODS,
>>    
>>
>sb.toString());   
>  
>
>>+        rpc.setOption(RPCProvider.OPTION_WSDL_PORTTYPE,
>>    
>>
>wsm.getWsName());
>  
>
>>+        rpc.setOption(RPCProvider.OPTION_WSDL_SERVICEELEMENT,
>>
>>+                      wsm.getWsServiceName());
>>
>>+        rpc.setOption(RPCProvider.OPTION_WSDL_TARGETNAMESPACE, 
>>
>>+                      wsm.getWsTargetNamespace());
>>
>>+
>>
>>+        rpc.setStyle(sd.getStyle());
>>
>>+        rpc.setUse(sd.getUse());
>>
>>+
>>
>>+        // NOTE jcolwell@bea.com 2004-Aug-16 -- not needed anymore I
>>    
>>
>think
>  
>
>>+        //rpc.getInitializedServiceDesc(msgContext);
>>
>>+                
>>
>>+        soapServices.put(clsName, rpc);                
>>
>>+      }
>>
>>+            
>>
>>+      // Set engine, which hooks up type mappings.
>>
>>+      rpc.setEngine(msgContext.getAxisEngine());
>>
>>+            
>>
>>+      rpc.init();   // ??
>>
>>+
>>
>>+      // OK, this is now the destination service!
>>
>>+      msgContext.setService( rpc );
>>
>>+    }
>>
>>+
>>
>>+    if (log.isDebugEnabled()) {
>>
>>+      log.debug("Exit: JWSHandler::invoke");
>>
>>+    }
>>
>>+  }    
>>
>>+
>>
>>+  private String getDefaultClasspath(MessageContext msgContext)
>>
>>+  {
>>
>>+    StringBuffer classpath = new StringBuffer();
>>
>>+
>>
>>+    ClassLoader cl = Thread.currentThread().getContextClassLoader();
>>
>>+    fillClassPath(cl, classpath);
>>
>>+
>>
>>+    // Just to be safe (the above doesn't seem to return the webapp
>>
>>+    // classpath in all cases), manually do this:
>>
>>+
>>
>>+    String webBase = (String)msgContext.getProperty(
>>
>>+
>>    
>>
>HTTPConstants.MC_HTTP_SERVLETLOCATION);
>  
>
>>+    if (webBase != null) {
>>
>>+      classpath.append(webBase + File.separatorChar + "classes" +
>>
>>+                       File.pathSeparatorChar);
>>
>>+      try {
>>
>>+        String libBase = webBase + File.separatorChar + "lib";
>>
>>+        File libDir = new File(libBase);
>>
>>+        String [] jarFiles = libDir.list();
>>
>>+        for (int i = 0; i < jarFiles.length; i++) {
>>
>>+          String jarFile = jarFiles[i];
>>
>>+          if (jarFile.endsWith(".jar")) {
>>
>>+            classpath.append(libBase +
>>
>>+                             File.separatorChar +
>>
>>+                             jarFile +
>>
>>+                             File.pathSeparatorChar);
>>
>>+          }
>>
>>+        }
>>
>>+      } catch (Exception e) {
>>
>>+        // Oh well.  No big deal.
>>
>>+      }
>>
>>+    }
>>
>>+
>>
>>+    // axis.ext.dirs can be used in any appserver
>>
>>+    getClassPathFromDirectoryProperty(classpath, "axis.ext.dirs");
>>
>>+
>>
>>+    // classpath used by Jasper 
>>
>>+    getClassPathFromProperty(classpath,
>>    
>>
>"org.apache.catalina.jsp_classpath");
>  
>
>>+        
>>
>>+    // websphere stuff.
>>
>>+    getClassPathFromProperty(classpath, "ws.ext.dirs");
>>
>>+    getClassPathFromProperty(classpath,
>>    
>>
>"com.ibm.websphere.servlet.application.classpath");
>  
>
>>+        
>>
>>+    // java class path
>>
>>+    getClassPathFromProperty(classpath, "java.class.path");
>>
>>+        
>>
>>+    // Load jars from java external directory
>>
>>+    getClassPathFromDirectoryProperty(classpath, "java.ext.dirs");
>>
>>+        
>>
>>+    // boot classpath isn't found in above search
>>
>>+    getClassPathFromProperty(classpath, "sun.boot.class.path");
>>
>>+
>>
>>+    return classpath.toString();
>>
>>+  }
>>
>>+
>>
>>+  private void getClassPathFromDirectoryProperty(StringBuffer
>>    
>>
>classpath, String property) {
>  
>
>>+    String dirs = AxisProperties.getProperty(property);
>>
>>+    String path = null;
>>
>>+    try {
>>
>>+      path = ClasspathUtils.expandDirs(dirs);
>>
>>+    } catch (Exception e) {
>>
>>+      // Oh well.  No big deal.
>>
>>+    }
>>
>>+    if( path!= null) {
>>
>>+      classpath.append(path);
>>
>>+      classpath.append(File.pathSeparatorChar);
>>
>>+    }
>>
>>+  }
>>
>>+
>>
>>+  private void getClassPathFromProperty(StringBuffer classpath, String
>>    
>>
>property) {
>  
>
>>+    String path = AxisProperties.getProperty(property);
>>
>>+    if( path  != null) {
>>
>>+      classpath.append(path);
>>
>>+      classpath.append(File.pathSeparatorChar);
>>
>>+    }
>>
>>+  }
>>
>>+
>>
>>+  /**
>>
>>+   * Walk the classloader hierarchy and add to the classpath
>>
>>+   * 
>>
>>+   * @param cl
>>
>>+   * @param classpath
>>
>>+   */
>>
>>+  private void fillClassPath(ClassLoader cl, StringBuffer classpath) {
>>
>>+    while (cl != null) {
>>
>>+      if (cl instanceof URLClassLoader) {
>>
>>+        URL[] urls = ((URLClassLoader) cl).getURLs();
>>
>>+        for (int i = 0; (urls != null) && i < urls.length; i++) {
>>
>>+          String path = urls[i].getPath();
>>
>>+          //If it is a drive letter, adjust accordingly.
>>
>>+          if (path.length() >= 3 && path.charAt(0) == '/' &&
>>    
>>
>path.charAt(2) == ':')
>  
>
>>+            path = path.substring(1);
>>
>>+          classpath.append(URLDecoder.decode(path));
>>
>>+          classpath.append(File.pathSeparatorChar);
>>
>>+
>>
>>+          // if its a jar extract Class-Path entries from manifest
>>
>>+          File file = new File(urls[i].getFile());
>>
>>+          if (file.isFile()) {
>>
>>+            FileInputStream fis = null;
>>
>>+            try {
>>
>>+              fis = new FileInputStream(file);
>>
>>+
>>
>>+              if (isJar(fis)) {
>>
>>+                JarFile jar = new JarFile(file);
>>
>>+                Manifest manifest = jar.getManifest();
>>
>>+                if (manifest != null) {
>>
>>+                  Attributes attributes =
>>    
>>
>manifest.getMainAttributes();
>  
>
>>+                  if (attributes != null) {
>>
>>+                    String s =
>>    
>>
>attributes.getValue(Attributes.Name.CLASS_PATH);
>  
>
>>+                    String base = file.getParent();
>>
>>+
>>
>>+                    if (s != null) {
>>
>>+                      StringTokenizer st = new StringTokenizer(s, "
>>    
>>
>");
>  
>
>>+                      while (st.hasMoreTokens()) {
>>
>>+                        String t = st.nextToken();
>>
>>+                        classpath.append(base + File.separatorChar +
>>    
>>
>t);
>  
>
>>+                        classpath.append(File.pathSeparatorChar);
>>
>>+                      }
>>
>>+                    }
>>
>>+                  }
>>
>>+                }
>>
>>+              }
>>
>>+            } catch (IOException ioe) {
>>
>>+              if (fis != null)
>>
>>+                try {
>>
>>+                  fis.close();
>>
>>+                } catch (IOException ioe2) {
>>
>>+                }
>>
>>+            }
>>
>>+          }
>>
>>+        }
>>
>>+      }
>>
>>+      cl = cl.getParent();
>>
>>+    }
>>
>>+  }
>>
>>+}
>>
>>
>>Added:
>>    
>>
>incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/Axis
>Hook.java
>  
>
>>=======================================================================
>>    
>>
>=======
>  
>
>>--- (empty file)
>>+++
>>    
>>
>incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/Axis
>Hook.java	Thu Sep  9 12:43:48 2004
>  
>
>>@@ -0,0 +1,140 @@
>>+/*
>>
>>+ * Copyright 2001-2004 The Apache Software Foundation.
>>
>>+ * 
>>
>>+ * Licensed 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.beehive.wsm.axis;
>>
>>+
>>
>>+import java.lang.reflect.Method;
>>
>>+import java.util.ArrayList;
>>
>>+import java.util.Collection;
>>
>>+import java.util.List;
>>
>>+
>>
>>+import javax.xml.namespace.QName;
>>
>>+
>>
>>+import org.apache.axis.wsdl.fromJava.Emitter;
>>
>>+import org.apache.axis.encoding.DefaultSOAPEncodingTypeMappingImpl;
>>
>>+import org.apache.axis.description.ServiceDesc;
>>
>>+import org.apache.axis.description.JavaServiceDesc;
>>
>>+import org.apache.axis.description.ParameterDesc;
>>
>>+import org.apache.axis.description.OperationDesc;
>>
>>+import org.apache.beehive.wsm.jsr181.model.WebServiceTYPEMetadata;
>>
>>+import org.apache.beehive.wsm.jsr181.model.WebServiceMETHODMetadata;
>>
>>+import
>>    
>>
>org.apache.beehive.wsm.jsr181.model.WebServicePARAMETERMetadata;
>  
>
>>+
>>
>>+import javax.jws.WebParam;
>>
>>+
>>
>>+/*********************************************************************
>>    
>>
>**********
>  
>
>>+ * 
>>
>>+ *
>>
>>+ * @author Jonathan Colwell
>>
>>+ */
>>
>>+public class AxisHook {
>>
>>+
>>
>>+    public static ServiceDesc createServiceDesc(WebServiceTYPEMetadata
>>    
>>
>wsm,
>  
>
>>+                                                ClassLoader cl)
>>
>>+        throws ClassNotFoundException, NoSuchMethodException
>>
>>+    {
>>
>>+ 
>>
>>+        JavaServiceDesc sd = new JavaServiceDesc();
>>
>>+
>>
>>+        if (cl == null) {
>>
>>+            /*
>>
>>+             * NOTE jcolwell@bea.com 2004-Aug-30 -- if no classloader 
>>
>>+             * was provided, use the one that loaded this Class
>>
>>+             */
>>
>>+            cl = AxisHook.class.getClassLoader();
>>
>>+        }
>>
>>+
>>
>>+        Class serviceClass = cl.loadClass(wsm.getJavaFQClassName());
>>
>>+     
>>
>>+        String portType = wsm.getWsName();
>>
>>+        sd.setName(portType);
>>
>>+        sd.setImplClass(serviceClass);
>>
>>+
>>
>>+        String targetNamespace = wsm.getWsTargetNamespace();
>>
>>+        sd.setDefaultNamespace(targetNamespace);
>>
>>+      
>>
>>+        Collection<WebServiceMETHODMetadata> methods =
>>    
>>
>wsm.getMethods();
>  
>
>>+        List<String> allowedMethods = new ArrayList<String>();
>>
>>+        for (WebServiceMETHODMetadata meth : methods) {
>>
>>+
>>
>>+            String operationName = meth.getWmOperationName();
>>
>>+
>>
>>+            if (operationName != null && operationName.length() > 0) {
>>
>>+      
>>
>>+                OperationDesc od = new OperationDesc();
>>
>>+
>>
>>+                String javaMethodName = meth.getJavaMethodName();
>>
>>+                od.setElementQName(new QName(operationName));
>>
>>+                od.setName(javaMethodName);
>>
>>+                allowedMethods.add(javaMethodName);
>>
>>+
>>
>>+                od.setSoapAction(meth.getWmAction());
>>
>>+
>>
>>+                od.setReturnQName(new QName(meth.getWrName()));   
>>
>>+
>>
>>+                od.setReturnClass(meth.getJavaReturnType());
>>
>>+                //      od.setReturnHeader(
>>
>>+            
>>
>>+                List<WebServicePARAMETERMetadata> parameters =
>>    
>>
>meth.getParams();
>  
>
>>+                List<Class> paramClasses = new ArrayList<Class>();
>>    
>>
>
>  
>
>>+ 
>>
>>+                for (WebServicePARAMETERMetadata param : parameters) {
>>
>>+        
>>
>>+                    ParameterDesc pd = new ParameterDesc();
>>
>>+                    pd.setName(param.getWpName());
>>
>>+                    Class paramType = param.getJavaType();
>>
>>+                    pd.setJavaType(paramType);
>>
>>+                    paramClasses.add(paramType);
>>
>>+
>>
>>+                    WebParam.Mode mo = param.getWpMode();
>>
>>+                    switch (mo) {
>>
>>+                    case OUT:
>>
>>+                        pd.setMode(ParameterDesc.OUT);
>>
>>+                        pd.setInHeader(false);
>>
>>+                        pd.setOutHeader(param.isWpHeader());
>>
>>+                        break;
>>
>>+          
>>
>>+                    case INOUT:
>>
>>+                        pd.setMode(ParameterDesc.INOUT);
>>
>>+                        boolean header = param.isWpHeader();
>>
>>+                        pd.setInHeader(header);
>>
>>+                        pd.setOutHeader(header);
>>
>>+                        break;
>>
>>+          
>>
>>+                    case IN:
>>
>>+                    default:
>>
>>+                        pd.setMode(ParameterDesc.IN);
>>
>>+                        pd.setInHeader(param.isWpHeader());
>>
>>+                        pd.setOutHeader(false);
>>
>>+                    }
>>
>>+                    od.addParameter(pd);
>>
>>+                }
>>
>>+
>>
>>+                Method javaMethod = serviceClass
>>
>>+                    .getMethod(meth.getJavaMethodName(),
>>
>>+                               paramClasses.toArray(new
>>    
>>
>Class[paramClasses.size()]));
>  
>
>>+
>>
>>+                od.setMethod(javaMethod);
>>
>>+
>>
>>+                sd.addOperationDesc(od);
>>
>>+            }
>>
>>+        }
>>
>>+        sd.setAllowedMethods(allowedMethods);
>>
>>+        
>>
>>+        return sd;
>>
>>+    }
>>
>>+}
>>
>>+  
>>
>>
>>Added:
>>    
>>
>incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/Depl
>oymentDumper.java
>  
>
>>=======================================================================
>>    
>>
>=======
>  
>
>>--- (empty file)
>>+++
>>    
>>
>incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/Depl
>oymentDumper.java	Thu Sep  9 12:43:48 2004
>  
>
>>@@ -0,0 +1,200 @@
>>+/*
>>
>>+ * DeploymentDumper.java
>>
>>+ * 
>>
>>+ * Copyright 2001-2004 The Apache Software Foundation.
>>
>>+ * 
>>
>>+ * 
>>
>>+ * Licensed 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.
>>
>>+ * 
>>
>>+ * 
>>
>>+ * Original author: Jonathan Colwell
>>
>>+ */
>>
>>+package org.apache.beehive.wsm.axis;
>>
>>+
>>
>>+import com.sun.tools.apt.main.Main;
>>
>>+
>>
>>+import java.lang.reflect.Method;
>>
>>+import java.io.FileOutputStream;
>>
>>+import java.io.OutputStreamWriter;
>>
>>+import java.io.Writer;
>>
>>+import java.util.ArrayList;
>>
>>+import java.util.Collection;
>>
>>+import java.util.List;
>>
>>+import java.util.Set;
>>
>>+
>>
>>+import javax.xml.namespace.QName;
>>
>>+import javax.jws.WebParam;
>>
>>+
>>
>>+import org.apache.axis.server.AxisServer;
>>
>>+import org.apache.axis.configuration.FileProvider;
>>
>>+import org.apache.axis.deployment.wsdd.WSDDDeployment;
>>
>>+import org.apache.axis.deployment.wsdd.WSDDOperation;
>>
>>+import org.apache.axis.deployment.wsdd.WSDDService;
>>
>>+import org.apache.axis.description.JavaServiceDesc;
>>
>>+import org.apache.axis.description.ServiceDesc;
>>
>>+import org.apache.axis.description.OperationDesc;
>>
>>+import org.apache.axis.description.ParameterDesc;
>>
>>+import org.apache.axis.encoding.SerializationContext;
>>
>>+import org.apache.axis.handlers.soap.SOAPService;
>>
>>+import org.apache.axis.providers.java.RPCProvider;
>>
>>+import org.apache.beehive.wsm.jsr181.model.WebServiceTYPEMetadata;
>>
>>+import org.apache.beehive.wsm.jsr181.model.WebServiceMETHODMetadata;
>>
>>+import
>>    
>>
>org.apache.beehive.wsm.jsr181.model.WebServicePARAMETERMetadata;
>  
>
>>+import
>>    
>>
>org.apache.beehive.wsm.jsr181.processor.apt.WsmAnnotationProcessor;
>  
>
>>+
>>
>>+/*********************************************************************
>>    
>>
>**********
>  
>
>>+ * 
>>
>>+ *
>>
>>+ * @author Jonathan Colwell
>>
>>+ */
>>
>>+public class DeploymentDumper {
>>
>>+
>>
>>+    /**
>>
>>+     * FIXME jcolwell@bea.com 2004-Sep-08 -- come up with a better
>>    
>>
>solution for
>  
>
>>+     * providing the args to APT as well as providing the WSDD file
>>    
>>
>names
>  
>
>>+     *
>>
>>+     * Currently, the usage is:
>>
>>+     * <output wsdd> <input wsdd> <assorted APT and javac options>
>>    
>>
><source files>
>  
>
>>+     */
>>
>>+    public static void main(String[] args) throws Exception
>>
>>+    {
>>
>>+        if (args.length > 2) {
>>
>>+            String wsddOut = args[0];
>>
>>+            String wsddIn = args[1];
>>
>>+            int len = args.length - 2;
>>
>>+            String[] aptArgs = new String[len];
>>
>>+            System.arraycopy(args, 2, aptArgs, 0, len);
>>
>>+            for (String arg : aptArgs) {
>>
>>+                System.out.println(arg);
>>
>>+            }
>>
>>+            
>>
>>+            Main apt = new Main("AxisApt");
>>
>>+            
>>
>>+            if (0 == apt.compile(aptArgs)) {
>>
>>+                DeploymentDumper dd = new DeploymentDumper();
>>
>>+
>>    
>>
>dd.createAxisDeployment(dd.retrieveWebServiceMetadata(),
>  
>
>>+                                        wsddOut,
>>
>>+                                        wsddIn);
>>
>>+                
>>
>>+            }
>>
>>+        }
>>
>>+    }
>>
>>+
>>
>>+    public void
>>    
>>
>createAxisDeployment(Collection<WebServiceTYPEMetadata> wsms,
>  
>
>>+                                     String newConfigFilename,
>>
>>+                                     String existingConfigFilename)
>>
>>+        throws Exception
>>
>>+    {
>>
>>+        Writer fw = new OutputStreamWriter
>>
>>+            (new FileOutputStream(newConfigFilename), "UTF-8");
>>
>>+        SerializationContext serial = new SerializationContext(fw);
>>
>>+        serial.setPretty(true);
>>
>>+        serial.writeString("<?xml version=\"1.0\"
>>    
>>
>encoding=\"UTF-8\"?>\n");
>  
>
>>+        
>>
>>+        if (existingConfigFilename != null) {
>>
>>+            FileProvider fp = new
>>    
>>
>FileProvider(existingConfigFilename);
>  
>
>>+
>>
>>+            /*
>>
>>+             * NOTE jcolwell@bea.com 2004-Sep-08 -- I don't really
>>    
>>
>want
>  
>
>>+             * to configure an engine here but I just need the
>>    
>>
>FileProvider
>  
>
>>+             * to process the loaded WSDD.  Find out if there is a
>>    
>>
>more 
>  
>
>>+             * "correct" way to accomplish this.
>>
>>+             *
>>
>>+             * an unfortunate side effect of using this default call
>>    
>>
>to 
>  
>
>>+             * configureEngine is that a default server-config.wsdd
>>    
>>
>appears in
>  
>
>>+             * the current directory.
>>
>>+             */
>>
>>+            fp.configureEngine(new AxisServer());
>>
>>+
>>
>>+            WSDDDeployment dep = fp.getDeployment();
>>
>>+            
>>
>>+            if (dep != null) {
>>
>>+ 
>>
>>+               for (WebServiceTYPEMetadata wsm : wsms) {
>>
>>+                    WSDDService wsds = new WSDDService();
>>
>>+                
>>
>>+                    JavaServiceDesc sd = (JavaServiceDesc)
>>
>>+                        AxisHook.createServiceDesc(wsm, getClass()
>>
>>+                                                   .getClassLoader());
>>
>>+                    wsds.setName(sd.getName());
>>
>>+                    /*
>>
>>+                     * NOTE jcolwell@bea.com 2004-Sep-08 -- 
>>
>>+                     * the default namespace needs to be spcified
>>    
>>
>somehow but
>  
>
>>+                     * doing so here causes weirdness when the
>>    
>>
>webservice runs
>  
>
>>+                      wsds.setQName(new
>>    
>>
>QName(sd.getDefaultNamespace(),
>  
>
>>+                                              sd.getName()));
>>
>>+                     */
>>
>>+
>>    
>>
>wsds.setProviderQName(wsds.QNAME_JAVARPC_PROVIDER);  
>  
>
>>+                    wsds.setUse(sd.getUse());
>>
>>+                    wsds.setStyle(sd.getStyle());
>>
>>+         
>>
>>+                    /*
>>
>>+                     * NOTE jcolwell@bea.com 2004-Sep-08 -- I want to
>>    
>>
>prevent 
>  
>
>>+                     * the JavaServiceDesc from introspecting itself
>>    
>>
>when I call
>  
>
>>+                     * getOperations() but it complained when I tried
>>    
>>
>to set the 
>  
>
>>+                     * impl class back to null after having set it
>>    
>>
>when creating 
>  
>
>>+                     * the servicedesc.  In any case the resulting
>>    
>>
>operations 
>  
>
>>+                     * shown in the resulting WSDD look correct.
>>
>>+                     */
>>
>>+                    // sd.setImplClass(null);
>>
>>+
>>
>>+                    List<OperationDesc> ops = (List<OperationDesc>)sd
>>
>>+                        .getOperations();
>>
>>+
>>
>>+                    for (OperationDesc op : ops) {
>>
>>+                        wsds.addOperation(new WSDDOperation(op));
>>
>>+                    }
>>
>>+                    
>>
>>+                    List allowedMethods = sd.getAllowedMethods();
>>
>>+                    StringBuffer allowedNames = new
>>    
>>
>StringBuffer(allowedMethods
>  
>
>>+
>>    
>>
>.size());
>  
>
>>+                    boolean firstRun = true;
>>
>>+                    for (Object methName : allowedMethods) {
>>
>>+                        if (firstRun) {
>>
>>+                            firstRun = false;
>>
>>+                        }
>>
>>+                        else {
>>
>>+                            allowedNames.append(' ');
>>
>>+                        }
>>
>>+                        allowedNames.append((String)methName);
>>
>>+                    }
>>
>>+                    wsds.setParameter("allowedMethods",
>>    
>>
>allowedNames.toString());
>  
>
>>+                    wsds.setParameter("className",
>>    
>>
>sd.getImplClass().getName());
>  
>
>>+
>>
>>+
>>
>>+                    /*
>>
>>+                     * NOTE jcolwell@bea.com 2004-Sep-08 -- addService
>>    
>>
>is 
>  
>
>>+                     * protected in WSDDDeployment, but deployService 
>>
>>+                     * appears to work for now.
>>
>>+                     */
>>
>>+                    dep.deployService(wsds);
>>
>>+                }
>>
>>+               dep.writeToContext(serial);
>>
>>+            }
>>
>>+        }
>>
>>+        fw.close();
>>
>>+    }
>>
>>+
>>
>>+    protected Collection<WebServiceTYPEMetadata>
>>    
>>
>retrieveWebServiceMetadata()
>  
>
>>+    {
>>
>>+        Collection<WebServiceTYPEMetadata> meta = 
>>
>>+            new ArrayList<WebServiceTYPEMetadata>();
>>
>>+        
>>
>>+        Set<String> keys =
>>    
>>
>WsmAnnotationProcessor.getObjectModelNames();
>  
>
>>+        for (String key : keys) {
>>
>>+            meta.add((WebServiceTYPEMetadata)WsmAnnotationProcessor
>>
>>+                .getObjectModel(key));
>>
>>+        }
>>
>>+        return meta;        
>>
>>+    }
>>
>>+}
>>
>>
>>Added:
>>    
>>
>incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/util/Clas
>spathUtils.java
>  
>
>>=======================================================================
>>    
>>
>=======
>  
>
>>--- (empty file)
>>+++
>>    
>>
>incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/util/Clas
>spathUtils.java	Thu Sep  9 12:43:48 2004
>  
>
>>@@ -0,0 +1,62 @@
>>+/*
>>
>>+ * ClasspathUtils.java
>>
>>+ * 
>>
>>+ * Copyright 2001-2004 The Apache Software Foundation.
>>
>>+ * 
>>
>>+ * 
>>
>>+ * Licensed 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.beehive.wsm.util;
>>
>>+
>>
>>+import java.io.File;
>>
>>+import java.util.StringTokenizer;
>>
>>+
>>
>>+import org.apache.beehive.wsm.util.JavaArchiveFilter;
>>
>>+
>>
>>+/*********************************************************************
>>    
>>
>**********
>  
>
>>+ * 
>>
>>+ *
>>
>>+ * @author Jonathan Colwell
>>
>>+ */
>>
>>+public class ClasspathUtils {
>>
>>+
>>
>>+  /**
>>
>>+   * Function borrowed from org.apache.axis.handlers.JWSHandler
>>
>>+   *
>>
>>+   * Expand a directory path or list of directory paths
>>    
>>
>(File.pathSeparator
>  
>
>>+   * delimited) into a list of file paths of all the jar files in
>>    
>>
>those
>  
>
>>+   * directories.
>>
>>+   *
>>
>>+   * @param dirPaths The string containing the directory path or list
>>    
>>
>of
>  
>
>>+   * 		directory paths.
>>
>>+   * @return The file paths of the jar files in the directories. This
>>    
>>
>is an
>  
>
>>+   *		empty string if no files were found, and is terminated
>>    
>>
>by an
>  
>
>>+   *		additional pathSeparator in all other cases.
>>
>>+   */
>>
>>+    public static String expandDirs(String dirPaths) {
>>
>>+        StringTokenizer st = new StringTokenizer(dirPaths,
>>    
>>
>File.pathSeparator);
>  
>
>>+        StringBuffer buffer = new StringBuffer();
>>
>>+        while (st.hasMoreTokens()) {
>>
>>+            String d = st.nextToken();
>>
>>+            File dir = new File(d);
>>
>>+            if (dir.isDirectory()) {
>>
>>+                File[] files = dir.listFiles(new JavaArchiveFilter());
>>
>>+                for (int i = 0; i < files.length; i++) {
>>
>>+
>>    
>>
>buffer.append(files[i]).append(File.pathSeparator);
>  
>
>>+                }
>>
>>+            }
>>
>>+        }
>>
>>+        return buffer.toString();
>>
>>+    }
>>
>>+}
>>
>>
>>Added:
>>    
>>
>incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/util/Java
>ArchiveFilter.java
>  
>
>>=======================================================================
>>    
>>
>=======
>  
>
>>--- (empty file)
>>+++
>>    
>>
>incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/util/Java
>ArchiveFilter.java	Thu Sep  9 12:43:48 2004
>  
>
>>@@ -0,0 +1,34 @@
>>+/*
>>
>>+ * JavaArchiveFilter.java
>>
>>+ * 
>>
>>+ * Copyright 2001-2004 The Apache Software Foundation.
>>
>>+ * 
>>
>>+ * 
>>
>>+ * Licensed 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.beehive.wsm.util;
>>
>>+
>>
>>+import java.io.File;
>>
>>+import java.io.FileFilter;
>>
>>+
>>
>>+/*********************************************************************
>>    
>>
>**********
>  
>
>>+ * This class stolen from an package private inner class of 
>>
>>+ * org.apache.axis.handlers.JWSHandler
>>
>>+ */
>>
>>+public class JavaArchiveFilter implements FileFilter {
>>
>>+    public boolean accept(File file) {
>>
>>+        String name = file.getName().toLowerCase();
>>
>>+        return (name.endsWith(".jar") || name.endsWith(".zip"));
>>
>>+    }
>>
>>+}
>>
>>
>>Added: incubator/beehive/trunk/wsm/test/webapps/AnnotatedAxis/Foo.jws
>>=======================================================================
>>    
>>
>=======
>  
>
>>--- (empty file)
>>+++ incubator/beehive/trunk/wsm/test/webapps/AnnotatedAxis/Foo.jws
>>    
>>
>Thu Sep  9 12:43:48 2004
>  
>
>>@@ -0,0 +1,46 @@
>>+/*
>>
>>+ * Copyright 2001-2004 The Apache Software Foundation.
>>
>>+ * 
>>
>>+ * Licensed 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.
>>
>>+ */
>>
>>+
>>
>>+
>>
>>+import javax.jws.Oneway;
>>
>>+import javax.jws.WebMethod;
>>
>>+import javax.jws.WebParam;
>>
>>+import javax.jws.WebResult;
>>
>>+import javax.jws.WebService;
>>
>>+
>>
>>+/*********************************************************************
>>    
>>
>**********
>  
>
>>+ * 
>>
>>+ *
>>
>>+ * @author Jonathan Colwell
>>
>>+ */
>>
>>+@WebService(name = "Abacus",
>>
>>+            serviceName = "Cheetorama",
>>
>>+            targetNamespace =
>>    
>>
>"http://www.superflaco.com/AnnotationTest")
>  
>
>>+  public class Foo {
>>
>>+
>>
>>+    @WebMethod(operationName = "GoLoco", action="LocoAction")
>>
>>+      @WebResult
>>
>>+      public boolean getNutty(@WebParam int level,
>>
>>+                              @WebParam(name="detail") String detail)
>>    
>>
>{
>  
>
>>+        
>>
>>+      return (level > 5);
>>
>>+    }
>>
>>+
>>
>>+    @WebMethod @Oneway public String goHome(@WebParam(name="when")
>>    
>>
>long time)
>  
>
>>+    {
>>
>>+      return "Now";
>>
>>+    }
>>
>>+  }
>>
>>
>>Added:
>>    
>>
>incubator/beehive/trunk/wsm/test/webapps/AnnotatedAxis/WEB-INF/Annotatio
>nBasedDeployment/Bar.java
>  
>
>>=======================================================================
>>    
>>
>=======
>  
>
>>--- (empty file)
>>+++
>>    
>>
>incubator/beehive/trunk/wsm/test/webapps/AnnotatedAxis/WEB-INF/Annotatio
>nBasedDeployment/Bar.java	Thu Sep  9 12:43:48 2004
>  
>
>>@@ -0,0 +1,46 @@
>>+/*
>>
>>+ * Copyright 2001-2004 The Apache Software Foundation.
>>
>>+ * 
>>
>>+ * Licensed 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.
>>
>>+ */
>>
>>+
>>
>>+
>>
>>+import javax.jws.Oneway;
>>
>>+import javax.jws.WebMethod;
>>
>>+import javax.jws.WebParam;
>>
>>+import javax.jws.WebResult;
>>
>>+import javax.jws.WebService;
>>
>>+
>>
>>+/*********************************************************************
>>    
>>
>**********
>  
>
>>+ * 
>>
>>+ *
>>
>>+ * @author Jonathan Colwell
>>
>>+ */
>>
>>+@WebService(name = "Milk",
>>
>>+            serviceName = "Chocolate",
>>
>>+            targetNamespace = "http://www.superflaco.com/Cocoa")
>>
>>+  public class Bar {
>>
>>+
>>
>>+    @WebMethod(operationName = "EatCookie", action="ChompChomp")
>>
>>+      @WebResult
>>
>>+      public String eatDough(@WebParam int chipCount,
>>
>>+                             @WebParam String flavor) {
>>
>>+        
>>
>>+        return flavor + ((chipCount > 5) ? " is Yummy" : " is
>>    
>>
>boring");
>  
>
>>+    }
>>
>>+
>>
>>+    @WebMethod @WebResult(name = "cookiesInside") public int
>>    
>>
>openCookieJar()
>  
>
>>+    {
>>
>>+        return 123;
>>
>>+    }
>>
>>+  }
>>
>>
>>Added:
>>    
>>
>incubator/beehive/trunk/wsm/test/webapps/AnnotatedAxis/WEB-INF/Annotatio
>nBasedDeployment/Foo.java
>  
>
>>=======================================================================
>>    
>>
>=======
>  
>
>>--- (empty file)
>>+++
>>    
>>
>incubator/beehive/trunk/wsm/test/webapps/AnnotatedAxis/WEB-INF/Annotatio
>nBasedDeployment/Foo.java	Thu Sep  9 12:43:48 2004
>  
>
>>@@ -0,0 +1,51 @@
>>+/*
>>
>>+ * Copyright 2001-2004 The Apache Software Foundation.
>>
>>+ * 
>>
>>+ * Licensed 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.
>>
>>+ */
>>
>>+
>>
>>+
>>
>>+import javax.jws.Oneway;
>>
>>+import javax.jws.WebMethod;
>>
>>+import javax.jws.WebParam;
>>
>>+import javax.jws.WebResult;
>>
>>+import javax.jws.WebService;
>>
>>+
>>
>>+/*********************************************************************
>>    
>>
>**********
>  
>
>>+ * 
>>
>>+ *
>>
>>+ * @author Jonathan Colwell
>>
>>+ */
>>
>>+@WebService(name = "Abacus",
>>
>>+            serviceName = "Cheetorama",
>>
>>+            targetNamespace =
>>    
>>
>"http://www.superflaco.com/AnnotationTest")
>  
>
>>+  public class Foo {
>>
>>+
>>
>>+    @WebMethod(operationName = "GoLoco", action="LocoAction")
>>
>>+      @WebResult
>>
>>+      public boolean getNutty(@WebParam int level,
>>
>>+                              @WebParam(name="detail") String detail)
>>    
>>
>{
>  
>
>>+        
>>
>>+      return (level > 5);
>>
>>+    }
>>
>>+
>>
>>+    @WebMethod @WebResult(name = "howdy") public String goHome()
>>
>>+    {
>>
>>+      try {
>>
>>+          return "wutup!";
>>
>>+      }
>>
>>+      catch (Exception e) {
>>
>>+        return e.toString();
>>
>>+      }
>>
>>+    }
>>
>>+  }
>>
>>
>>Added:
>>    
>>
>incubator/beehive/trunk/wsm/test/webapps/AnnotatedAxis/WEB-INF/Annotatio
>nBasedDeployment/dump.bat
>  
>
>>=======================================================================
>>    
>>
>=======
>  
>
>>--- (empty file)
>>+++
>>    
>>
>incubator/beehive/trunk/wsm/test/webapps/AnnotatedAxis/WEB-INF/Annotatio
>nBasedDeployment/dump.bat	Thu Sep  9 12:43:48 2004
>  
>
>>@@ -0,0 +1,5 @@
>>+call setEnv
>>
>>+
>>
>>+%JAVA_HOME%\bin\java org.apache.beehive.wsm.axis.DeploymentDumper
>>    
>>
>..\annotated-server-config.wsdd ..\server-config.wsdd -classpath
>%classpath% -factory
>org.apache.beehive.wsm.jsr181.processor.apt.WsmAnnotationProcessorFactor
>y -d ..\classes Bar.java Foo.java
>  
>
>>+
>>
>>+del server-config.wsdd
>>
>>
>>Added:
>>    
>>
>incubator/beehive/trunk/wsm/test/webapps/AnnotatedAxis/WEB-INF/Annotatio
>nBasedDeployment/setEnv.bat
>  
>
>>=======================================================================
>>    
>>
>=======
>  
>
>>--- (empty file)
>>+++
>>    
>>
>incubator/beehive/trunk/wsm/test/webapps/AnnotatedAxis/WEB-INF/Annotatio
>nBasedDeployment/setEnv.bat	Thu Sep  9 12:43:48 2004
>  
>
>>@@ -0,0 +1 @@
>>+set
>>    
>>
>classpath=..\classes;%JAVA_HOME%\lib\tools.jar;..\lib\axis.jar;..\lib\ja
>xrpc.jar;..\lib\wsm.jar;..\lib\wsm-axis.jar;..\lib\commons-logging.jar;.
>.\lib\saaj.jar;..\lib\wsdl4j.jar;..\lib\;..\lib\jaxrpc.jar;..\lib\common
>s-discovery.jar;..\lib\log4j-1.2.8.jar
>  
>
>>Added:
>>    
>>
>incubator/beehive/trunk/wsm/test/webapps/AnnotatedAxis/WEB-INF/lib/log4j
>.properties
>  
>
>>=======================================================================
>>    
>>
>=======
>  
>
>>--- (empty file)
>>+++
>>    
>>
>incubator/beehive/trunk/wsm/test/webapps/AnnotatedAxis/WEB-INF/lib/log4j
>.properties	Thu Sep  9 12:43:48 2004
>  
>
>>@@ -0,0 +1,20 @@
>>+# Set root category priority to INFO and its only appender to CONSOLE.
>>
>>+log4j.rootCategory=INFO, CONSOLE
>>
>>+#log4j.rootCategory=INFO, CONSOLE, LOGFILE
>>
>>+
>>
>>+# Set the enterprise logger category to FATAL and its only appender to
>>    
>>
>CONSOLE.
>  
>
>>+log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE
>>
>>+
>>
>>+# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
>>
>>+log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
>>
>>+log4j.appender.CONSOLE.Threshold=INFO
>>
>>+log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
>>
>>+log4j.appender.CONSOLE.layout.ConversionPattern=- %m%n
>>
>>+
>>
>>+# LOGFILE is set to be a File appender using a PatternLayout.
>>
>>+log4j.appender.LOGFILE=org.apache.log4j.FileAppender
>>
>>+log4j.appender.LOGFILE.File=axis.log
>>
>>+log4j.appender.LOGFILE.Append=true
>>
>>+log4j.appender.LOGFILE.Threshold=INFO
>>
>>+log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
>>
>>+log4j.appender.LOGFILE.layout.ConversionPattern=%-4r [%t] %-5p %c %x -
>>    
>>
>%m%n
>  
>
>>Added:
>>    
>>
>incubator/beehive/trunk/wsm/test/webapps/AnnotatedAxis/WEB-INF/server-co
>nfig.wsdd
>  
>
>>=======================================================================
>>    
>>
>=======
>  
>
>>--- (empty file)
>>+++
>>    
>>
>incubator/beehive/trunk/wsm/test/webapps/AnnotatedAxis/WEB-INF/server-co
>nfig.wsdd	Thu Sep  9 12:43:48 2004
>  
>
>>@@ -0,0 +1,47 @@
>>+<?xml version="1.0" encoding="UTF-8"?>
>>
>>+<deployment xmlns="http://xml.apache.org/axis/wsdd/"
>>    
>>
>xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
>  
>
>>+ <globalConfiguration>
>>+  <parameter name="adminPassword" value="admin"/>
>>+  <parameter name="disablePrettyXML" value="true"/>
>>+  <parameter name="attachments.implementation"
>>    
>>
>value="org.apache.axis.attachments.AttachmentsImpl"/>
>  
>
>>+  <parameter name="sendXsiTypes" value="true"/>
>>+  <parameter name="sendMultiRefs" value="true"/>
>>+  <parameter name="sendXMLDeclaration" value="true"/>
>>+  <requestFlow>
>>+   <handler
>>    
>>
>type="java:org.apache.beehive.wsm.axis.AnnotatedJWSHandler">
>  
>
>>+    <parameter name="scope" value="session"/>
>>+   </handler>
>>+   <handler
>>    
>>
>type="java:org.apache.beehive.wsm.axis.AnnotatedJWSHandler">
>  
>
>>+    <parameter name="scope" value="request"/>
>>+    <parameter name="extension" value=".jwr"/>
>>+   </handler>
>>+  </requestFlow>
>>+ </globalConfiguration>
>>+ <handler name="LocalResponder"
>>    
>>
>type="java:org.apache.axis.transport.local.LocalResponder"/>
>  
>
>>+ <handler name="URLMapper"
>>    
>>
>type="java:org.apache.axis.handlers.http.URLMapper"/>
>  
>
>>+ <handler name="Authenticate"
>>    
>>
>type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>
>  
>
>>+ <service name="AdminService" provider="java:MSG">
>>+  <parameter name="allowedMethods" value="AdminService"/>
>>+  <parameter name="enableRemoteAdmin" value="false"/>
>>+  <parameter name="className" value="org.apache.axis.utils.Admin"/>
>>+  <namespace>http://xml.apache.org/axis/wsdd/</namespace>
>>+ </service>
>>+ <service name="Version" provider="java:RPC">
>>+  <parameter name="allowedMethods" value="getVersion"/>
>>+  <parameter name="className" value="org.apache.axis.Version"/>
>>+ </service>
>>+ <transport name="http">
>>+  <requestFlow>
>>+   <handler type="URLMapper"/>
>>+   <handler
>>    
>>
>type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>
>  
>
>>+  </requestFlow>
>>+  <parameter name="qs:list"
>>    
>>
>value="org.apache.axis.transport.http.QSListHandler"/>
>  
>
>>+  <parameter name="qs:wsdl"
>>    
>>
>value="org.apache.axis.transport.http.QSWSDLHandler"/>
>  
>
>>+  <parameter name="qs:method"
>>    
>>
>value="org.apache.axis.transport.http.QSMethodHandler"/>
>  
>
>>+ </transport>
>>+ <transport name="local">
>>+  <responseFlow>
>>+   <handler type="LocalResponder"/>
>>+  </responseFlow>
>>+ </transport>
>>+</deployment>
>>
>>
>>Added:
>>    
>>
>incubator/beehive/trunk/wsm/test/webapps/AnnotatedAxis/WEB-INF/web.xml
>  
>
>>=======================================================================
>>    
>>
>=======
>  
>
>>--- (empty file)
>>+++
>>    
>>
>incubator/beehive/trunk/wsm/test/webapps/AnnotatedAxis/WEB-INF/web.xml
>Thu Sep  9 12:43:48 2004
>  
>
>>@@ -0,0 +1,96 @@
>>+<?xml version="1.0" encoding="ISO-8859-1"?>
>>+
>>+<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web
>>+Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
>>+
>>+<web-app>
>>+  <display-name>Apache-Axis</display-name>
>>+    
>>+    <listener>
>>+
>>    
>>
><listener-class>org.apache.axis.transport.http.AxisHTTPSessionListener</
>listener-class>
>  
>
>>+    </listener>
>>+    
>>+  <servlet>
>>+    <servlet-name>AxisServlet</servlet-name>
>>+    <display-name>Apache-Axis Servlet</display-name>
>>+    <servlet-class>
>>+        org.apache.axis.transport.http.AxisServlet
>>+    </servlet-class>
>>+  </servlet>
>>+
>>+  <servlet>
>>+    <servlet-name>AdminServlet</servlet-name>
>>+    <display-name>Axis Admin Servlet</display-name>
>>+    <servlet-class>
>>+        org.apache.axis.transport.http.AdminServlet
>>+    </servlet-class>
>>+    <load-on-startup>100</load-on-startup>
>>+  </servlet>
>>+
>>+  <servlet>
>>+    <servlet-name>SOAPMonitorService</servlet-name>
>>+    <display-name>SOAPMonitorService</display-name>
>>+    <servlet-class>
>>+        org.apache.axis.monitor.SOAPMonitorService
>>+    </servlet-class>
>>+    <init-param>
>>+      <param-name>SOAPMonitorPort</param-name>
>>+      <param-value>5001</param-value>
>>+    </init-param>
>>+    <load-on-startup>100</load-on-startup>
>>+  </servlet>
>>+
>>+  <servlet-mapping>
>>+    <servlet-name>AxisServlet</servlet-name>
>>+    <url-pattern>/servlet/AxisServlet</url-pattern>
>>+  </servlet-mapping>
>>+
>>+  <servlet-mapping>
>>+    <servlet-name>AxisServlet</servlet-name>
>>+    <url-pattern>*.jws</url-pattern>
>>+  </servlet-mapping>
>>+
>>+  <servlet-mapping>
>>+    <servlet-name>AxisServlet</servlet-name>
>>+    <url-pattern>/services/*</url-pattern>
>>+  </servlet-mapping>
>>+
>>+  <servlet-mapping>
>>+    <servlet-name>SOAPMonitorService</servlet-name>
>>+    <url-pattern>/SOAPMonitor</url-pattern>
>>+  </servlet-mapping>
>>+
>>+ <!-- uncomment this if you want the admin servlet -->
>>+ <!--
>>+  <servlet-mapping>
>>+    <servlet-name>AdminServlet</servlet-name>
>>+    <url-pattern>/servlet/AdminServlet</url-pattern>
>>+  </servlet-mapping>
>>+ -->
>>+
>>+    <session-config>
>>+        <!-- Default to 5 minute session timeouts -->
>>+        <session-timeout>5</session-timeout>
>>+    </session-config>
>>+
>>+    <!-- currently the W3C havent settled on a media type for WSDL;
>>+    http://www.w3.org/TR/2003/WD-wsdl12-20030303/#ietf-draft
>>+    for now we go with the basic 'it's XML' response -->
>>+  <mime-mapping>
>>+    <extension>wsdl</extension>
>>+     <mime-type>text/xml</mime-type>
>>+  </mime-mapping>
>>+  
>>+
>>+  <mime-mapping>
>>+    <extension>xsd</extension>
>>+    <mime-type>text/xml</mime-type>
>>+  </mime-mapping>
>>+
>>+  <welcome-file-list id="WelcomeFileList">
>>+    <welcome-file>index.html</welcome-file>
>>+    <welcome-file>index.jsp</welcome-file>
>>+    <welcome-file>index.jws</welcome-file>
>>+  </welcome-file-list>
>>+
>>+</web-app>
>>
>>Added:
>>    
>>
>incubator/beehive/trunk/wsm/test/webapps/AnnotatedAxis/happyaxis.jsp
>  
>
>>=======================================================================
>>    
>>
>=======
>  
>
>>--- (empty file)
>>+++
>>    
>>
>incubator/beehive/trunk/wsm/test/webapps/AnnotatedAxis/happyaxis.jsp
>Thu Sep  9 12:43:48 2004
>  
>
>>@@ -0,0 +1,488 @@
>>+<html>
>>
>>+<%@ page import="java.io.InputStream,
>>
>>+                 java.io.IOException,
>>
>>+                 javax.xml.parsers.SAXParser,
>>
>>+                 javax.xml.parsers.SAXParserFactory"
>>
>>+   session="false" %>
>>
>>+ <%
>>
>>+    /*
>>
>>+ * Copyright 2002,2004 The Apache Software Foundation.
>>
>>+ * 
>>
>>+ * Licensed 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.
>>
>>+ */
>>
>>+%>
>>
>>+<head>
>>
>>+<title>Axis Happiness Page</title>
>>
>>+</head>
>>
>>+<body bgcolor='#ffffff'>
>>
>>+<%!
>>
>>+
>>
>>+    /*
>>
>>+     * Happiness tests for axis. These look at the classpath and warn
>>    
>>
>if things
>  
>
>>+     * are missing. Normally addng this much code in a JSP page is mad
>>
>>+     * but here we want to validate JSP compilation too, and have a
>>    
>>
>drop-in
>  
>
>>+     * page for easy re-use
>>
>>+     * @author Steve 'configuration problems' Loughran
>>
>>+     * @author dims
>>
>>+     * @author Brian Ewins
>>
>>+     */
>>
>>+
>>
>>+
>>
>>+    /**
>>
>>+     * Get a string providing install information.
>>
>>+     * TODO: make this platform aware and give specific hints
>>
>>+     */
>>
>>+    public String getInstallHints(HttpServletRequest request) {
>>
>>+
>>
>>+        String hint=
>>
>>+            "<B><I>Note:</I></B> On Tomcat 4.x and Java1.4, you may
>>    
>>
>need to put libraries that contain "
>  
>
>>+            +"java.* or javax.* packages into
>>    
>>
>CATALINA_HOME/common/lib"
>  
>
>>+            +"<br>jaxrpc.jar and saaj.jar are two such libraries.";
>>
>>+        return hint;
>>
>>+    }
>>
>>+
>>
>>+    /**
>>
>>+     * test for a class existing
>>
>>+     * @param classname
>>
>>+     * @return class iff present
>>
>>+     */
>>
>>+    Class classExists(String classname) {
>>
>>+        try {
>>
>>+            return Class.forName(classname);
>>
>>+        } catch (ClassNotFoundException e) {
>>
>>+            return null;
>>
>>+        }
>>
>>+    }
>>
>>+
>>
>>+    /**
>>
>>+     * test for resource on the classpath
>>
>>+     * @param resource
>>
>>+     * @return true iff present
>>
>>+     */
>>
>>+    boolean resourceExists(String resource) {
>>
>>+        boolean found;
>>
>>+        InputStream
>>    
>>
>instream=this.getClass().getResourceAsStream(resource);
>  
>
>>+        found=instream!=null;
>>
>>+        if(instream!=null) {
>>
>>+            try {
>>
>>+                instream.close();
>>
>>+            } catch (IOException e) {
>>
>>+            }
>>
>>+        }
>>
>>+        return found;
>>
>>+    }
>>
>>+
>>
>>+    /**
>>
>>+     * probe for a class, print an error message is missing
>>
>>+     * @param out stream to print stuff
>>
>>+     * @param category text like "warning" or "error"
>>
>>+     * @param classname class to look for
>>
>>+     * @param jarFile where this class comes from
>>
>>+     * @param errorText extra error text
>>
>>+     * @param homePage where to d/l the library
>>
>>+     * @return the number of missing classes
>>
>>+     * @throws IOException
>>
>>+     */
>>
>>+    int probeClass(JspWriter out,
>>
>>+                   String category,
>>
>>+                   String classname,
>>
>>+                   String jarFile,
>>
>>+                   String description,
>>
>>+                   String errorText,
>>
>>+                   String homePage) throws IOException {
>>
>>+        try {
>>
>>+            Class clazz = classExists(classname);
>>
>>+            if(clazz == null)  {
>>
>>+               String url="";
>>
>>+               if(homePage!=null) {
>>
>>+                  url="<br>  See <a
>>    
>>
>href="+homePage+">"+homePage+"</a>";
>  
>
>>+               }
>>
>>+               out.write("<p>"+category+": could not find class
>>    
>>
>"+classname
>  
>
>>+                   +" from file <b>"+jarFile
>>
>>+                   +"</b><br>  "+errorText
>>
>>+                   +url
>>
>>+                   +"<p>");
>>
>>+               return 1;
>>
>>+            } else {
>>
>>+               String location = getLocation(out, clazz);
>>
>>+               if(location == null) {
>>
>>+                  out.write("Found "+ description + " (" + classname +
>>    
>>
>")<br>");
>  
>
>>+               }
>>
>>+               else {
>>
>>+                  out.write("Found "+ description + " (" + classname +
>>    
>>
>") at " + location + "<br>");
>  
>
>>+               }
>>
>>+               return 0;
>>
>>+            }
>>
>>+        } catch(NoClassDefFoundError ncdfe) { 
>>
>>+            String url="";
>>
>>+            if(homePage!=null) {
>>
>>+                url="<br>  See <a href="+homePage+">"+homePage+"</a>";
>>
>>+            }
>>
>>+            out.write("<p>"+category+": could not find a dependency"
>>
>>+                    +" of class "+classname
>>
>>+                    +" from file <b>"+jarFile
>>
>>+                    +"</b><br> "+errorText
>>
>>+                    +url
>>
>>+                    +"<br>The root cause was: "+ncdfe.getMessage()
>>
>>+                    +"<br>This can happen e.g. if "+classname+" is in"
>>    
>>
>
>  
>
>>+                    +" the 'common' classpath, but a dependency like "
>>
>>+                    +" activation.jar is only in the webapp
>>    
>>
>classpath."
>  
>
>>+                    +"<p>");
>>
>>+            return 1;
>>
>>+        }
>>
>>+    }
>>
>>+
>>
>>+    /**
>>
>>+     * get the location of a class
>>
>>+     * @param out
>>
>>+     * @param clazz
>>
>>+     * @return the jar file or path where a class was found
>>
>>+     */
>>
>>+
>>
>>+    String getLocation(JspWriter out,
>>
>>+                       Class clazz) {
>>
>>+        try {
>>
>>+            java.net.URL url =
>>    
>>
>clazz.getProtectionDomain().getCodeSource().getLocation();
>  
>
>>+            String location = url.toString();
>>
>>+            if(location.startsWith("jar")) {
>>
>>+                url =
>>    
>>
>((java.net.JarURLConnection)url.openConnection()).getJarFileURL();
>  
>
>>+                location = url.toString();
>>
>>+            } 
>>
>>+            
>>
>>+            if(location.startsWith("file")) {
>>
>>+                java.io.File file = new java.io.File(url.getFile());
>>
>>+                return file.getAbsolutePath();
>>
>>+            } else {
>>
>>+                return url.toString();
>>
>>+            }
>>
>>+        } catch (Throwable t){
>>
>>+        }
>>
>>+        return "an unknown location";
>>
>>+    }
>>
>>+
>>
>>+    /**
>>
>>+     * a class we need if a class is missing
>>
>>+     * @param out stream to print stuff
>>
>>+     * @param classname class to look for
>>
>>+     * @param jarFile where this class comes from
>>
>>+     * @param errorText extra error text
>>
>>+     * @param homePage where to d/l the library
>>
>>+     * @throws IOException when needed
>>
>>+     * @return the number of missing libraries (0 or 1)
>>
>>+     */
>>
>>+    int needClass(JspWriter out,
>>
>>+                   String classname,
>>
>>+                   String jarFile,
>>
>>+                   String description,
>>
>>+                   String errorText,
>>
>>+                   String homePage) throws IOException {
>>
>>+        return probeClass(out,
>>
>>+                "<b>Error</b>",
>>
>>+                classname,
>>
>>+                jarFile,
>>
>>+                description,
>>
>>+                errorText,
>>
>>+                homePage);
>>
>>+    }
>>
>>+
>>
>>+    /**
>>
>>+     * print warning message if a class is missing
>>
>>+     * @param out stream to print stuff
>>
>>+     * @param classname class to look for
>>
>>+     * @param jarFile where this class comes from
>>
>>+     * @param errorText extra error text
>>
>>+     * @param homePage where to d/l the library
>>
>>+     * @throws IOException when needed
>>
>>+     * @return the number of missing libraries (0 or 1)
>>
>>+     */
>>
>>+    int wantClass(JspWriter out,
>>
>>+                   String classname,
>>
>>+                   String jarFile,
>>
>>+                   String description,
>>
>>+                   String errorText,
>>
>>+                   String homePage) throws IOException {
>>
>>+        return probeClass(out,
>>
>>+                "<b>Warning</b>",
>>
>>+                classname,
>>
>>+                jarFile,
>>
>>+                description,
>>
>>+                errorText,
>>
>>+                homePage);
>>
>>+    }
>>
>>+
>>
>>+    /**
>>
>>+     * probe for a resource existing,
>>
>>+     * @param out
>>
>>+     * @param resource
>>
>>+     * @param errorText
>>
>>+     * @throws Exception
>>
>>+     */
>>
>>+    int wantResource(JspWriter out,
>>
>>+                      String resource,
>>
>>+                      String errorText) throws Exception {
>>
>>+        if(!resourceExists(resource)) {
>>
>>+            out.write("<p><b>Warning</b>: could not find resource
>>    
>>
>"+resource
>  
>
>>+                        +"<br>"
>>
>>+                        +errorText);
>>
>>+            return 0;
>>
>>+        } else {
>>
>>+            out.write("found "+resource+"<br>");
>>
>>+            return 1;
>>
>>+        }
>>
>>+    }
>>
>>+
>>
>>+
>>
>>+    /**
>>
>>+     *  get servlet version string
>>
>>+     *
>>
>>+     */
>>
>>+
>>
>>+    public String getServletVersion() {
>>
>>+        ServletContext context=getServletConfig().getServletContext();
>>
>>+        int major = context.getMajorVersion();
>>
>>+        int minor = context.getMinorVersion();
>>
>>+        return Integer.toString(major) + '.' +
>>    
>>
>Integer.toString(minor);
>  
>
>>+    }
>>
>>+
>>
>>+
>>
>>+
>>
>>+    /**
>>
>>+     * what parser are we using.
>>
>>+     * @return the classname of the parser
>>
>>+     */
>>
>>+    private String getParserName() {
>>
>>+        SAXParser saxParser = getSAXParser();
>>
>>+        if (saxParser == null) {
>>
>>+            return "Could not create an XML Parser";
>>
>>+        }
>>
>>+
>>
>>+        // check to what is in the classname
>>
>>+        String saxParserName = saxParser.getClass().getName();
>>
>>+        return saxParserName;
>>
>>+    }
>>
>>+
>>
>>+    /**
>>
>>+     * Create a JAXP SAXParser
>>
>>+     * @return parser or null for trouble
>>
>>+     */
>>
>>+    private SAXParser getSAXParser() {
>>
>>+        SAXParserFactory saxParserFactory =
>>    
>>
>SAXParserFactory.newInstance();
>  
>
>>+        if (saxParserFactory == null) {
>>
>>+            return null;
>>
>>+        }
>>
>>+        SAXParser saxParser = null;
>>
>>+        try {
>>
>>+            saxParser = saxParserFactory.newSAXParser();
>>
>>+        } catch (Exception e) {
>>
>>+        }
>>
>>+        return saxParser;
>>
>>+    }
>>
>>+
>>
>>+    /**
>>
>>+     * get the location of the parser
>>
>>+     * @return path or null for trouble in tracking it down
>>
>>+     */
>>
>>+
>>
>>+    private String getParserLocation(JspWriter out) {
>>
>>+        SAXParser saxParser = getSAXParser();
>>
>>+        if (saxParser == null) {
>>
>>+            return null;
>>
>>+        }
>>
>>+        String location = getLocation(out,saxParser.getClass());
>>
>>+        return location;
>>
>>+    }
>>
>>+    %>
>>
>>+<html><head><title>Axis Happiness Page</title></head>
>>
>>+<body>
>>
>>+<h1>Axis Happiness Page</h1>
>>
>>+<h2>Examining webapp configuration</h2>
>>
>>+
>>
>>+<p>
>>
>>+<h3>Needed Components</h3>
>>
>>+<%
>>
>>+    int needed=0,wanted=0;
>>
>>+
>>
>>+    /**
>>
>>+     * the essentials, without these Axis is not going to work
>>
>>+     */
>>
>>+    needed=needClass(out, "javax.xml.soap.SOAPMessage",
>>
>>+            "saaj.jar",
>>
>>+            "SAAJ API",
>>
>>+            "Axis will not work",
>>
>>+            "http://xml.apache.org/axis/");
>>
>>+
>>
>>+    needed+=needClass(out, "javax.xml.rpc.Service",
>>
>>+            "jaxrpc.jar",
>>
>>+            "JAX-RPC API",
>>
>>+            "Axis will not work",
>>
>>+            "http://xml.apache.org/axis/");
>>
>>+
>>
>>+    needed+=needClass(out,
>>    
>>
>"org.apache.axis.transport.http.AxisServlet",
>  
>
>>+            "axis.jar",
>>
>>+            "Apache-Axis",
>>
>>+            "Axis will not work",
>>
>>+            "http://xml.apache.org/axis/");
>>
>>+
>>
>>+    needed+=needClass(out, "org.apache.commons.discovery.Resource",
>>
>>+            "commons-discovery.jar",
>>
>>+            "Jakarta-Commons Discovery",
>>
>>+            "Axis will not work",
>>
>>+            "http://jakarta.apache.org/commons/discovery.html");
>>
>>+
>>
>>+    needed+=needClass(out, "org.apache.commons.logging.Log",
>>
>>+            "commons-logging.jar",
>>
>>+            "Jakarta-Commons Logging",
>>
>>+            "Axis will not work",
>>
>>+            "http://jakarta.apache.org/commons/logging.html");
>>
>>+
>>
>>+    needed+=needClass(out, "org.apache.log4j.Layout",
>>
>>+            "log4j-1.2.8.jar",
>>
>>+            "Log4j",
>>
>>+            "Axis may not work",
>>
>>+            "http://jakarta.apache.org/log4j");
>>
>>+
>>
>>+    //should we search for a javax.wsdl file here, to hint that it
>>    
>>
>needs
>  
>
>>+    //to go into an approved directory? because we dont seem to need
>>    
>>
>to do that.
>  
>
>>+    needed+=needClass(out, "com.ibm.wsdl.factory.WSDLFactoryImpl",
>>
>>+            "wsdl4j.jar",
>>
>>+            "IBM's WSDL4Java",
>>
>>+            "Axis will not work",
>>
>>+            null);
>>
>>+
>>
>>+    needed+=needClass(out, "javax.xml.parsers.SAXParserFactory",
>>
>>+            "xerces.jar",
>>
>>+            "JAXP implementation",
>>
>>+            "Axis will not work",
>>
>>+            "http://xml.apache.org/xerces-j/");
>>
>>+
>>
>>+    needed+=needClass(out,"javax.activation.DataHandler",
>>
>>+            "activation.jar",
>>
>>+            "Activation API",
>>
>>+            "Axis will not work",
>>
>>+
>>    
>>
>"http://java.sun.com/products/javabeans/glasgow/jaf.html");
>  
>
>>+%>
>>
>>+<h3>Optional Components</h3>
>>
>>+<%
>>
>>+    /*
>>
>>+     * now the stuff we can live without
>>
>>+     */
>>
>>+    wanted+=wantClass(out,"javax.mail.internet.MimeMessage",
>>
>>+            "mail.jar",
>>
>>+            "Mail API",
>>
>>+            "Attachments will not work",
>>
>>+            "http://java.sun.com/products/javamail/");
>>
>>+
>>
>>+    wanted+=wantClass(out,"org.apache.xml.security.Init",
>>
>>+            "xmlsec.jar",
>>
>>+            "XML Security API",
>>
>>+            "XML Security is not supported",
>>
>>+            "http://xml.apache.org/security/");
>>
>>+
>>
>>+    wanted += wantClass(out, "javax.net.ssl.SSLSocketFactory",
>>
>>+            "jsse.jar or java1.4+ runtime",
>>
>>+            "Java Secure Socket Extension",
>>
>>+            "https is not supported",
>>
>>+            "http://java.sun.com/products/jsse/");
>>
>>+    /*
>>
>>+     * resources on the classpath path
>>
>>+     */
>>
>>+    /* broken; this is a file, not a resource
>>
>>+    wantResource(out,"/server-config.wsdd",
>>
>>+            "There is no server configuration file;"
>>
>>+            +"run AdminClient to create one");
>>
>>+    */
>>
>>+    /* add more libraries here */
>>
>>+
>>
>>+    out.write("<h3>");
>>
>>+    //is everythng we need here
>>
>>+    if(needed==0) {
>>
>>+       //yes, be happy
>>
>>+        out.write("<i>The core axis libraries are present. </i>");
>>
>>+    } else {
>>
>>+        //no, be very unhappy
>>
>>+
>>    
>>
>response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
>  
>
>>+        out.write("<i>"
>>
>>+                +needed
>>
>>+                +" core axis librar"
>>
>>+                +(needed==1?"y is":"ies are")
>>
>>+                +" missing</i>");
>>
>>+    }
>>
>>+    //now look at wanted stuff
>>
>>+    if(wanted>0) {
>>
>>+        out.write("<i>"
>>
>>+                +wanted
>>
>>+                +" optional axis librar"
>>
>>+                +(wanted==1?"y is":"ies are")
>>
>>+                +" missing</i>");
>>
>>+    } else {
>>
>>+        out.write("The optional components are present.");
>>
>>+    }
>>
>>+    out.write("</h3>");
>>
>>+    //hint if anything is missing
>>
>>+    if(needed>0 || wanted>0 ) {
>>
>>+        out.write(getInstallHints(request));
>>
>>+    }
>>
>>+
>>
>>+    %>
>>
>>+    <p>
>>
>>+    <B><I>Note:</I></B> Even if everything this page probes for is
>>    
>>
>present, there is no guarantee your
>  
>
>>+    web service will work, because there are many configuration
>>    
>>
>options that we do
>  
>
>>+    not check for. These tests are <i>necessary</i> but not
>>    
>>
><i>sufficient</i>
>  
>
>>+    <hr>
>>
>>+
>>
>>+    <h2>Examining Application Server</h2>
>>
>>+    <%
>>
>>+        String servletVersion=getServletVersion();
>>
>>+        String xmlParser=getParserName();
>>
>>+        String xmlParserLocation = getParserLocation(out);
>>
>>+
>>
>>+    %>
>>
>>+    <table>
>>
>>+        <tr><td>Servlet version</td><td><%= servletVersion
>>    
>>
>%></td></tr>
>  
>
>>+        <tr><td>XML Parser</td><td><%= xmlParser %></td></tr>
>>
>>+        <tr><td>XML ParserLocation</td><td><%= xmlParserLocation
>>    
>>
>%></td></tr>
>  
>
>>+    </table>
>>
>>+<% if(xmlParser.indexOf("crimson")>=0) { %>
>>
>>+    <p>
>>
>>+    <b>We recommend <a href="http://xml.apache.org/xerces2-j/">Xerces
>>    
>>
>2</a>
>  
>
>>+        over Crimson as the XML parser for Axis</b>
>>
>>+    </p>
>>
>>+<%    } %>
>>
>>+
>>
>>+    <h2>Examining System Properties</h2>
>>
>>+<%
>>
>>+    /** 
>>
>>+     * Dump the system properties
>>
>>+     */
>>
>>+    java.util.Enumeration e=null;
>>
>>+    try {
>>
>>+        e= System.getProperties().propertyNames();
>>
>>+    } catch (SecurityException se) {
>>
>>+    }
>>
>>+    if(e!=null) {
>>
>>+        out.write("<pre>");
>>
>>+        for (;e.hasMoreElements();) {
>>
>>+            String key = (String) e.nextElement();
>>
>>+            out.write(key + "=" + System.getProperty(key)+"\n");
>>
>>+        }
>>
>>+        out.write("</pre><p>");
>>
>>+    } else {
>>
>>+        out.write("System properties are not accessible<p>");
>>
>>+    }
>>
>>+%>
>>
>>+    <hr>
>>
>>+    Platform: <%=
>>    
>>
>getServletConfig().getServletContext().getServerInfo()  %>
>  
>
>>+</body>
>>
>>+</html>
>>
>>+
>>
>>+
>>
>>
>>Added:
>>    
>>
>incubator/beehive/trunk/wsm/test/webapps/AnnotatedAxis/index.html
>  
>
>>=======================================================================
>>    
>>
>=======
>  
>
>>--- (empty file)
>>+++ incubator/beehive/trunk/wsm/test/webapps/AnnotatedAxis/index.html
>>    
>>
>Thu Sep  9 12:43:48 2004
>  
>
>>@@ -0,0 +1,45 @@
>>+<html>
>>
>>+
>>
>>+<head>
>>
>>+<meta http-equiv="Content-Type"
>>
>>+content="text/html; charset=iso-8859-1">
>>
>>+<title>Apache-Axis</title>
>>
>>+</head>
>>
>>+
>>
>>+<body bgcolor="#FFFFFF">
>>
>>+
>>
>>+<h1 align="center">Apache-AXIS</h1>
>>
>>+
>>
>>+<p>Hello! <em>Welcome</em> to Apache-Axis -- now with
>>    
>>
>Annotations!.</p>
>  
>
>>+
>>
>>+<p>What do you want to do today?</p>
>>
>>+
>>
>>+<ul>
>>
>>+    <li><a href="happyaxis.jsp">Validate</a>
>>
>>+        the local installation's configuration<br>
>>
>>+        <i>see below if this does not work.</i></li>
>>
>>+    <li><a href="servlet/AxisServlet">View</a>
>>
>>+        the list of deployed Web services</li>
>>
>>+    <li><a href="Foo.jws?method=GoLoco&in0=99&detail=randomText">
>>
>>+        Call a local endpoint</a> by its Annotated name (or see its
>>
>>+        <a href="Foo.jws?wsdl">WSDL</a>).
>>
>>+    <li><a href="http://xml.apache.org/axis">Visit</a>
>>
>>+        the Apache-Axis Home Page</li>
>>
>>+</ul>
>>
>>+
>>
>>+This is a prototype implementation of JSR-181 intended to simply
>>    
>>
>explore how difficult it is to make the existing AXIS JWS system support
>Annotations.  This is not a complete implementation of JSR-181 but it
>does cover many of the key features.  One should also keep in mind that
>there is no intention that this code be considered as anything more than
>a somewhat functional draft whipped up in just a few days.  Comments and
>criticism are welcome especially considering that the author only
>started looking at the internals of AXIS on August 10, 2004 and may have
>misunderstood how it actually functions.
>  
>
>>+
>>
>>+
>>
>>+<h3>Validating Axis</h3>
>>
>>+
>>
>>+If the "happyaxis" validation page displays an exception instead of a
>>
>>+status page, the likely cause is that you have multiple XML parsers in
>>
>>+your classpath. Clean up your classpath by eliminating extraneous
>>    
>>
>parsers.
>  
>
>>+
>>
>>+<p>
>>
>>+If you have problems getting Axis to work, consult the Axis
>>
>>+<a
>>
>>+href="http://nagoya.apache.org/wiki/apachewiki.cgi?AxisProjectPages">W
>>    
>>
>iki</a>
>  
>
>>+and then try the Axis user mailing list.
>>
>>+</body>
>>
>>+</html>
>>
>>
>> 
>>
>>    
>>
>
>
>  
>

Mime
View raw message