[condor/f15/master] 7.6.1-0.1, update config patch and patched to include aviary and updated classads

matt matt at fedoraproject.org
Fri Apr 29 14:29:35 UTC 2011


commit 5222285071f7405f1140ef71b9a8ea3b333a5867
Author: Matthew Farrellee <matt at redhat.com>
Date:   Thu Apr 28 23:41:46 2011 -0400

    7.6.1-0.1, update config patch and patched to include aviary and updated classads

 7.6.1-catch_up.patch        |65500 +++++++++++++++++++++++++++++++++++++++++++
 condor.spec                 |  341 +-
 condor_config.generic.patch |  344 +-
 3 files changed, 66018 insertions(+), 167 deletions(-)
---
diff --git a/7.6.1-catch_up.patch b/7.6.1-catch_up.patch
new file mode 100644
index 0000000..968f032
--- /dev/null
+++ b/7.6.1-catch_up.patch
@@ -0,0 +1,65500 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index e6435f5..30ba726 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,7 +29,7 @@ set(PACKAGE "condor")
+ #   Condor and other systems parse this number. Keep it simple:
+ #   Number.Number.Number. Do nothing else.  If you need to add
+ #   more information, PRE_RELEASE is usually the right location.
+-set(VERSION "7.6.0")
++set(VERSION "7.6.1")
+ 
+ # Set PRE_RELEASE to either a string (i.e. "PRE-RELEASE-UWCS") or OFF
+ #   This shuld be "PRE-RELEASE-UWCS most of the time, and OFF when
+@@ -90,15 +90,16 @@ include (CondorStaticLib)
+ include (CondorPlugin)
+ include (CheckCXXCompilerFlag)
+ include (CheckCXXSourceCompiles)
+-include (CondorConfigure)     # will initiate the configure
+ include (AddSubdirectories)
+ include (CondorPLTest)
+ include (CondorExeTest)
+ include (CondorStdExeTest)
+ include (SrcTargetRef)
+ include (DumpLocalFlags)
++include (CondorConfigure)     # will initiate the configure
+ include (TarGz) # Must be after include(CondorPackageConfig)
+ 
++
+ if ( WINDOWS )
+ 	set_property(GLOBAL PROPERTY USE_FOLDERS ON)
+ endif ( WINDOWS )
+diff --git a/build/cmake/CondorConfigure.cmake b/build/cmake/CondorConfigure.cmake
+index ad69e0c..7cd2fcb 100644
+--- a/build/cmake/CondorConfigure.cmake
++++ b/build/cmake/CondorConfigure.cmake
+@@ -128,7 +128,15 @@ if( NOT WINDOWS)
+ 
+ 	set(HAVE_PTHREAD_H ${CMAKE_HAVE_PTHREAD_H})
+ 
+-	find_library(HAVE_DMTCP dmtcpaware HINTS /usr/local/lib/dmtcp )
++	find_library( HAVE_DMTCP dmtcpaware HINTS /usr/local/lib/dmtcp )
++	find_library( LIBRESOLV_PATH resolv )
++    if( NOT "${LIBRESOLV_PATH}" MATCHES "-NOTFOUND" )
++      set(HAVE_LIBRESOLV ON)
++    endif()
++	find_library( LIBDL_PATH resolv )
++    if( NOT "${LIBDL_PATH}" MATCHES "-NOTFOUND" )
++      set(HAVE_LIBDL ON)
++    endif()
+ 	check_library_exists(dl dlopen "" HAVE_DLOPEN)
+ 	check_symbol_exists(res_init "sys/types.h;netinet/in.h;arpa/nameser.h;resolv.h" HAVE_DECL_RES_INIT)
+ 
+@@ -198,7 +206,11 @@ if( NOT WINDOWS)
+ 
+ 	check_struct_has_member("struct statfs" f_fstyp "sys/statfs.h" HAVE_STRUCT_STATFS_F_FSTYP)
+ 	if (NOT ${OS_NAME} STREQUAL "DARWIN")
+-		check_struct_has_member("struct statfs" f_fstypename "sys/statfs.h" HAVE_STRUCT_STATFS_F_FSTYPENAME)
++  	  if( HAVE_SYS_STATFS_H )
++		check_struct_has_member("struct statfs" f_fstypename "sys/statfs.h" HAVE_STRUCT_STATFS_F_FSTYPENAME )
++	  else()
++		check_struct_has_member("struct statfs" f_fstypename "sys/mount.h" HAVE_STRUCT_STATFS_F_FSTYPENAME )
++	  endif()
+ 	endif()
+ 	check_struct_has_member("struct statfs" f_type "sys/statfs.h" HAVE_STRUCT_STATFS_F_TYPE)
+ 	check_struct_has_member("struct statvfs" f_basetype "sys/types.h;sys/statvfs.h" HAVE_STRUCT_STATVFS_F_BASETYPE)
+@@ -322,6 +334,10 @@ elseif(${OS_NAME} STREQUAL "HPUX")
+ 	set(HPUX ON)
+ 	set(DOES_SAVE_SIGSTATE ON)
+ 	set(NEEDS_64BIT_STRUCTS ON)
++elseif(${OS_NAME} STREQUAL "HPUX")
++	set(HPUX ON)
++	set(DOES_SAVE_SIGSTATE ON)
++	set(NEEDS_64BIT_STRUCTS ON)
+ endif()
+ 
+ ##################################################
+@@ -338,6 +354,7 @@ option(BUILD_TESTS "Will build internal test applications" ON)
+ option(WANT_CONTRIB "Enable quill functionality" OFF)
+ option(WANT_FULL_DEPLOYMENT "Install condors deployment scripts, libs, and includes" ON)
+ option(WANT_GLEXEC "Build and install condor glexec functionality" ON)
++option(ENABLE_JAVA_TESTS "Enable java tests" ON)
+ 
+ if (UW_BUILD OR WINDOWS)
+   option(PROPER "Try to build using native env" OFF)
+@@ -466,6 +483,7 @@ if (NOT WINDOWS)
+ 	add_subdirectory(${CONDOR_EXTERNAL_DIR}/bundles/blahp/1.16.1)
+ 	add_subdirectory(${CONDOR_EXTERNAL_DIR}/bundles/voms/1.9.10_4)
+ 	add_subdirectory(${CONDOR_EXTERNAL_DIR}/bundles/cream/1.12.1_14)
++	add_subdirectory(${CONDOR_EXTERNAL_DIR}/bundles/wso2/2.1.0)
+ 
+ 	# the following logic if for standard universe *only*
+ 	if (LINUX AND NOT CLIPPED AND GLIBC_VERSION AND NOT PROPER)
+@@ -669,7 +687,7 @@ else(MSVC)
+ 		set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--warn-once -Wl,--warn-common")
+ 	endif(LINUX)
+ 
+-	if(HAVE_DLOPEN AND NOT DARWIN)
++	if( HAVE_LIBDL AND NOT BSD_UNIX )
+ 		set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -ldl")
+ 	endif()
+ 
+@@ -678,7 +696,7 @@ else(MSVC)
+ 		set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-berok -Wl,-bstatic -lstdc++ -Wl,-bdynamic -lcfg -lodm -static-libgcc")
+ 	endif(AIX)
+ 
+-	if (NOT PROPER AND NOT AIX)
++	if ( NOT PROPER AND HAVE_LIBRESOLV )
+ 		set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lresolv")
+ 		if (NOT DARWIN)
+ 			set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lcrypt")
+@@ -818,9 +836,15 @@ dprint ( "CONDOR_PACKAGE_NAME: ${CONDOR_PACKAGE_NAME}" )
+ # is TRUE on all UNIX-like OS's, including Apple OS X and CygWin
+ dprint ( "UNIX: ${UNIX}" )
+ 
++# is TRUE on all BSD-derived UNIXen
++dprint ( "BSD_UNIX: ${BSD_UNIX}" )
++
+ # is TRUE on all UNIX-like OS's, including Apple OS X and CygWin
+ dprint ( "Linux: ${LINUX_NAME}" )
+ 
++# Print FreeBSD info
++dprint ( "FreeBSD: ${FREEBSD_MAJOR}.${FREEBSD_MINOR}" )
++
+ # is TRUE on Windows, including CygWin
+ dprint ( "WIN32: ${WIN32}" )
+ 
+diff --git a/build/cmake/CondorPackageConfig.cmake b/build/cmake/CondorPackageConfig.cmake
+index 57b2700..73f73a1 100644
+--- a/build/cmake/CondorPackageConfig.cmake
++++ b/build/cmake/CondorPackageConfig.cmake
+@@ -119,6 +119,7 @@ set( C_INCLUDE		include)
+ set( C_MAN			man)
+ set( C_SRC			src)
+ set( C_SQL			sql)
++set( C_SERVICES     services)
+ 
+ set( C_INIT			etc/init.d )
+ set( C_ETC			etc/examples )
+diff --git a/build/cmake/macros/SystemSpecificInformations.cmake b/build/cmake/macros/SystemSpecificInformations.cmake
+index 125de4b..a694153 100644
+--- a/build/cmake/macros/SystemSpecificInformations.cmake
++++ b/build/cmake/macros/SystemSpecificInformations.cmake
+@@ -227,9 +227,41 @@ if(UNIX)
+       else()
+ 	set(LINUX_NAME "NOT-FOUND")
+       endif(LINUX_NAME)
++    endif(EXISTS "/etc/issue")
++
++  elseif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
++    string(REGEX MATCH "(([0-9]+)\\.([0-9]+))-RELEASE" FREEBSD "${CMAKE_SYSTEM_VERSION}")
++    set( FREEBSD_RELEASE "${CMAKE_MATCH_1}" )
++    set( FREEBSD_MAJOR "${CMAKE_MATCH_2}" )
++    set( FREEBSD_MINOR "${CMAKE_MATCH_3}" )
++    set( FREEBSD_VERSION "${CMAKE_SYSTEM_VERSION}" )
++    set( SYSTEM_NAME "freebsd_${FREEBSD_RELEASE}" )
++    set( CONDOR_FREEBSD ON )
++    set( BSD_UNIX ON )
++    if(FREEBSD_MAJOR MATCHES "4" )
++      set( CONDOR_FREEBSD4 ON )
++    elseif(FREEBSD_MAJOR MATCHES "5" )
++      set( CONDOR_FREEBSD5 ON )
++    elseif(FREEBSD_MAJOR MATCHES "6" ) 
++      set( CONDOR_FREEBSD6 ON )
++    elseif(FREEBSD_MAJOR MATCHES "7" )
++      set( CONDOR_FREEBSD7 ON )
++    elseif(FREEBSD_MAJOR MATCHES "8" )
++      set( CONDOR_FREEBSD8 ON )
++    endif()
++    if( CMAKE_SYSTEM_PROCESSOR MATCHES "amd64" )
++      set( SYS_ARCH "x86_64")
++    elseif( CMAKE_SYSTEM_PROCESSOR MATCHES "i386" )
++      set( SYS_ARCH "x86")
++    endif( )
++    set( PLATFORM "${SYS_ARCH}_freebsd_${FREEBSD_RELEASE}")
++
++  elseif(OS_NAME MATCHES "DARWIN")
++    set( BSD_UNIX ON )
+ 
+-    endif(EXISTS "/etc/issue")      
+   endif(CMAKE_SYSTEM_NAME MATCHES "Linux")
++
+   set(SPECIFIC_SYSTEM_VERSION_NAME "${SPECIFIC_SYSTEM_VERSION_NAME}-${CMAKE_SYSTEM_PROCESSOR}")
+   set(SPECIFIC_COMPILER_NAME "")
++
+ endif(UNIX)
+diff --git a/externals/bundles/blahp/1.16.1/classads.m4 b/externals/bundles/blahp/1.16.1/classads.m4
+index 424536f..33608eb 100644
+--- a/externals/bundles/blahp/1.16.1/classads.m4
++++ b/externals/bundles/blahp/1.16.1/classads.m4
+@@ -16,7 +16,7 @@ AC_DEFUN(AC_CLASSADS,
+     AC_MSG_CHECKING([for CLASSAD installation])
+ 
+     CLASSAD_CFLAGS=""
+-    CLASSAD_LIBS="-lclassad_ns -lpcre"
++    CLASSAD_LIBS="-lclassad -lpcre"
+     CLASSAD_DL_LIBS="-lclassad_dl"
+     if test -n "$with_classads_prefix" -a "$with_classads_prefix" != "/usr" ; then
+             AC_MSG_RESULT([prefix: $with_classads_prefix])
+@@ -24,7 +24,7 @@ AC_DEFUN(AC_CLASSADS,
+             ac_classads_prefix=$with_classads_prefix
+ 
+             CLASSAD_CFLAGS="-I$with_classads_prefix/include"
+-            CLASSAD_LIBS="$with_classads_prefix/lib/libclassad_ns.a $with_classads_prefix/lib/libpcre.a"
++            CLASSAD_LIBS="$with_classads_prefix/lib/libclassad.a $with_classads_prefix/lib/libpcre.a"
+ 	    CLASSAD_DL_LIBS="-L$with_classads_prefix/lib $CLASSAD_DL_LIBS"
+     fi
+ 
+diff --git a/externals/bundles/cream/1.12.1_14/classads.m4 b/externals/bundles/cream/1.12.1_14/classads.m4
+index 424536f..33608eb 100644
+--- a/externals/bundles/cream/1.12.1_14/classads.m4
++++ b/externals/bundles/cream/1.12.1_14/classads.m4
+@@ -16,7 +16,7 @@ AC_DEFUN(AC_CLASSADS,
+     AC_MSG_CHECKING([for CLASSAD installation])
+ 
+     CLASSAD_CFLAGS=""
+-    CLASSAD_LIBS="-lclassad_ns -lpcre"
++    CLASSAD_LIBS="-lclassad -lpcre"
+     CLASSAD_DL_LIBS="-lclassad_dl"
+     if test -n "$with_classads_prefix" -a "$with_classads_prefix" != "/usr" ; then
+             AC_MSG_RESULT([prefix: $with_classads_prefix])
+@@ -24,7 +24,7 @@ AC_DEFUN(AC_CLASSADS,
+             ac_classads_prefix=$with_classads_prefix
+ 
+             CLASSAD_CFLAGS="-I$with_classads_prefix/include"
+-            CLASSAD_LIBS="$with_classads_prefix/lib/libclassad_ns.a $with_classads_prefix/lib/libpcre.a"
++            CLASSAD_LIBS="$with_classads_prefix/lib/libclassad.a $with_classads_prefix/lib/libpcre.a"
+ 	    CLASSAD_DL_LIBS="-L$with_classads_prefix/lib $CLASSAD_DL_LIBS"
+     fi
+ 
+diff --git a/externals/bundles/wso2/2.1.0/CMakeLists.txt b/externals/bundles/wso2/2.1.0/CMakeLists.txt
+new file mode 100644
+index 0000000..305dfd7
+--- /dev/null
++++ b/externals/bundles/wso2/2.1.0/CMakeLists.txt
+@@ -0,0 +1,94 @@
++ ###############################################################
++ # 
++ # Copyright 2011 Red Hat, Inc. 
++ # 
++ # 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. 
++ # 
++ ############################################################### 
++if (WANT_CONTRIB AND LINUX AND PROPER)
++    option(WITH_WSO2 "Compiling with support for WITH_WSO2" ON)
++endif()
++
++if (WITH_WSO2)
++
++	# need to embed libDir in axis2.xml
++	if ( ${SYS_ARCH} STREQUAL "X86_64" )
++		set (WS02_LIB_ROOT "/usr/lib64")
++	else()
++		set (WS02_LIB_ROOT "/usr/lib")
++	endif ()
++
++	if ( NOT PROPER )
++
++		set ( WSO2_VER wso2-2.0.1 )
++
++		#ExternalProject_Add(zlib
++		#		    PREFIX ${EXTERNAL_BUILD_PREFIX}/${WSO2_VER}
++		#		    #-- Download Step ----------
++		#			DOWNLOAD_COMMAND wget -N http://parrot.cs.wisc.edu/externals/${WSO2_VER}.tar.gz ${CMD_TERM}
++		#		    DOWNLOAD_DIR ${EXTERNAL_DL}
++		#		    URL http://parrot.cs.wisc.edu/externals/${WSO2_VER}.tar.gz
++		#		    #--Configure step ----------
++		#		    CONFIGURE_COMMAND cd ${WSO2_VER} && ./configure --prefix=${EXTERNAL_STAGE}
++		#		    #--Build Step ----------
++		#		    BUILD_COMMAND cd ${WSO2_VER} && make
++		#		    #--install Step ----------
++		#		    INSTALL_DIR ${EXTERNAL_STAGE}
++		#		    INSTALL_COMMAND cd ${WSO2_VER} && make install )
++		#
++		# Set the target dependencies which the rest of condor depends on.
++		#set(WSO2_FOUND "${EXTERNAL_STAGE}/STUFF?")
++		#append_var(CONDOR_EXTERNALS zlib)
++		#
++		#install ( FILES ${EXTERNAL_STAGE}/lib/libz.a DESTINATION ${C_LIB} RENAME libcondor_z.a)
++
++		
++		#########################################################
++		#### import from pmackinn's stuff.
++		#if ( NOT DEFINED ENV{WSFCPP_HOME} )
++		#	message( FATAL_ERROR "WSFCPP_HOME not defined for non-proper build")
++		#endif ()
++		#
++		#set ( AXIS2_LIBS -L$ENV{WSFCPP_HOME}/lib
++		#	-libaxis2_engine
++		#	-laxutil -laxis2_axiom -laxis2_parser
++		#	-lneethi -lguththila
++		#	-laxis2_http_common -laxis2_http_receiver -laxis2_http_sender
++		#	-lwso2_wsf )
++		#
++		#include_directories(
++		#		$ENV{WSFCPP_HOME}/include/axis2-1.6.0
++		#		$ENV{WSFCPP_HOME}/include/wso2-wsf-cpp
++		#		$ENV{WSFCPP_HOME}/include/axis2-1.6.0/platforms )
++		#	set(axis2_repo_loc $ENV{WSFCPP_HOME})
++	else( )
++
++		find_multiple( "axis2_engine;axutil;axis2_axiom;axis2_parser;axis2_http_common;axis2_http_receiver;axis2_http_sender;neethi;guththila;wso2_wsf" WSO2_FOUND )
++		append_var (WSO2_INCLUDES "/usr/include/axis2-1.6.0;/usr/include/wso2-wsf-cpp;/usr/include/axis2-1.6.0/platforms")
++
++		install (CODE "execute_process(COMMAND echo Local testing instructions )" )
++		install (CODE "execute_process(COMMAND echo set WSFCPP_HOME to \$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${_INSTALL_LOC}axis2.xml)" )
++		install (CODE "execute_process(COMMAND echo change the servicesDir parameter in axis2.xml to \$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${_INSTALL_LOC}services)" )
++
++	endif( NOT PROPER )
++
++endif(WITH_WSO2)
++
++if (WSO2_FOUND)
++	message (STATUS "external configured (WSO2_FOUND=${WSO2_FOUND})")
++	set( WSO2_FOUND ${WSO2_FOUND} PARENT_SCOPE )
++	set( HAVE_EXT_WSO2 ON PARENT_SCOPE )
++	set( WS02_LIB_ROOT ${WS02_LIB_ROOT} PARENT_SCOPE )
++else()
++	message (STATUS "external skipped (wso2)")
++endif()
+diff --git a/nmi_tools/glue/SubmitInfo.pm b/nmi_tools/glue/SubmitInfo.pm
+index 62a03f8..c510ea6 100755
+--- a/nmi_tools/glue/SubmitInfo.pm
++++ b/nmi_tools/glue/SubmitInfo.pm
+@@ -59,9 +59,10 @@ our %build_and_test_sets = (
+ 		'x86_64_rhap_5.3-updated',
+ 		'x86_64_opensuse_11.3-updated',
+ 		'x86_64_opensuse_11.4-updated',
+-		'x86_64_sol_5.10',
+-		'x86_64_sol_5.11',
+ 		'x86_64_fedora_12-updated',
++		'x86_freebsd_7.4',
++		'x86_64_freebsd_8.2',
++		'x86_64_sol_5.11',
+ 	],
+ 
+         # This is a placeholder that is intended to remain empty in V7_6-branch.
+@@ -311,6 +312,55 @@ our %submit_info = (
+ 		},
+ 	},
+ 
++	##########################################################################
++	# Platform RHEL 6 on x86
++	##########################################################################
++	'x86_rhap_6.0'	=> {
++		'build' => {
++			'configure_args' => { @default_build_configure_args,
++				# Turn this back on when ready
++				# '-DCLIPPED:BOOL=OFF' => undef,
++			 },
++			'prereqs'	=> [ @default_prereqs ],
++			'xtests'	=> undef,
++		},
++
++		'test' => {
++			'configure_args' => { @default_test_configure_args },
++			'prereqs'	=> [ @default_prereqs, 'java-1.4.2_05' ],
++			'testclass'	=> [ @default_testclass ],
++		},
++	},
++
++	##########################################################################
++	# Platform RHEL 6 on x86. This one is continuously updated by the batlab.
++	##########################################################################
++	'x86_rhap_6.0-updated'	=> 'x86_rhap_6.0',
++
++	##########################################################################
++	# Platform RHEL 6 on x86_64
++	##########################################################################
++	'x86_64_rhap_6.0'	=> {
++		'build' => {
++			'configure_args' => { @default_build_configure_args,
++				# Turn this back on when ready
++				# '-DCLIPPED:BOOL=OFF' => undef,
++			 },
++			'prereqs'	=> [ @default_prereqs ],
++			'xtests'	=> undef,
++		},
++
++		'test' => {
++			'configure_args' => { @default_test_configure_args },
++			'prereqs'	=> [ @default_prereqs, 'java-1.4.2_05' ],
++			'testclass'	=> [ @default_testclass ],
++		},
++	},
++
++	##########################################################################
++	# Platform RHEL 6 on x86_64. This one is continuously updated by the batlab.
++	##########################################################################
++	'x86_64_rhap_6.0-updated'	=> 'x86_64_rhap_6.0',
+ 
+ 	##########################################################################
+ 	# Platform RHEL 5 on x86_64
+@@ -324,7 +374,8 @@ our %submit_info = (
+ 			'xtests'	=> [ 
+ 				'x86_64_fedora_13', 'x86_64_rhap_5.2',
+ 				'x86_64_fedora_12', 'x86_64_fedora_12-updated', 
+-				'x86_64_fedora_13-updated' ],
++				'x86_64_fedora_13-updated',
++				'x86_64_rhap_6.0-updated' ],
+ 		},
+ 
+ 		'test' => {
+@@ -866,6 +917,56 @@ our %submit_info = (
+ 	'x86_64_opensuse_11.3-updated'		=> 'x86_64_opensuse_11.3',
+ 	'x86_64_opensuse_11.4'				=> 'x86_64_opensuse_11.3',
+ 	'x86_64_opensuse_11.4-updated'		=> 'x86_64_opensuse_11.4',
++
++
++	##########################################################################
++	# Platform FreeBSD 7.4 on x86
++	##########################################################################
++	'x86_freebsd_7.4'		=> {
++		'build' => {
++			'configure_args' => { @minimal_build_configure_args,
++				'-DWITHOUT_SOAP_TEST:BOOL=ON' => undef,
++				'-DWITHOUT_AMAZON_TEST:BOOL=ON' => undef,
++				'-DENABLE_JAVA_TESTS:BOOL=OFF' => undef,
++				'-DWITH_CURL:BOOL=OFF' => undef,
++				'-DWITH_EXPAT:BOOL=ON' => undef,
++				'-DWITH_LIBVIRT:BOOL=OFF' => undef,
++				'-DWITH_LIBXML2:BOOL=ON' => undef,
++			},
++			'prereqs'	=> [ 'tar-1.14',
++							 'patch-2.6.1',
++							 'cmake-2.8.3',
++							 'flex-2.5.4a',
++							 'make-3.80',
++							 'byacc-1.9',
++							 'bison-1.25',
++							 'wget-1.9.1',
++							 'm4-1.4.1',
++				],
++			'xtests'	=> undef,
++		},
++
++		'test' => {
++			'configure_args' => {
++				@default_test_configure_args
++				
++			},
++			'prereqs'	=> [ 'tar-1.14',
++							 'patch-2.6.1',
++							 'cmake-2.8.3',
++							 'flex-2.5.4a',
++							 'make-3.80',
++							 'byacc-1.9',
++							 'bison-1.25',
++							 'wget-1.9.1',
++							 'm4-1.4.1',
++				],
++			'testclass'	=> [ @default_testclass ],
++		},
++	},
++	'x86_64_freebsd_7.4'		=> 'x86_freebsd_7.4',
++	'x86_freebsd_8.2'			=> 'x86_freebsd_7.4',
++	'x86_64_freebsd_8.2'		=> 'x86_freebsd_7.4',
+ );
+ 
+ while( 1 ) {
+@@ -1132,3 +1233,8 @@ if (!defined($main::slaved_module)) {
+ }
+ 
+ 1;
++
++### Local Variables: ***
++### mode:perl ***
++### tab-width: 4  ***
++### End: ***
+diff --git a/src/classad/CHANGELOG b/src/classad/CHANGELOG
+index e577a9e..f36b747 100644
+--- a/src/classad/CHANGELOG
++++ b/src/classad/CHANGELOG
+@@ -1,4 +1,4 @@
+-Changes for version 1.0.10 (Released ????-??-??)
++Changes for version 1.0.10 (Released 2011-04-08)
+ * Fix infinite loop and bad iterator comparison in FunctionCall::SameAs().
+ * Fix memory leak in FunctionCall::eval().
+ * Fix ClassAd::GetInternalReferences() and ClassAd::GetExternalReferences()
+diff --git a/src/classad/CMakeLists.txt b/src/classad/CMakeLists.txt
+index 293ecf4..daf0866 100644
+--- a/src/classad/CMakeLists.txt
++++ b/src/classad/CMakeLists.txt
+@@ -15,8 +15,9 @@
+  # limitations under the License. 
+  # 
+  ############################################################### 
++include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+ 
+-add_definitions(-DCLASSAD_DISTRIBUTION -DWANT_CLASSAD_NAMESPACE=1 -DDISABLE_DLOPEN_CHECK )
++add_definitions(-DCLASSAD_DISTRIBUTION -DWANT_CLASSAD_NAMESPACE=1 )
+ 
+ # disable PCRE build unless dep added to externals.
+ if(PCRE_FOUND)
+@@ -25,41 +26,70 @@ else()
+ 	add_definitions(-DUSE_POSIX_REGEX) 
+ endif(PCRE_FOUND)
+ 
+-# in order to update configure
++if (HAVE_DLOPEN)
++	add_definitions(-DHAVE_DLOPEN)
++endif()
++
++if (HAVE_DLFCN_H)
++	add_definitions(-DHAVE_DLFCN_H)
++endif(HAVE_DLFCN_H)
++
++if (HAVE_LIBDL)
++	set(DL_FOUND -ldl)
++endif(HAVE_LIBDL)
++
+ if (NOT WINDOWS)
+ 
+-  # because of the external dependencies on classads we need to be careful to make it look like a normal install
+-  file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/classad DESTINATION ${EXTERNAL_STAGE}/include )
++  condor_selective_glob("attrrefs.*;classad.*;collection.*;collectionBase.*;debug.*;exprList.*;exprTree.*;fnCall.*;indexfile.*;lexer.*;lexerSource.*;literals.*;matchClassad.*;operators.*;query.*;sink.*;source.*;transaction.*;util.*;value.*;view.*;xmlLexer.*;xmlSink.*;xmlSource.*;cclassad.*;common.*" ClassadSrcs)
++  add_library( classads STATIC ${ClassadSrcs} )    # the one which all of condor depends upon
+ 
+-  if (WANT_FULL_DEPLOYMENT)
+-	install( DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/classad DESTINATION ${C_INCLUDE} )
++  if (LINUX)  
++  	add_library( classad SHARED ${ClassadSrcs} )   # for distribution at this point may swap to depend at a future date.
++	set_target_properties( classad PROPERTIES VERSION 1.1.0 SOVERSION 1 )
++	install( TARGETS classad DESTINATION ${C_LIB} )
+   endif()
+ 
+-  condor_selective_glob("attrrefs.*;classad.*;collection.*;collectionBase.*;debug.*;exprList.*;exprTree.*;fnCall.*;indexfile.*;lexer.*;lexerSource.*;literals.*;matchClassad.*;operators.*;query.*;sink.*;source.*;transaction.*;util.*;value.*;view.*;xmlLexer.*;xmlSink.*;xmlSource.*;cclassad.*;common.*" ClassadSrcs)
++  set (CLASSADS_FOUND classads)
+ 
+-  add_library( classads STATIC ${ClassadSrcs} )
+-  set_target_properties( classads
+-	PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${EXTERNAL_STAGE}/lib 
+-	LIBRARY_OUTPUT_DIRECTORY ${EXTERNAL_STAGE}/lib
+-	RUNTIME_OUTPUT_DIRECTORY ${EXTERNAL_STAGE}/lib
+-	OUTPUT_NAME classad_ns)
++  ###### Test executables
++  condor_exe_test( classad_unit_tester "classad_unit_tester.cpp" "${CLASSADS_FOUND};${PCRE_FOUND};${DL_FOUND}")
++  condor_exe( classad_functional_tester "classad_functional_tester.cpp" ${C_BIN} "${CLASSADS_FOUND};${PCRE_FOUND};${DL_FOUND}" OFF)
++  condor_exe( classad_version "classad_version.cpp" ${C_BIN} "${CLASSADS_FOUND};${PCRE_FOUND};${DL_FOUND}" OFF)
++  
++  ###### Install elements with our distribution
++  install( TARGETS classads DESTINATION ${C_LIB} )
++  install( DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/classad DESTINATION ${C_INCLUDE} )
+ 
+ else()
+ 	
+-	# I should probably just add all and subtract tests.
++	# windows specific configuration.
+ 	condor_selective_glob("attrrefs.cpp;common.cpp;collection*;fnCall.cpp;expr*;indexfile*;lexer*;literals.cpp;matchClassad.cpp;classad.cpp;debug.cpp;operators.cpp;util.cpp;value.cpp;query.cpp;sink.cpp;source.cpp;transaction.cpp;view.cpp;xml*" ClassadSrcs)
+ 	add_library( classads STATIC ${ClassadSrcs} )
+ 	set_property( TARGET classads PROPERTY FOLDER "libraries" )
++    set (CLASSADS_FOUND classads)
+ 
+ endif()
+ 
+-set( CLASSADS_FOUND classads )
++# standard output message used to slog users.  
++message (STATUS "configured (CLASSADS_FOUND= ${CLASSADS_FOUND})")
++append_var (CONDOR_EXTERNALS ${CLASSADS_FOUND})
++set( CLASSADS_FOUND ${CLASSADS_FOUND} PARENT_SCOPE )
++set( HAVE_EXT_CLASSADS ON PARENT_SCOPE )
+ 
++# finally add dependencies if there are any
+ if (NOT PROPER)
+-  add_dependencies( classads pcre )
++  add_dependencies( ${CLASSADS_FOUND} pcre )
++
++  if (NOT WINDOWS)
++  ############################################################################## 
++  # the only reason this exists is b/c our externals depend on it  
++  file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/classad DESTINATION ${EXTERNAL_STAGE}/include )
++  set_target_properties( classads
++	PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${EXTERNAL_STAGE}/lib 
++	LIBRARY_OUTPUT_DIRECTORY ${EXTERNAL_STAGE}/lib
++	RUNTIME_OUTPUT_DIRECTORY ${EXTERNAL_STAGE}/lib
++	OUTPUT_NAME classad)
++  endif()
++
+ endif(NOT PROPER)
+ 
+-message (STATUS "external configured (CLASSADS_FOUND=${CLASSADS_FOUND})")
+-set( CLASSADS_FOUND ${CLASSADS_FOUND} PARENT_SCOPE )
+-set( HAVE_EXT_CLASSADS ON PARENT_SCOPE )
+-append_var (CONDOR_EXTERNALS classads)
+diff --git a/src/classad/Doxyfile b/src/classad/Doxyfile
+index 7d61a84..df632c4 100644
+--- a/src/classad/Doxyfile
++++ b/src/classad/Doxyfile
+@@ -31,7 +31,7 @@ PROJECT_NAME           = ClassAds
+ # This could be handy for archiving the generated documentation or
+ # if some version control system is used.
+ 
+-PROJECT_NUMBER         = 1.0.9
++PROJECT_NUMBER         = 1.0.10
+ 
+ # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+ # base path where the generated documentation will be put.
+diff --git a/src/classad/Makefile.am.m4 b/src/classad/Makefile.am.m4
+index 03121c8..b85cb17 100644
+--- a/src/classad/Makefile.am.m4
++++ b/src/classad/Makefile.am.m4
+@@ -152,8 +152,8 @@ libclassad_la_SOURCES = \
+ 	sink.cpp source.cpp transaction.cpp util.cpp value.cpp view.cpp xmlLexer.cpp	\
+ 	xmlSink.cpp xmlSource.cpp cclassad.cpp $(_libclassad_la_SOURCES)
+ 
+-libclassad_la_LDFLAGS = -version-info 1:0:1
+-libclassad_ns_la_LDFLAGS = -version-info 1:0:1
++libclassad_la_LDFLAGS = -version-info 1:2:0
++libclassad_ns_la_LDFLAGS = -version-info 1:2:0
+ 
+ MF_IF_NAMESPACE([libclassad_ns_la_SOURCES = $(libclassad_la_SOURCES)
+    libclassad_ns_la_CXXFLAGS = $(NAMESPACE)])
+diff --git a/src/classad/README b/src/classad/README
+index bce8cd7..0e81df6 100644
+--- a/src/classad/README
++++ b/src/classad/README
+@@ -1,4 +1,4 @@
+-This is version 1.0.9 of the Condor Classad library, released on 2010-08-23.
++This is version 1.0.10 of the Condor Classad library, released on 2011-04-08.
+ 
+ ===== What is it? =====
+ 
+diff --git a/src/classad/README.packaging b/src/classad/README.packaging
+index 7e107a7..9dd1c91 100644
+--- a/src/classad/README.packaging
++++ b/src/classad/README.packaging
+@@ -15,11 +15,15 @@ Update the shared library version number in src/classad/Makefile.am.m4.
+ Look for these two lines:
+     libclassad_la_LDFLAGS = -version-info 1:0:0
+     libclassad_ns_la_LDFLAGS = -version-info 1:0:0
+-If the ABI has changed, you should increment the first number and set the 
+-second and third ones to zero. If the ABI hasn't changed, then increment 
+-the second or third number. See 
++
++If the ABI has changed (such that programs linked against an older 
++version won't work with the new version), you should increment the first 
++number and set the second and third ones to zero. If the ABI has only been 
++expanded (new symbols added), increment the first and third numbers, and 
++set the second one to zero. If the ABI hasn't changed, then increment the 
++second number. See 
+ http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html#AEN135  
+-for examples of things that will change the ABI.
++for examples of things that will change the ABI incompatibly.
+ This ABI compliance checker program may be useful: 
+ http://ispras.linuxfoundation.org/index.php/ABI_compliance_checker
+ 
+diff --git a/src/classad/TAGS b/src/classad/TAGS
+index 659cb34..a0db662 100644
+--- a/src/classad/TAGS
++++ b/src/classad/TAGS
+@@ -14,3 +14,4 @@ classads_1_0_6
+ classads_1_0_7
+ classads_1_0_8
+ classads_1_0_9
++classads_1_0_10
+diff --git a/src/classad/classad.cpp b/src/classad/classad.cpp
+index dfb0435..f78ecc7 100644
+--- a/src/classad/classad.cpp
++++ b/src/classad/classad.cpp
+@@ -44,13 +44,13 @@ void ClassAdLibraryVersion(int &major, int &minor, int &patch)
+ {
+     major = 1;
+     minor = 0;
+-    patch = 9;
++    patch = 10;
+     return;
+ }
+ 
+ void ClassAdLibraryVersion(string &version_string)
+ {
+-    version_string = "1.0.9";
++    version_string = "1.0.10";
+     return;
+ }
+ 
+@@ -968,7 +968,15 @@ _GetExternalReferences( const ExprTree *expr, ClassAd *ad,
+                         refs.insert( fullName );
+                         return true;
+                     } else {
+-                        return( _GetExternalReferences( tree, ad, state, refs, fullNames ));
++                        if( state.depth_remaining <= 0 ) {
++                            return false;
++                        }
++                        state.depth_remaining--;
++
++                        bool ret = _GetExternalReferences( tree, ad, state, refs, fullNames );
++
++                        state.depth_remaining++;
++                        return ret;
+                     }
+                 }
+                     // otherwise, if the tree didn't evaluate to a classad,
+@@ -992,7 +1000,15 @@ _GetExternalReferences( const ExprTree *expr, ClassAd *ad,
+ 
+                 case EVAL_OK: {
+                         // attr is internal; find external refs in result
+-					bool rval=_GetExternalReferences(result,ad,state,refs,fullNames);
++                    if( state.depth_remaining <= 0 ) {
++                        state.curAd = curAd;
++                        return false;
++                    }
++                    state.depth_remaining--;
++
++                    bool rval=_GetExternalReferences(result,ad,state,refs,fullNames);
++
++                    state.depth_remaining++;
+ 					state.curAd = curAd;
+ 					return( rval );
+ 				}
+@@ -1043,7 +1059,15 @@ _GetExternalReferences( const ExprTree *expr, ClassAd *ad,
+ 
+             ((const ClassAd*)expr)->GetComponents( attrs );
+             for( itr = attrs.begin( ); itr != attrs.end( ); itr++ ) {
+-                if( !_GetExternalReferences( itr->second, ad, state, refs, fullNames )) {
++                if( state.depth_remaining <= 0 ) {
++                    return false;
++                }
++                state.depth_remaining--;
++
++                bool ret = _GetExternalReferences( itr->second, ad, state, refs, fullNames );
++
++                state.depth_remaining++;
++                if( !ret ) {
+ 					return( false );
+ 				}
+             }
+@@ -1058,7 +1082,15 @@ _GetExternalReferences( const ExprTree *expr, ClassAd *ad,
+ 
+             ((const ExprList*)expr)->GetComponents( exprs );
+             for( itr = exprs.begin( ); itr != exprs.end( ); itr++ ) {
+-                if( !_GetExternalReferences( *itr, ad, state, refs, fullNames ) ) {
++                if( state.depth_remaining <= 0 ) {
++                    return false;
++                }
++                state.depth_remaining--;
++
++                bool ret = _GetExternalReferences( *itr, ad, state, refs, fullNames );
++
++                state.depth_remaining++;
++                if( !ret ) {
+ 					return( false );
+ 				}
+             }
+@@ -1342,7 +1374,15 @@ _GetInternalReferences( const ExprTree *expr, ClassAd *ad,
+                 case EVAL_OK:   {
+                     //whoo, it's internal.
+                     refs.insert(attr);
++                    if( state.depth_remaining <= 0 ) {
++                        state.curAd = curAd;
++                        return false;
++                    }
++                    state.depth_remaining--;
++
+                     bool rval =_GetInternalReferences(result, ad, state, refs, fullNames);
++
++                    state.depth_remaining++;
+                     //TODO: Does this actually matter?
+                     state.curAd = curAd;
+                     return rval;
+@@ -1405,7 +1445,15 @@ _GetInternalReferences( const ExprTree *expr, ClassAd *ad,
+ 
+             ((const ClassAd*)expr)->GetComponents(attrs);
+             for(itr = attrs.begin(); itr != attrs.end(); itr++){
+-                if( !_GetInternalReferences(itr->second, ad, state, refs, fullNames)) {
++                if( state.depth_remaining <= 0 ) {
++                    return false;
++                }
++                state.depth_remaining--;
++
++                bool ret = _GetInternalReferences(itr->second, ad, state, refs, fullNames);
++
++                state.depth_remaining++;
++                if( !ret ) {
+                     return false;
+                 }
+             }
+@@ -1420,7 +1468,15 @@ _GetInternalReferences( const ExprTree *expr, ClassAd *ad,
+ 
+             ((const ExprList*)expr)->GetComponents(exprs);
+             for(itr = exprs.begin(); itr != exprs.end(); itr++){
+-                if( !_GetInternalReferences(*itr, ad, state, refs, fullNames) ) {
++                if( state.depth_remaining <= 0 ) {
++                    return false;
++                }
++                state.depth_remaining--;
++
++                bool ret = _GetInternalReferences(*itr, ad, state, refs, fullNames);
++
++                state.depth_remaining++;
++                if( !ret ) {
+                     return false;
+                 }
+             }
+diff --git a/src/classad/classad/common.h b/src/classad/classad/common.h
+index f62a65c..660558b 100644
+--- a/src/classad/classad/common.h
++++ b/src/classad/classad/common.h
+@@ -48,6 +48,10 @@
+ #define _STLP_NEW_PLATFORM_SDK
+ #define _STLP_NO_OWN_IOSTREAMS 1
+ 
++// Disable warnings about calling posix functions like open()
++// instead of _open()
++#define _CRT_NONSTDC_NO_WARNINGS
++
+ // Disable warnings about possible loss of data, since "we know what
+ // we are doing" and fixing them correctly would require too much 
+ // time from one of us. (Maybe this should be a student exercise.)
+@@ -71,6 +75,7 @@
+ 
+ 
+ #ifdef WIN32
++
+ 	// special definitions we need for Windows
+ #ifndef DLL_IMPORT_MAGIC
+ #define DLL_IMPORT_MAGIC __declspec(dllimport)
+@@ -79,9 +84,6 @@
+ #include <float.h>
+ #include <io.h>
+ #define fsync _commit
+-#ifndef open
+-#define open _open
+-#endif
+ #define strcasecmp _stricmp
+ #ifndef rint
+ #define rint(num) floor(num + .5)
+@@ -89,9 +91,7 @@
+ #define isnan _isnan
+ 	// isinf() defined in util.h
+ 
+-#ifdef WIN32
+ #include <hash_map>
+-#endif
+ 
+ #define snprintf _snprintf
+ 
+@@ -102,6 +102,7 @@
+ #pragma warning( disable : 4800 )  
+ 	// Disable warnings about truncated debug identifiers
+ #pragma warning( disable : 4786 )
++
+ #endif // WIN32
+ 
+ 
+diff --git a/src/classad/classad_functional_tester.cpp b/src/classad/classad_functional_tester.cpp
+index 12305cf..84d7cb6 100644
+--- a/src/classad/classad_functional_tester.cpp
++++ b/src/classad/classad_functional_tester.cpp
+@@ -21,7 +21,6 @@
+ #include "classad/classad_distribution.h"
+ #include "classad/lexerSource.h"
+ #include "classad/xmlSink.h"
+-#undef open // we don't want the open method of basic_ofstream to end up being called _open...
+ #include <fstream>
+ #include <iostream>
+ #include <ctype.h>
+diff --git a/src/classad/do_packaging b/src/classad/do_packaging
+index 197ec6b..531c7dd 100755
+--- a/src/classad/do_packaging
++++ b/src/classad/do_packaging
+@@ -1,6 +1,6 @@
+ #!/bin/sh
+ 
+-DIST_VERSION=1.0.9
++DIST_VERSION=1.0.10
+ DISTRIBUTION_DIR=classads-${DIST_VERSION}
+ 
+ EXCLUDE_LIST="do_packaging CMakeLists.txt README.packaging TAGS TODO man_cache_test.cpp test_classads.cpp"
+diff --git a/src/classad/lexerSource.cpp b/src/classad/lexerSource.cpp
+index bb08f9e..1cbc450 100644
+--- a/src/classad/lexerSource.cpp
++++ b/src/classad/lexerSource.cpp
+@@ -112,7 +112,7 @@ InputStreamLexerSource::ReadCharacter(void)
+ 	char real_character;
+ 	int  character;
+ 
+-	if (_stream != NULL && !_stream->eof()) {
++	if (_stream != NULL && _stream->good()) {
+ 		_stream->get(real_character);
+ 		character = (unsigned char)real_character;
+ 	} else {
+diff --git a/src/classad/util.cpp b/src/classad/util.cpp
+index 2e06049..7f1f981 100644
+--- a/src/classad/util.cpp
++++ b/src/classad/util.cpp
+@@ -200,7 +200,7 @@ void convert_escapes(string &text, bool &validStr)
+ 						sscanf(octal, "%o", &number);
+ 						new_char = number;
+ 					} else {
+-						new_char = text[source];
++						number = new_char = text[source];
+ 					}
+ 					if(number == 0) { // "\\0" is an invalid substring within a string literal
+ 					  validStr = false;
+diff --git a/src/classad_analysis/boolExpr.cpp b/src/classad_analysis/boolExpr.cpp
+index e08ecb4..fc4332b 100644
+--- a/src/classad_analysis/boolExpr.cpp
++++ b/src/classad_analysis/boolExpr.cpp
+@@ -67,7 +67,9 @@ ExprToMultiProfile( classad::ExprTree *expr, MultiProfile *&mp )
+ 
+ 		kind = currentTree->GetKind( );
+ 			
+-		if( kind == classad::ExprTree::ATTRREF_NODE ) {
++		if( kind == classad::ExprTree::ATTRREF_NODE ||
++			kind == classad::ExprTree::FN_CALL_NODE )
++		{
+ 			atLeftMostProfile = true;
+ 			continue;
+ 		}
+@@ -172,7 +174,9 @@ ExprToProfile( classad::ExprTree *expr, Profile *&p )
+ 
+ 		kind = currentTree->GetKind( );
+ 
+-		if( kind == classad::ExprTree::ATTRREF_NODE ) {
++		if( kind == classad::ExprTree::ATTRREF_NODE ||
++			kind == classad::ExprTree::FN_CALL_NODE )
++		{
+ 			atLeftMostCondition = true;
+ 			continue;
+ 		}
+@@ -269,6 +273,14 @@ ExprToCondition( classad::ExprTree *expr, Condition *&c )
+ 		return true;
+ 	}
+ 
++	if( kind == classad::ExprTree::FN_CALL_NODE ) {
++		if( !c->InitComplex( expr->Copy( ) ) ) {
++  				cerr << "error: problem with Condition::InitComplex" << endl;
++  				return false;
++		}
++		return true;
++	}
++
+ 	if( kind != classad::ExprTree::OP_NODE ) {
+ 		cerr << "error: no operator/attribute found" << endl;
+ 			// error: no operator/attribute  found;
+diff --git a/src/condor_c-gahp/cgahp_common.cpp b/src/condor_c-gahp/cgahp_common.cpp
+index b9f9c46..a13430f 100644
+--- a/src/condor_c-gahp/cgahp_common.cpp
++++ b/src/condor_c-gahp/cgahp_common.cpp
+@@ -36,6 +36,8 @@ parse_gahp_command (const char* raw, Gahp_Args* args) {
+ 	int len=strlen(raw);
+ 
+ 	char * buff = (char*)malloc(len+1);
++    ASSERT(buff);
++
+ 	int buff_len = 0;
+ 
+ 	for (int i = 0; i<len; i++) {
+diff --git a/src/condor_ckpt/CMakeLists.txt b/src/condor_ckpt/CMakeLists.txt
+index 9aab726..2b2ef62 100644
+--- a/src/condor_ckpt/CMakeLists.txt
++++ b/src/condor_ckpt/CMakeLists.txt
+@@ -37,18 +37,19 @@ if( STD_UNIVERSE )
+ 	###########################################################################
+ 	add_definitions( ${STD_U_C_FLAGS} -DFILE_TABLE -DIN_CKPT_LIB)
+ 	include_directories(${CONDOR_SOURCE_DIR}/src/condor_ckpt)
+-	condor_selective_glob("*file*;signals*;image*;machdep.LINUX.cpp;tmp_*;syscall_*;fake_*;condor_error*;eprintf*;shared_*;malloc-user*;gto*;maps*" CommonCkptSrcs )
+-
+-	# from what I can tell this doesn't even work.
+-	#if (DOES_COMPRESS_CKPT)
+-	#	add_definitions(-DCOMPRESS_CKPT -DMORECORE=condor_morecore -DHAVE_MMAP=0 -Dmalloc_getpagesize=8192)
+-	#	condor_selective_glob("malloc-condor.cpp;malloc.cpp" CompressSrcs)
+-	#endif(DOES_COMPRESS_CKPT)
++	condor_selective_glob("*file*;signals*;machdep.LINUX.cpp;tmp_*;syscall_*;fake_*;condor_error*;eprintf*;shared_*;malloc-user*;gto*;maps*" CommonCkptSrcs )
+ 
+ 	# we create a local lib, but it's never actually used
+ 	# instead condorsyscall will rip out the target refs.
+ 	#condor_static_lib( ckpt "${CommonCkptSrcs};${CompressSrcs}")
+-	add_library(ckpt STATIC EXCLUDE_FROM_ALL ${CommonCkptSrcs};${CompressSrcs})
++	add_library(ckpt STATIC EXCLUDE_FROM_ALL ${CMAKE_CURRENT_SOURCE_DIR}/image.cpp;${CommonCkptSrcs})
+ 	add_dependencies( ckpt syscall_numbers )
+ 
++	if (DOES_COMPRESS_CKPT)
++
++		add_library(zckpt STATIC EXCLUDE_FROM_ALL ${CMAKE_CURRENT_SOURCE_DIR}/zimage.cpp;${CMAKE_CURRENT_SOURCE_DIR}/malloc-condor.c;${CommonCkptSrcs})
++
++		add_dependencies( zckpt syscall_numbers )
++	endif(DOES_COMPRESS_CKPT)
++
+ endif(STD_UNIVERSE)
+diff --git a/src/condor_ckpt/image.cpp b/src/condor_ckpt/image.cpp
+index c7cc873..39817f4 100644
+--- a/src/condor_ckpt/image.cpp
++++ b/src/condor_ckpt/image.cpp
+@@ -32,6 +32,19 @@
+ #include "subsystem_info.h"
+ #include "gtodc.h"
+ 
++#if defined(COMPRESS_CKPT)
++/* This structure represents an alternate heap, controlled by a specially
++	created malloc, and used by zlib for the checkpoint compression feature.
++*/
++struct alternate_memory_heap {
++	void *begin;
++	void *corestart;
++	void **coreend;
++	void **segend;
++	int pagesize;
++};
++#endif
++
+ extern int _condor_in_file_stream;
+ 
+ const int KILO = 1024;
+@@ -49,6 +62,8 @@ extern "C" void _condor_restore_sigstates();
+ #if defined(COMPRESS_CKPT)
+ #include "zlib.h"
+ extern "C" {
++	void display_alternate_memory_heap(int dlevel);
++	int condor_malloc_getpagesize(void); // in malloc-condor.c
+ 	int condor_malloc_init_size();
+ 	void condor_malloc_init(void *start);
+ 	char *condor_malloc(size_t);
+@@ -85,6 +100,7 @@ extern "C" void _install_signal_handler( int sig, SIG_HANDLER handler );
+ extern "C" int open_ckpt_file( const char *name, int flags, size_t n_bytes );
+ extern "C" int get_ckpt_mode( int sig );
+ extern "C" int get_ckpt_speed( );
++static void sleep_syscall(int seconds);
+ 
+ Image MyImage;
+ static jmp_buf Env;
+@@ -98,6 +114,13 @@ unsigned int _condor_numrestarts = 0;
+ int condor_compress_ckpt = 1; // compression off(0) or on(1)
+ int condor_slow_ckpt = 0;
+ 
++#if defined(COMPRESS_CKPT)
++// There is only ONE alternate heap. This global variable gets saved and
++// restored across checkpoints. This means that the mmap'ed heap during
++// checkpoint will be known to be put into the right place upon restore.
++static struct alternate_memory_heap amh = { NULL, NULL, NULL, NULL, -1 };
++#endif
++
+ /* these are the remote system calls we use in this file */
+ extern "C" int REMOTE_CONDOR_send_rusage(struct rusage *use_p);
+ 
+@@ -148,71 +171,225 @@ void *condor_map_seg(void *base, size_t size)
+ 	return base;
+ }
+ 
++void display_alternate_memory_heap(int dlevel)
++{
++	dprintf(dlevel,
++		"Alternate Memory Heap: {begin=%p, corestart=%p, coreend=%p, segend=%p, *coreend=%p, *segend=%p, pagesize=%d}\n",
++		amh.begin, amh.corestart, amh.coreend, amh.segend, 
++		amh.coreend!=NULL?*amh.coreend:NULL,
++		amh.segend!=NULL?*amh.segend:NULL,
++		amh.pagesize);
++}
++
+ // TODO: deallocate segments on negative incr
+ void *condor_morecore(int incr)
+ {
+-	// begin points to the start of our heap segment
+-	// corestart points to the start of the allocated portion of the segment
+-	// *coreend points to the end of the allocated portion of the segment
+-	// *segend points to the end of our allocated segment
+-	// coreend and segend are stored at the start of the segment because
++	// amh.begin points to the start of our heap segment
++	// amh.corestart points to the start of the allocated portion of the segment
++	// *amh.coreend points to the end of the allocated portion of the segment
++	// *amh.segend points to the end of our allocated segment
++	// amh.coreend and segend are stored at the start of the segment because
+ 	//   we don't want them to be overwritten on a restart
+-	static void *begin = NULL, *corestart = NULL,
+-		**coreend = NULL, **segend = NULL;
+-	static int pagesize = -1;
+ 
+-	if (pagesize == -1) {
+-		pagesize = getpagesize();
++	if (amh.pagesize == -1) {
++		// This is the page size of the alternate heap allocator, NOT the
++		// regular allocator used by the application. The two allocators
++		// can sometimes have different sizes and we don't want to confuse
++		// the two.
++		amh.pagesize = condor_malloc_getpagesize();
+ 	}
+-	
+-	if (begin == NULL) {
+-		begin = MyImage.FindAltHeap();
++
++	if (amh.begin == NULL) {
++		amh.begin = MyImage.FindAltHeap();
+ 		int malloc_static_data = condor_malloc_init_size();
+ 		int segincr =
+ 			(((incr+malloc_static_data+
+-			   (2*sizeof(void *)))/pagesize)+1)*pagesize;
+-		begin = condor_map_seg(begin, segincr);
+-		corestart = (void *) (
+-			(int)begin+(int)(2*sizeof(void *))+(int)malloc_static_data ); 
+-		condor_malloc_init((void *)((int)begin+(int)(2*sizeof(void *))));
+-		coreend = (void **)begin;
+-		segend = (void **)((int)begin+(int)sizeof(void *));
+-		*segend = (void *)((int)begin+(int)segincr);
+-		*coreend = (void *)((int)corestart+(int)incr);
+-		return corestart;
++			   (2*sizeof(void *)))/amh.pagesize)+1)*amh.pagesize;
++		amh.begin = condor_map_seg(amh.begin, segincr);
++		amh.corestart = (void *) (
++			(int)amh.begin+(int)(2*sizeof(void *))+(int)malloc_static_data ); 
++		condor_malloc_init((void *)((int)amh.begin+(int)(2*sizeof(void *))));
++		amh.coreend = (void **)amh.begin;
++		amh.segend = (void **)((int)amh.begin+(int)sizeof(void *));
++		*amh.segend = (void *)((int)amh.begin+(int)segincr);
++		*amh.coreend = (void *)((int)amh.corestart+(int)incr);
++		return amh.corestart;
+ 	} else if (incr == 0) {
+-		return *coreend;
++		return *amh.coreend;
+ 	} else {
+-		void *old_break = *coreend;
+-		*coreend = (void *)((int)*coreend + (int)incr);
+-		if (*coreend > *segend) {
+-			int segincr = (int)((((int)*coreend-(int)*segend)/(int)pagesize)+1)*(int)pagesize;
+-			if ((int)*coreend+(int)segincr-(int)begin > ALT_HEAP_SIZE) {
++		void *old_break = *amh.coreend;
++		*amh.coreend = (void *)((int)*amh.coreend + (int)incr);
++		if (*amh.coreend > *amh.segend) {
++			int segincr = (int)((((int)*amh.coreend-(int)*amh.segend)/(int)amh.pagesize)+1)*(int)amh.pagesize;
++			if ((int)*amh.coreend+(int)segincr-(int)amh.begin > ALT_HEAP_SIZE) {
+ 				dprintf(D_ALWAYS,
+ 						"fatal error: exceeded ALT_HEAP_SIZE of %d bytes!\n",
+ 						ALT_HEAP_SIZE);
+ 				Suicide();
+ 			}
+-			if (condor_map_seg(*segend, segincr) != *segend) {
++			if (condor_map_seg(*amh.segend, segincr) != *amh.segend) {
+ 				dprintf(D_ALWAYS, "failed to allocate contiguous segments in "
+ 						"condor_morecore!\n");
+ 				Suicide();
+ 			}
+-			*segend = (void *)((int)*segend + (int)segincr);
++			*amh.segend = (void *)((int)*amh.segend + (int)segincr);
+ 		}
+ 		return old_break;
+ 	}
+ }
+ 
+ void *
+-zalloc(voidpf opaque, uInt items, uInt size)
++zalloc(voidpf /* opaque */, uInt items, uInt size)
+ {
+-	return condor_malloc(items*size);
++	uInt total_size = 0;
++	void *chunk = NULL;
++	void *chunk_start = NULL;
++	void *chunk_end = NULL;
++
++	// Get the requested memory from the alternate heap. This may initialize
++	// the alternate heap based upon condor_morecore(). 
++	total_size = items * size;
++	chunk = condor_malloc(total_size);
++
++	// some useful pointers for later checks and messages.
++	chunk_start = chunk;
++	chunk_end = (char*)chunk + total_size;
++
++	// Check to make sure alternate heap was and still is initialized.
++	if (amh.begin == NULL ||
++		amh.corestart == NULL ||
++		amh.coreend == NULL ||
++		*amh.coreend == NULL ||
++		amh.segend == NULL ||
++		*amh.segend == NULL ||
++		amh.pagesize != condor_malloc_getpagesize())
++	{
++		dprintf(D_ALWAYS, 
++			"ERROR: The alternate heap has not been initialized properly. "
++			"Please check to see that MORECORE had been defined properly "
++			"when compiling malloc-condor.c. Committing Suicide()!\n");
++		display_alternate_memory_heap(D_ALWAYS);
++		Suicide();
++	}
++
++	// Check to see that the memory we got back from the allocator is
++	// _completely contained_ in the alternate heap. We do this because if
++	// somehow condor_malloc() actually called sbrk() instead of
++	// condor_morecore(), we'd silently corrupt the checkpoint image and
++	// subsequent checkpoint. We take great care to examine how it fails 
++	// since that can lead to insight into what is going wrong.
++
++	// Check if chunk starts before the alt heap and ends after the alt heap
++	if (chunk_start < amh.corestart && chunk_end >= *amh.coreend) 
++	{
++		dprintf(D_ALWAYS, 
++			"ERROR: Alternate heap allocator allocated chunk "
++			"[start=%p, end=%p, size=%d bytes] "
++			"which _completely_ overlaps the alternate heap boundaries "
++			"of [%p, %p]. "
++			"Check to see if MORECORE is defined properly when "
++			"compiling malloc-condor.c! Commiting Suicide()!\n",
++			chunk_start, chunk_end, total_size,
++			amh.corestart, amh.coreend!=NULL?*amh.coreend:NULL);
++		display_alternate_memory_heap(D_ALWAYS);
++		Suicide();
++	}
++
++	// Check if the entire chunk is below the alternate heap.
++	if (chunk_end < amh.corestart) {
++		dprintf(D_ALWAYS, 
++			"ERROR: Alternate heap allocator allocated chunk "
++			"[start=%p, end=%p, size=%d bytes] "
++			"which is below the valid alternate heap boundaries of [%p, %p]. "
++			"Check to see if MORECORE is defined properly when "
++			"compiling malloc-condor.c! Commiting Suicide()!\n",
++			chunk_start, chunk_end, total_size,
++			amh.corestart, amh.coreend!=NULL?*amh.coreend:NULL);
++		display_alternate_memory_heap(D_ALWAYS);
++		Suicide();
++	}
++
++	// Check if the entire chunk is above the alternate heap.
++	if (chunk_start > *amh.coreend) {
++		dprintf(D_ALWAYS, 
++			"ERROR: Alternate heap allocator allocated chunk "
++			"[start=%p, end=%p, size=%d bytes] "
++			"which is above the valid alternate heap boundaries of [%p, %p]. "
++			"Check to see if MORECORE is defined properly when "
++			"compiling malloc-condor.c! Commiting Suicide()!\n",
++			chunk_start, chunk_end, total_size,
++			amh.corestart, amh.coreend!=NULL?*amh.coreend:NULL);
++		display_alternate_memory_heap(D_ALWAYS);
++		Suicide();
++	}
++
++	// Check if the chunk overlaps the lower boundary of the alt heap.
++	if (chunk_start < amh.corestart && chunk_end >= amh.corestart)
++	{
++		dprintf(D_ALWAYS, 
++			"ERROR: Alternate heap allocator allocated chunk "
++			"[start=%p, end=%p, size=%d bytes] "
++			"which overlaps the start alternate heap boundaries of [%p, %p]. "
++			"Check to see if MORECORE is defined properly when "
++			"compiling malloc-condor.c! Commiting Suicide()!\n",
++			chunk_start, chunk_end, total_size,
++			amh.corestart, amh.coreend!=NULL?*amh.coreend:NULL);
++		display_alternate_memory_heap(D_ALWAYS);
++		Suicide();
++	}
++
++	// Check if the chunk overlaps the upper boundary of the alt heap.
++	if (chunk_start >= amh.corestart && 
++		chunk_start < *amh.coreend &&
++		chunk_end >= *amh.coreend)
++	{
++		dprintf(D_ALWAYS, 
++			"ERROR: Alternate heap allocator allocated chunk "
++			"[start=%p, end=%p, size=%d bytes] "
++			"which overlaps the end alternate heap boundaries of [%p, %p]. "
++			"compiling malloc-condor.c! Commiting Suicide()!\n",
++			chunk_start, chunk_end, total_size,
++			amh.corestart, amh.coreend!=NULL?*amh.coreend:NULL);
++		display_alternate_memory_heap(D_ALWAYS);
++		Suicide();
++	}
++
++	// If we passed the validation gauntlet, we're good to go!
++	return chunk;
+ }
+ 
+ void
+-zfree(voidpf opaque, voidpf address)
++zfree(voidpf /* opaque */ , voidpf address)
+ {
++	// Check to see that the pointer we are about to free actually exists IN
++	// the alternate heap. We do this because if somehow we pass pointers from
++	// the real malloc heap to here, we could silently corrupt or segfault in
++	// either heap.
++
++	if (address < amh.corestart) {
++		dprintf(D_ALWAYS, 
++			"ERROR: Alternate heap allocator asked to free a pointer %p from "
++			"below the alternate heap! Check to see if MORECORE is defined "
++			"properly when compiling malloc-condor.c! Also check that a real "
++			"heap pointer isn't being passed to the alternate heap free "
++			"function! Commiting Suicide()!\n",
++			address);
++		display_alternate_memory_heap(D_ALWAYS);
++		Suicide();
++	}
++
++	if (address >= *amh.coreend) {
++		dprintf(D_ALWAYS, 
++			"ERROR: Alternate heap allocator asked to free a pointer %p from "
++			"above the alternate heap! Check to see if MORECORE is defined "
++			"properly when compiling malloc-condor.c! Also check that a real "
++			"heap pointer isn't being passed to the alternate heap free "
++			"function! Commiting Suicide()!\n",
++			address);
++		display_alternate_memory_heap(D_ALWAYS);
++		Suicide();
++	}
++
+ 	condor_free(address);
+ }
+ #endif
+@@ -1871,6 +2048,33 @@ void ckpt_and_exit__()
+ 
+ }   /* end of extern "C" */
+ 
++/* this bypasses our need for libc */
++void sleep_syscall(int seconds)
++{
++
++#if defined(SYS_sleep)
++	SYSCALL(SYS_sleep, seconds);
++#elif defined(SYS__newselect)
++	struct timeval t;
++	t.tv_sec = seconds;
++	t.tv_usec = 0;
++	SYSCALL(SYS__newselect, 0, NULL, NULL, NULL, &t);
++#elif defined(SYS_select)
++	struct timeval t;
++	t.tv_sec = seconds;
++	t.tv_usec = 0;
++	SYSCALL(SYS_select, 0, NULL, NULL, NULL, &t);
++#elif defined(SYS_nanosleep)
++	struct timespec t;
++	t.tv_sec = seconds;
++	t.tv_nsec = 0;
++	SYSCALL(SYS_nanosleep, &t, NULL);
++#else
++#error "Please port me!  I need a sleep system call."
++#endif
++
++}
++
+ /*
+   Arrange to terminate abnormally with the given signal.  Note: the
+   expectation is that the signal is one whose default action terminates
+@@ -1918,26 +2122,7 @@ terminate_with_sig( int sig )
+ 	// our debug message doesn't arrive at the shadow, we won't know why
+ 	// the job died.  Note that we don't necessarily have access to any
+ 	// libc functions here, so we must use SYSCALL(SYS_something, ...).
+-#if defined(SYS_sleep)
+-	SYSCALL(SYS_sleep, 1);
+-#elif defined(SYS__newselect)
+-	struct timeval t;
+-	t.tv_sec = 1;
+-	t.tv_usec = 0;
+-	SYSCALL(SYS__newselect, 0, NULL, NULL, NULL, &t);
+-#elif defined(SYS_select)
+-	struct timeval t;
+-	t.tv_sec = 1;
+-	t.tv_usec = 0;
+-	SYSCALL(SYS_select, 0, NULL, NULL, NULL, &t);
+-#elif defined(SYS_nanosleep)
+-	struct timespec t;
+-	t.tv_sec = 1;
+-	t.tv_nsec = 0;
+-	SYSCALL(SYS_nanosleep, &t, NULL);
+-#else
+-#error "Please port me!  I need a sleep system call."
+-#endif
++	sleep_syscall(1);
+ 
+ 	if( SYSCALL(SYS_kill, my_pid, sig) < 0 ) {
+ 		EXCEPT( "kill" );
+diff --git a/src/condor_ckpt/malloc-condor.c b/src/condor_ckpt/malloc-condor.c
+index 946617c..973eac2 100644
+--- a/src/condor_ckpt/malloc-condor.c
++++ b/src/condor_ckpt/malloc-condor.c
+@@ -17,15 +17,47 @@
+  *
+  ***************************************************************/
+ 
++/* This file sets up some definitions in order to create a private malloc
++	implementation suitable for use by the checkpointing library to make a
++	private heap.  This is *not* the malloc called by ordinary user code.
++	Its use is primarily by zlib when it compressed/uncompresses checkpoints.
++	The privacy is enforced at the symbol namespace level via the
++	MALLOC_SYMBOL #define that is part of the malloc.c interface.
++*/
++
++
++/* First we check to make sure we're being compiled properly.
++	Traditionally, you can use the values:
++	-DMORECORE=condor_morecore
++	-DHAVE_MMAP=0
++	-Dmalloc_getpagesize=8192
++
++	The first states to use the function condor_morecore() instead of sbrk().
++	The second states that MORECORE should *always* be called instead of mmap().
++	The third dictates how big the pages are wrt to the allocator.
++*/
++#if !defined(MORECORE) || !defined(HAVE_MMAP) || !defined(malloc_getpagesize)
++#error You should be defining MORECORE, HAVE_MMAP, and malloc_getpagesize on the compilation line for this file!
++#endif
+ 
+-/*
+-This file sets up some definitions in order
+-to create a private malloc implementation suitable
+-for use by the checkpointing library to make 
+-a private heap.  This is *not* the malloc called
+-by ordinary user code.
++/* give a prototype of the morecore function for the allocator */
++extern void* MORECORE(int);
++
++/* We use this function to figure out whatever the pagesize was that we told
++	the allocator to use. This allows up to later compute the correct size
++	of our alternate heap. The prototype is in image.cpp.
+ */
++int condor_malloc_getpagesize(void)
++{
++	return malloc_getpagesize;
++}
+ 
++/* Change all usual malloc calls to be prefixed with condor_. The ckpt
++	library uses this new interface when performing compressed checkpoints.
++*/
+ #define MALLOC_SYMBOL(x) condor_##x
+ 
+ #include "malloc.c"
++
++
++
+diff --git a/src/condor_ckpt/zimage.cpp b/src/condor_ckpt/zimage.cpp
+new file mode 100644
+index 0000000..5dede3c
+--- /dev/null
++++ b/src/condor_ckpt/zimage.cpp
+@@ -0,0 +1,22 @@
++/***************************************************************
++ *
++ * Copyright (C) 1990-2007, Condor Team, Computer Sciences Department,
++ * University of Wisconsin-Madison, WI.
++ * 
++ * 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.
++ *
++ ***************************************************************/
++
++#define COMPRESS_CKPT
++
++#include "image.cpp"
+diff --git a/src/condor_contrib/aviary/CMakeLists.txt b/src/condor_contrib/aviary/CMakeLists.txt
+new file mode 100644
+index 0000000..71baf72
+--- /dev/null
++++ b/src/condor_contrib/aviary/CMakeLists.txt
+@@ -0,0 +1,28 @@
++ ###############################################################
++ # 
++ # Copyright (C) 2009-2011, Red Hat, Inc.
++ # 
++ # 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. 
++ # 
++ ############################################################### 
++
++if (LINUX)
++	option(WITH_AVIARY "Support for aviary SOAP plugins" ON)
++endif()
++
++if ( WITH_AVIARY AND HAVE_EXT_WSO2 )
++ 
++ include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/src ${CMAKE_CURRENT_BINARY_DIR}/src ${CMAKE_CURRENT_SOURCE_DIR}/include ${WSO2_INCLUDES})
++ add_subdirectory( ${CMAKE_CURRENT_SOURCE_DIR}/src )
++
++endif()
+\ No newline at end of file
+diff --git a/src/condor_contrib/aviary/README b/src/condor_contrib/aviary/README
+new file mode 100644
+index 0000000..400943b
+--- /dev/null
++++ b/src/condor_contrib/aviary/README
+@@ -0,0 +1,2 @@
++Aviary - Simplified RPC Interface for Condor
++--------------------------------------------
+diff --git a/src/condor_contrib/aviary/author.txt b/src/condor_contrib/aviary/author.txt
+new file mode 100644
+index 0000000..7b62f15
+--- /dev/null
++++ b/src/condor_contrib/aviary/author.txt
+@@ -0,0 +1,3 @@
++author: Peter MacKinnon
++organization: Red Hat Inc.
++e-mail: pmackinn at redhat.com
+diff --git a/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_ArchType.cpp b/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_ArchType.cpp
+new file mode 100644
+index 0000000..deb2802
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_ArchType.cpp
+@@ -0,0 +1,354 @@
++
++
++        /**
++         * ArchType.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryCommon_ArchType.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryCommon;
++        
++               /*
++                * Implementation of the ArchType|http://common.aviary.grid.redhat.com Element
++                */
++           AviaryCommon::ArchType::ArchType()
++        {
++
++        
++            qname = NULL;
++        
++                    property_ArchType;
++                
++            isValidArchType  = false;
++        
++                  qname =  axutil_qname_create (Environment::getEnv(),
++                        "ArchType",
++                        "http://common.aviary.grid.redhat.com",
++                        NULL);
++                
++        }
++
++       AviaryCommon::ArchType::ArchType(std::string arg_ArchType)
++        {
++             
++                   qname = NULL;
++             
++                 property_ArchType;
++             
++            isValidArchType  = true;
++            
++                 qname =  axutil_qname_create (Environment::getEnv(),
++                       "ArchType",
++                       "http://common.aviary.grid.redhat.com",
++                       NULL);
++               
++                    property_ArchType = arg_ArchType;
++            
++        }
++        AviaryCommon::ArchType::~ArchType()
++        {
++
++        }
++
++        
++            bool WSF_CALL
++            ArchType::deserializeFromString(
++                                            const axis2_char_t *node_value,
++                                            axiom_node_t *parent)
++            {
++              bool status = true;
++            
++                        setArchType(node_value);
++                    
++              return status;
++            }
++        
++
++        bool WSF_CALL
++        AviaryCommon::ArchType::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++            
++        status = AXIS2_FAILURE;
++        if(parent)
++        {
++            axis2_char_t *attrib_text = NULL;
++            attrib_text = axiom_element_get_attribute_value_by_name((axiom_element_t*)axiom_node_get_data_element(parent, Environment::getEnv()), Environment::getEnv(), "nil");
++            if (attrib_text != NULL && !axutil_strcasecmp(attrib_text, "true"))
++            {
++              
++               /* but the wsdl says that, this is non nillable */
++                WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "NULL value is set to a non nillable element ArchType");
++                status = AXIS2_FAILURE;
++               
++            }
++            else
++            {
++                axiom_node_t *text_node = NULL;
++                text_node = axiom_node_get_first_child(parent, Environment::getEnv());
++                axiom_text_t *text_element = NULL;
++                if (text_node &&
++                        axiom_node_get_node_type(text_node, Environment::getEnv()) == AXIOM_TEXT)
++                    text_element = (axiom_text_t*)axiom_node_get_data_element(text_node, Environment::getEnv());
++                text_value = "";
++                if(text_element && axiom_text_get_value(text_element, Environment::getEnv()))
++                {
++                    text_value = (axis2_char_t*)axiom_text_get_value(text_element, Environment::getEnv());
++                }
++                status = deserializeFromString(text_value, parent);
++                }
++            }
++            
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryCommon::ArchType::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryCommon::ArchType::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++            char* WSF_CALL
++            AviaryCommon::ArchType::serializeToString(axutil_hash_t *namespaces)
++            {
++                axis2_char_t *text_value = NULL;
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                
++                         text_value = (axis2_char_t*)axutil_xml_quote_string(Environment::getEnv(), (axis2_char_t*)property_ArchType.c_str(), false);
++                         if (!text_value)
++                         {
++                             text_value = (axis2_char_t*)axutil_strdup(Environment::getEnv(), property_ArchType.c_str());
++                         }
++                      
++                return text_value;
++            }
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryCommon::ArchType::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++            axiom_data_source_t *data_source = NULL;
++            axutil_stream_t *stream = NULL;
++            axis2_char_t *text_value;
++             
++                    current_node = parent;
++                    data_source = (axiom_data_source_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                    if (!data_source)
++                        return NULL;
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv()); /* assume parent is of type data source */
++                    if (!stream)
++                        return NULL;
++                  
++               if(!parent_tag_closed && !tag_closed)
++               {
++                  text_value = ">"; 
++                  axutil_stream_write(stream, Environment::getEnv(), text_value, axutil_strlen(text_value));
++               }
++               
++               text_value = serializeToString(namespaces);
++               if(text_value)
++               {
++                    axutil_stream_write(stream, Environment::getEnv(), text_value, axutil_strlen(text_value));
++                    AXIS2_FREE(Environment::getEnv()->allocator, text_value);
++               }
++            
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for ArchType by  Property Number 1
++             */
++            std::string WSF_CALL
++            AviaryCommon::ArchType::getProperty1()
++            {
++                return getArchType();
++            }
++
++            /**
++             * getter for ArchType.
++             */
++            std::string WSF_CALL
++            AviaryCommon::ArchType::getArchType()
++             {
++                return property_ArchType;
++             }
++
++            /**
++             * setter for ArchType
++             */
++            bool WSF_CALL
++            AviaryCommon::ArchType::setArchType(
++                    const std::string  arg_ArchType)
++             {
++                
++
++                if(isValidArchType &&
++                        arg_ArchType == property_ArchType)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(arg_ArchType.empty())
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"ArchType is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetArchType();
++
++                
++                        property_ArchType = std::string(arg_ArchType.c_str());
++                        isValidArchType = true;
++                    
++                return true;
++             }
++
++            
++             /**
++             * specialized enum getter for ArchType.
++             */
++             ADBArchTypeEnum WSF_CALL
++             AviaryCommon::ArchType::getArchTypeEnum()
++             {
++
++                
++                 if (axutil_strcmp(property_ArchType.c_str(), "INTEL") == 0)
++                    return ArchType_INTEL;
++             
++                 if (axutil_strcmp(property_ArchType.c_str(), "X86_64") == 0)
++                    return ArchType_X86_64;
++             
++             
++                 /* Error: none of the strings matched; invalid enum value */
++                 return (ADBArchTypeEnum)-1;
++             }
++             
++             
++             /**
++             * specialized enum setter for ArchType.
++             */
++             bool WSF_CALL
++            AviaryCommon::ArchType::setArchTypeEnum(const ADBArchTypeEnum  arg_ArchType)
++             {
++                
++
++                
++                resetArchType();
++
++                   
++                   switch (arg_ArchType)
++                   {
++                     
++                       case ArchType_INTEL :
++                            property_ArchType = (axis2_char_t *)axutil_strdup(Environment::getEnv(), "INTEL");
++                          break;
++                     
++                       case ArchType_X86_64 :
++                            property_ArchType = (axis2_char_t *)axutil_strdup(Environment::getEnv(), "X86_64");
++                          break;
++                     
++                     
++                       default:
++                          isValidArchType = false;
++                          property_ArchType = "";
++                          WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Error setting ArchType: undefined enum value");
++                          return false;
++                   }
++                
++                   if(property_ArchType.empty())
++                   {
++                       return AXIS2_FAILURE;
++                   }
++                     isValidArchType = true;
++                        
++                
++                return true;
++             }
++             
++
++           /**
++            * resetter for ArchType
++            */
++           bool WSF_CALL
++           AviaryCommon::ArchType::resetArchType()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidArchType = false; 
++               return true;
++           }
++
++           /**
++            * Check whether ArchType is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::ArchType::isArchTypeNil()
++           {
++               return !isValidArchType;
++           }
++
++           /**
++            * Set ArchType to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::ArchType::setArchTypeNil()
++           {
++               return resetArchType();
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_Attribute.cpp b/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_Attribute.cpp
+new file mode 100644
+index 0000000..1047122
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_Attribute.cpp
+@@ -0,0 +1,1022 @@
++
++
++        /**
++         * Attribute.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryCommon_Attribute.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryCommon;
++        
++                /*
++                 * This type was generated from the piece of schema that had
++                 * name = Attribute
++                 * Namespace URI = http://common.aviary.grid.redhat.com
++                 * Namespace Prefix = ns1
++                 */
++           AviaryCommon::Attribute::Attribute()
++        {
++
++        
++                    property_Name;
++                
++            isValidName  = false;
++        
++                property_Type  = NULL;
++              
++            isValidType  = false;
++        
++                    property_Value;
++                
++            isValidValue  = false;
++        
++        }
++
++       AviaryCommon::Attribute::Attribute(std::string arg_Name,AviaryCommon::AttributeType* arg_Type,std::string arg_Value)
++        {
++             
++                 property_Name;
++             
++            isValidName  = true;
++            
++               property_Type  = NULL;
++             
++            isValidType  = true;
++            
++                 property_Value;
++             
++            isValidValue  = true;
++            
++                    property_Name = arg_Name;
++            
++                    property_Type = arg_Type;
++            
++                    property_Value = arg_Value;
++            
++        }
++        AviaryCommon::Attribute::~Attribute()
++        {
++
++        }
++
++        
++
++        bool WSF_CALL
++        AviaryCommon::Attribute::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++            axutil_qname_t *element_qname = NULL; 
++            
++               axiom_node_t *first_node = NULL;
++               bool is_early_node_valid = true;
++               axiom_node_t *current_node = NULL;
++               axiom_element_t *current_element = NULL;
++            
++              
++              while(parent && axiom_node_get_node_type(parent, Environment::getEnv()) != AXIOM_ELEMENT)
++              {
++                  parent = axiom_node_get_next_sibling(parent, Environment::getEnv());
++              }
++              if (NULL == parent)
++              {   
++                return AXIS2_FAILURE;
++              }
++              
++                      
++                      first_node = axiom_node_get_first_child(parent, Environment::getEnv());
++                      
++                    
++
++                     
++                     /*
++                      * building name element
++                      */
++                     
++                     
++                     
++                                   current_node = first_node;
++                                   is_early_node_valid = false;
++                                   
++                                   
++                                    while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                    {
++                                        current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                    }
++                                    if(current_node != NULL)
++                                    {
++                                        current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                        mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                    }
++                                   
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "name", NULL, NULL);
++                                 
++
++                           if ( 
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("name", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("name", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 
++                                      text_value = axiom_element_get_text(current_element, Environment::getEnv(), current_node);
++                                      if(text_value != NULL)
++                                      {
++                                            status = setName(text_value);
++                                      }
++                                      
++                                      else
++                                      {
++                                            /*
++                                             * axis2_qname_t *qname = NULL;
++                                             * axiom_attribute_t *the_attri = NULL;
++                                             * 
++                                             * qname = axutil_qname_create(Environment::getEnv(), "nil", "http://www.w3.org/2001/XMLSchema-instance", "xsi");
++                                             * the_attri = axiom_element_get_attribute(current_element, Environment::getEnv(), qname);
++                                             */
++                                            /* currently thereis a bug in the axiom_element_get_attribute, so we have to go to this bad method */
++
++                                            axiom_attribute_t *the_attri = NULL;
++                                            axis2_char_t *attrib_text = NULL;
++                                            axutil_hash_t *attribute_hash = NULL;
++
++                                            attribute_hash = axiom_element_get_all_attributes(current_element, Environment::getEnv());
++
++                                            attrib_text = NULL;
++                                            if(attribute_hash)
++                                            {
++                                                 axutil_hash_index_t *hi;
++                                                 void *val;
++                                                 const void *key;
++                                        
++                                                 for (hi = axutil_hash_first(attribute_hash, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                                                 {
++                                                     axutil_hash_this(hi, &key, NULL, &val);
++                                                     
++                                                     if(strstr((axis2_char_t*)key, "nil|http://www.w3.org/2001/XMLSchema-instance"))
++                                                     {
++                                                         the_attri = (axiom_attribute_t*)val;
++                                                         break;
++                                                     }
++                                                 }
++                                            }
++
++                                            if(the_attri)
++                                            {
++                                                attrib_text = axiom_attribute_get_value(the_attri, Environment::getEnv());
++                                            }
++                                            else
++                                            {
++                                                /* this is hoping that attribute is stored in "http://www.w3.org/2001/XMLSchema-instance", this happnes when name is in default namespace */
++                                                attrib_text = axiom_element_get_attribute_value_by_name(current_element, Environment::getEnv(), "nil");
++                                            }
++
++                                            if(attrib_text && 0 == axutil_strcmp(attrib_text, "1"))
++                                            {
++                                                WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "NULL value is set to a non nillable element name");
++                                                status = AXIS2_FAILURE;
++                                            }
++                                            else
++                                            {
++                                                /* after all, we found this is a empty string */
++                                                status = setName("");
++                                            }
++                                      }
++                                      
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for name ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element name missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building type element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "type", NULL, NULL);
++                                 
++
++                           if (isParticle() ||  
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("type", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("type", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 AviaryCommon::AttributeType* element = new AviaryCommon::AttributeType();
++
++                                      status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                      if(AXIS2_FAILURE == status)
++                                      {
++                                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in building adb object for element type");
++                                      }
++                                      else
++                                      {
++                                          status = setType(element);
++                                      }
++                                    
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for type ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element type missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building value element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "value", NULL, NULL);
++                                 
++
++                           if ( 
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("value", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("value", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 
++                                      text_value = axiom_element_get_text(current_element, Environment::getEnv(), current_node);
++                                      if(text_value != NULL)
++                                      {
++                                            status = setValue(text_value);
++                                      }
++                                      
++                                      else
++                                      {
++                                            /*
++                                             * axis2_qname_t *qname = NULL;
++                                             * axiom_attribute_t *the_attri = NULL;
++                                             * 
++                                             * qname = axutil_qname_create(Environment::getEnv(), "nil", "http://www.w3.org/2001/XMLSchema-instance", "xsi");
++                                             * the_attri = axiom_element_get_attribute(current_element, Environment::getEnv(), qname);
++                                             */
++                                            /* currently thereis a bug in the axiom_element_get_attribute, so we have to go to this bad method */
++
++                                            axiom_attribute_t *the_attri = NULL;
++                                            axis2_char_t *attrib_text = NULL;
++                                            axutil_hash_t *attribute_hash = NULL;
++
++                                            attribute_hash = axiom_element_get_all_attributes(current_element, Environment::getEnv());
++
++                                            attrib_text = NULL;
++                                            if(attribute_hash)
++                                            {
++                                                 axutil_hash_index_t *hi;
++                                                 void *val;
++                                                 const void *key;
++                                        
++                                                 for (hi = axutil_hash_first(attribute_hash, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                                                 {
++                                                     axutil_hash_this(hi, &key, NULL, &val);
++                                                     
++                                                     if(strstr((axis2_char_t*)key, "nil|http://www.w3.org/2001/XMLSchema-instance"))
++                                                     {
++                                                         the_attri = (axiom_attribute_t*)val;
++                                                         break;
++                                                     }
++                                                 }
++                                            }
++
++                                            if(the_attri)
++                                            {
++                                                attrib_text = axiom_attribute_get_value(the_attri, Environment::getEnv());
++                                            }
++                                            else
++                                            {
++                                                /* this is hoping that attribute is stored in "http://www.w3.org/2001/XMLSchema-instance", this happnes when name is in default namespace */
++                                                attrib_text = axiom_element_get_attribute_value_by_name(current_element, Environment::getEnv(), "nil");
++                                            }
++
++                                            if(attrib_text && 0 == axutil_strcmp(attrib_text, "1"))
++                                            {
++                                                WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "NULL value is set to a non nillable element value");
++                                                status = AXIS2_FAILURE;
++                                            }
++                                            else
++                                            {
++                                                /* after all, we found this is a empty string */
++                                                status = setValue("");
++                                            }
++                                      }
++                                      
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for value ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element value missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryCommon::Attribute::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryCommon::Attribute::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryCommon::Attribute::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++             axis2_char_t *string_to_stream;
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++                axiom_namespace_t *ns1 = NULL;
++
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                axis2_char_t *p_prefix = NULL;
++            
++                    axis2_char_t *text_value_1;
++                    axis2_char_t *text_value_1_temp;
++                    
++                    axis2_char_t text_value_2[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++                    axis2_char_t *text_value_3;
++                    axis2_char_t *text_value_3_temp;
++                    
++               axis2_char_t *start_input_str = NULL;
++               axis2_char_t *end_input_str = NULL;
++               unsigned int start_input_str_len = 0;
++               unsigned int end_input_str_len = 0;
++            
++            
++               axiom_data_source_t *data_source = NULL;
++               axutil_stream_t *stream = NULL;
++
++            
++                    current_node = parent;
++                    data_source = (axiom_data_source_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                    if (!data_source)
++                        return NULL;
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv()); /* assume parent is of type data source */
++                    if (!stream)
++                        return NULL;
++                  
++            if(!parent_tag_closed)
++            {
++            
++              string_to_stream = ">"; 
++              axutil_stream_write(stream, Environment::getEnv(), string_to_stream, axutil_strlen(string_to_stream));
++              tag_closed = 1;
++            
++            }
++            
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidName)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property name");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("name"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("name")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing name element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sname>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sname>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                    
++                           text_value_1 = (axis2_char_t*)property_Name.c_str();
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                           
++                            
++                           text_value_1_temp = axutil_xml_quote_string(Environment::getEnv(), text_value_1, true);
++                           if (text_value_1_temp)
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_1_temp, axutil_strlen(text_value_1_temp));
++                               AXIS2_FREE(Environment::getEnv()->allocator, text_value_1_temp);
++                           }
++                           else
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_1, axutil_strlen(text_value_1));
++                           }
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                           
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidType)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property type");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("type"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("type")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing type element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%stype",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":""); 
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%stype>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                     
++                            if(!property_Type->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                            }
++                            property_Type->serialize(current_node, parent_element,
++                                                                                 property_Type->isParticle() || false, namespaces, next_ns_index);
++                            
++                            if(!property_Type->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                            }
++                            
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidValue)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property value");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("value"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("value")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing value element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%svalue>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%svalue>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                    
++                           text_value_3 = (axis2_char_t*)property_Value.c_str();
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                           
++                            
++                           text_value_3_temp = axutil_xml_quote_string(Environment::getEnv(), text_value_3, true);
++                           if (text_value_3_temp)
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_3_temp, axutil_strlen(text_value_3_temp));
++                               AXIS2_FREE(Environment::getEnv()->allocator, text_value_3_temp);
++                           }
++                           else
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_3, axutil_strlen(text_value_3));
++                           }
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                           
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for name by  Property Number 1
++             */
++            std::string WSF_CALL
++            AviaryCommon::Attribute::getProperty1()
++            {
++                return getName();
++            }
++
++            /**
++             * getter for name.
++             */
++            std::string WSF_CALL
++            AviaryCommon::Attribute::getName()
++             {
++                return property_Name;
++             }
++
++            /**
++             * setter for name
++             */
++            bool WSF_CALL
++            AviaryCommon::Attribute::setName(
++                    const std::string  arg_Name)
++             {
++                
++
++                if(isValidName &&
++                        arg_Name == property_Name)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(arg_Name.empty())
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"name is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetName();
++
++                
++                        property_Name = std::string(arg_Name.c_str());
++                        isValidName = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for name
++            */
++           bool WSF_CALL
++           AviaryCommon::Attribute::resetName()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidName = false; 
++               return true;
++           }
++
++           /**
++            * Check whether name is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::Attribute::isNameNil()
++           {
++               return !isValidName;
++           }
++
++           /**
++            * Set name to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::Attribute::setNameNil()
++           {
++               return resetName();
++           }
++
++           
++
++            /**
++             * Getter for type by  Property Number 2
++             */
++            AviaryCommon::AttributeType* WSF_CALL
++            AviaryCommon::Attribute::getProperty2()
++            {
++                return getType();
++            }
++
++            /**
++             * getter for type.
++             */
++            AviaryCommon::AttributeType* WSF_CALL
++            AviaryCommon::Attribute::getType()
++             {
++                return property_Type;
++             }
++
++            /**
++             * setter for type
++             */
++            bool WSF_CALL
++            AviaryCommon::Attribute::setType(
++                    AviaryCommon::AttributeType*  arg_Type)
++             {
++                
++
++                if(isValidType &&
++                        arg_Type == property_Type)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(NULL == arg_Type)
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"type is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetType();
++
++                
++                    if(NULL == arg_Type)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_Type = arg_Type;
++                        isValidType = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for type
++            */
++           bool WSF_CALL
++           AviaryCommon::Attribute::resetType()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++            
++                
++
++                if(property_Type != NULL)
++                {
++                   
++                   
++                         delete  property_Type;
++                     
++
++                   }
++
++                
++                
++                
++               isValidType = false; 
++               return true;
++           }
++
++           /**
++            * Check whether type is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::Attribute::isTypeNil()
++           {
++               return !isValidType;
++           }
++
++           /**
++            * Set type to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::Attribute::setTypeNil()
++           {
++               return resetType();
++           }
++
++           
++
++            /**
++             * Getter for value by  Property Number 3
++             */
++            std::string WSF_CALL
++            AviaryCommon::Attribute::getProperty3()
++            {
++                return getValue();
++            }
++
++            /**
++             * getter for value.
++             */
++            std::string WSF_CALL
++            AviaryCommon::Attribute::getValue()
++             {
++                return property_Value;
++             }
++
++            /**
++             * setter for value
++             */
++            bool WSF_CALL
++            AviaryCommon::Attribute::setValue(
++                    const std::string  arg_Value)
++             {
++                
++
++                if(isValidValue &&
++                        arg_Value == property_Value)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(arg_Value.empty())
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"value is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetValue();
++
++                
++                        property_Value = std::string(arg_Value.c_str());
++                        isValidValue = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for value
++            */
++           bool WSF_CALL
++           AviaryCommon::Attribute::resetValue()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidValue = false; 
++               return true;
++           }
++
++           /**
++            * Check whether value is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::Attribute::isValueNil()
++           {
++               return !isValidValue;
++           }
++
++           /**
++            * Set value to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::Attribute::setValueNil()
++           {
++               return resetValue();
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_AttributeType.cpp b/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_AttributeType.cpp
+new file mode 100644
+index 0000000..7495e14
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_AttributeType.cpp
+@@ -0,0 +1,389 @@
++
++
++        /**
++         * AttributeType.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryCommon_AttributeType.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryCommon;
++        
++               /*
++                * Implementation of the AttributeType|http://common.aviary.grid.redhat.com Element
++                */
++           AviaryCommon::AttributeType::AttributeType()
++        {
++
++        
++            qname = NULL;
++        
++                    property_AttributeType;
++                
++            isValidAttributeType  = false;
++        
++                  qname =  axutil_qname_create (Environment::getEnv(),
++                        "AttributeType",
++                        "http://common.aviary.grid.redhat.com",
++                        NULL);
++                
++        }
++
++       AviaryCommon::AttributeType::AttributeType(std::string arg_AttributeType)
++        {
++             
++                   qname = NULL;
++             
++                 property_AttributeType;
++             
++            isValidAttributeType  = true;
++            
++                 qname =  axutil_qname_create (Environment::getEnv(),
++                       "AttributeType",
++                       "http://common.aviary.grid.redhat.com",
++                       NULL);
++               
++                    property_AttributeType = arg_AttributeType;
++            
++        }
++        AviaryCommon::AttributeType::~AttributeType()
++        {
++
++        }
++
++        
++            bool WSF_CALL
++            AttributeType::deserializeFromString(
++                                            const axis2_char_t *node_value,
++                                            axiom_node_t *parent)
++            {
++              bool status = true;
++            
++                        setAttributeType(node_value);
++                    
++              return status;
++            }
++        
++
++        bool WSF_CALL
++        AviaryCommon::AttributeType::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++            
++        status = AXIS2_FAILURE;
++        if(parent)
++        {
++            axis2_char_t *attrib_text = NULL;
++            attrib_text = axiom_element_get_attribute_value_by_name((axiom_element_t*)axiom_node_get_data_element(parent, Environment::getEnv()), Environment::getEnv(), "nil");
++            if (attrib_text != NULL && !axutil_strcasecmp(attrib_text, "true"))
++            {
++              
++               /* but the wsdl says that, this is non nillable */
++                WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "NULL value is set to a non nillable element AttributeType");
++                status = AXIS2_FAILURE;
++               
++            }
++            else
++            {
++                axiom_node_t *text_node = NULL;
++                text_node = axiom_node_get_first_child(parent, Environment::getEnv());
++                axiom_text_t *text_element = NULL;
++                if (text_node &&
++                        axiom_node_get_node_type(text_node, Environment::getEnv()) == AXIOM_TEXT)
++                    text_element = (axiom_text_t*)axiom_node_get_data_element(text_node, Environment::getEnv());
++                text_value = "";
++                if(text_element && axiom_text_get_value(text_element, Environment::getEnv()))
++                {
++                    text_value = (axis2_char_t*)axiom_text_get_value(text_element, Environment::getEnv());
++                }
++                status = deserializeFromString(text_value, parent);
++                }
++            }
++            
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryCommon::AttributeType::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryCommon::AttributeType::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++            char* WSF_CALL
++            AviaryCommon::AttributeType::serializeToString(axutil_hash_t *namespaces)
++            {
++                axis2_char_t *text_value = NULL;
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                
++                         text_value = (axis2_char_t*)axutil_xml_quote_string(Environment::getEnv(), (axis2_char_t*)property_AttributeType.c_str(), false);
++                         if (!text_value)
++                         {
++                             text_value = (axis2_char_t*)axutil_strdup(Environment::getEnv(), property_AttributeType.c_str());
++                         }
++                      
++                return text_value;
++            }
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryCommon::AttributeType::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++            axiom_data_source_t *data_source = NULL;
++            axutil_stream_t *stream = NULL;
++            axis2_char_t *text_value;
++             
++                    current_node = parent;
++                    data_source = (axiom_data_source_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                    if (!data_source)
++                        return NULL;
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv()); /* assume parent is of type data source */
++                    if (!stream)
++                        return NULL;
++                  
++               if(!parent_tag_closed && !tag_closed)
++               {
++                  text_value = ">"; 
++                  axutil_stream_write(stream, Environment::getEnv(), text_value, axutil_strlen(text_value));
++               }
++               
++               text_value = serializeToString(namespaces);
++               if(text_value)
++               {
++                    axutil_stream_write(stream, Environment::getEnv(), text_value, axutil_strlen(text_value));
++                    AXIS2_FREE(Environment::getEnv()->allocator, text_value);
++               }
++            
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for AttributeType by  Property Number 1
++             */
++            std::string WSF_CALL
++            AviaryCommon::AttributeType::getProperty1()
++            {
++                return getAttributeType();
++            }
++
++            /**
++             * getter for AttributeType.
++             */
++            std::string WSF_CALL
++            AviaryCommon::AttributeType::getAttributeType()
++             {
++                return property_AttributeType;
++             }
++
++            /**
++             * setter for AttributeType
++             */
++            bool WSF_CALL
++            AviaryCommon::AttributeType::setAttributeType(
++                    const std::string  arg_AttributeType)
++             {
++                
++
++                if(isValidAttributeType &&
++                        arg_AttributeType == property_AttributeType)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(arg_AttributeType.empty())
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"AttributeType is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetAttributeType();
++
++                
++                        property_AttributeType = std::string(arg_AttributeType.c_str());
++                        isValidAttributeType = true;
++                    
++                return true;
++             }
++
++            
++             /**
++             * specialized enum getter for AttributeType.
++             */
++             ADBAttributeTypeEnum WSF_CALL
++             AviaryCommon::AttributeType::getAttributeTypeEnum()
++             {
++
++                
++                 if (axutil_strcmp(property_AttributeType.c_str(), "INTEGER") == 0)
++                    return AttributeType_INTEGER;
++             
++                 if (axutil_strcmp(property_AttributeType.c_str(), "FLOAT") == 0)
++                    return AttributeType_FLOAT;
++             
++                 if (axutil_strcmp(property_AttributeType.c_str(), "STRING") == 0)
++                    return AttributeType_STRING;
++             
++                 if (axutil_strcmp(property_AttributeType.c_str(), "EXPRESSION") == 0)
++                    return AttributeType_EXPRESSION;
++             
++                 if (axutil_strcmp(property_AttributeType.c_str(), "BOOLEAN") == 0)
++                    return AttributeType_BOOLEAN;
++             
++                 if (axutil_strcmp(property_AttributeType.c_str(), "UNDEFINED") == 0)
++                    return AttributeType_UNDEFINED;
++             
++                 if (axutil_strcmp(property_AttributeType.c_str(), "ERROR") == 0)
++                    return AttributeType_ERROR;
++             
++             
++                 /* Error: none of the strings matched; invalid enum value */
++                 return (ADBAttributeTypeEnum)-1;
++             }
++             
++             
++             /**
++             * specialized enum setter for AttributeType.
++             */
++             bool WSF_CALL
++            AviaryCommon::AttributeType::setAttributeTypeEnum(const ADBAttributeTypeEnum  arg_AttributeType)
++             {
++                
++
++                
++                resetAttributeType();
++
++                   
++                   switch (arg_AttributeType)
++                   {
++                     
++                       case AttributeType_INTEGER :
++                            property_AttributeType = (axis2_char_t *)axutil_strdup(Environment::getEnv(), "INTEGER");
++                          break;
++                     
++                       case AttributeType_FLOAT :
++                            property_AttributeType = (axis2_char_t *)axutil_strdup(Environment::getEnv(), "FLOAT");
++                          break;
++                     
++                       case AttributeType_STRING :
++                            property_AttributeType = (axis2_char_t *)axutil_strdup(Environment::getEnv(), "STRING");
++                          break;
++                     
++                       case AttributeType_EXPRESSION :
++                            property_AttributeType = (axis2_char_t *)axutil_strdup(Environment::getEnv(), "EXPRESSION");
++                          break;
++                     
++                       case AttributeType_BOOLEAN :
++                            property_AttributeType = (axis2_char_t *)axutil_strdup(Environment::getEnv(), "BOOLEAN");
++                          break;
++                     
++                       case AttributeType_UNDEFINED :
++                            property_AttributeType = (axis2_char_t *)axutil_strdup(Environment::getEnv(), "UNDEFINED");
++                          break;
++                     
++                       case AttributeType_ERROR :
++                            property_AttributeType = (axis2_char_t *)axutil_strdup(Environment::getEnv(), "ERROR");
++                          break;
++                     
++                     
++                       default:
++                          isValidAttributeType = false;
++                          property_AttributeType = "";
++                          WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Error setting AttributeType: undefined enum value");
++                          return false;
++                   }
++                
++                   if(property_AttributeType.empty())
++                   {
++                       return AXIS2_FAILURE;
++                   }
++                     isValidAttributeType = true;
++                        
++                
++                return true;
++             }
++             
++
++           /**
++            * resetter for AttributeType
++            */
++           bool WSF_CALL
++           AviaryCommon::AttributeType::resetAttributeType()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidAttributeType = false; 
++               return true;
++           }
++
++           /**
++            * Check whether AttributeType is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::AttributeType::isAttributeTypeNil()
++           {
++               return !isValidAttributeType;
++           }
++
++           /**
++            * Set AttributeType to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::AttributeType::setAttributeTypeNil()
++           {
++               return resetAttributeType();
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_Attributes.cpp b/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_Attributes.cpp
+new file mode 100644
+index 0000000..f2dc649
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_Attributes.cpp
+@@ -0,0 +1,735 @@
++
++
++        /**
++         * Attributes.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryCommon_Attributes.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryCommon;
++        
++                /*
++                 * This type was generated from the piece of schema that had
++                 * name = Attributes
++                 * Namespace URI = http://common.aviary.grid.redhat.com
++                 * Namespace Prefix = ns1
++                 */
++           AviaryCommon::Attributes::Attributes()
++        {
++
++        
++                property_Attrs  = NULL;
++              
++            isValidAttrs  = false;
++        
++        }
++
++       AviaryCommon::Attributes::Attributes(std::vector<AviaryCommon::Attribute*>* arg_Attrs)
++        {
++             
++               property_Attrs  = NULL;
++             
++            isValidAttrs  = true;
++            
++                    property_Attrs = arg_Attrs;
++            
++        }
++        AviaryCommon::Attributes::~Attributes()
++        {
++
++        }
++
++        
++
++        bool WSF_CALL
++        AviaryCommon::Attributes::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++               int i = 0;
++            
++               int sequence_broken = 0;
++               axiom_node_t *tmp_node = NULL;
++            
++            axutil_qname_t *element_qname = NULL; 
++            
++               axiom_node_t *first_node = NULL;
++               bool is_early_node_valid = true;
++               axiom_node_t *current_node = NULL;
++               axiom_element_t *current_element = NULL;
++            
++              
++              while(parent && axiom_node_get_node_type(parent, Environment::getEnv()) != AXIOM_ELEMENT)
++              {
++                  parent = axiom_node_get_next_sibling(parent, Environment::getEnv());
++              }
++              if (NULL == parent)
++              {   
++                return AXIS2_FAILURE;
++              }
++              
++                      
++                      first_node = axiom_node_get_first_child(parent, Environment::getEnv());
++                      
++                    
++                       { 
++                    /*
++                     * building Attrs array
++                     */
++                       std::vector<AviaryCommon::Attribute*>* arr_list =new std::vector<AviaryCommon::Attribute*>();
++                   
++
++                     
++                     /*
++                      * building attrs element
++                      */
++                     
++                     
++                     
++                                    element_qname = axutil_qname_create(Environment::getEnv(), "attrs", NULL, NULL);
++                                  
++                               
++                               for (i = 0, sequence_broken = 0, current_node = first_node; !sequence_broken && current_node != NULL;)
++                                             
++                               {
++                                  if(axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                  {
++                                     current_node =axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                     is_early_node_valid = false;
++                                     continue;
++                                  }
++                                  
++                                  current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                  mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++
++                                  if (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("attrs", axiom_element_get_localname(current_element, Environment::getEnv())))
++                                  {
++                                  
++                                      is_early_node_valid = true;
++                                      
++                                     AviaryCommon::Attribute* element = new AviaryCommon::Attribute();
++                                          
++                                          status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                          
++                                          if(AXIS2_FAILURE ==  status)
++                                          {
++					  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "failed in building element attrs ");
++                                          }
++                                          else
++                                          {
++                                            arr_list->push_back(element);
++                                            
++                                          }
++                                        
++                                     if(AXIS2_FAILURE ==  status)
++                                     {
++                                         WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in setting the value for attrs ");
++                                         if(element_qname)
++                                         {
++                                            axutil_qname_free(element_qname, Environment::getEnv());
++                                         }
++                                         if(arr_list)
++                                         {
++                                            delete arr_list;
++                                         }
++                                         return false;
++                                     }
++
++                                     i++;
++                                    current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                  }
++                                  else
++                                  {
++                                      is_early_node_valid = false;
++                                      sequence_broken = 1;
++                                  }
++                                  
++                               }
++
++                               
++                                   if (i < 0)
++                                   {
++                                     /* found element out of order */
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"attrs (@minOccurs = '0') only have %d elements", i);
++                                     if(element_qname)
++                                     {
++                                        axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     if(arr_list)
++                                     {
++                                        delete arr_list;
++                                     }
++                                     return false;
++                                   }
++                               
++
++                               if(0 == arr_list->size())
++                               {
++                                    delete arr_list;
++                               }
++                               else
++                               {
++                                    status = setAttrs(arr_list);
++                               }
++
++                              
++                            } 
++                        
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryCommon::Attributes::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryCommon::Attributes::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryCommon::Attributes::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++             axis2_char_t *string_to_stream;
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++                axiom_namespace_t *ns1 = NULL;
++
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                axis2_char_t *p_prefix = NULL;
++            
++               int i = 0;
++               int count = 0;
++               void *element = NULL;
++             
++                    axis2_char_t text_value_1[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++               axis2_char_t *start_input_str = NULL;
++               axis2_char_t *end_input_str = NULL;
++               unsigned int start_input_str_len = 0;
++               unsigned int end_input_str_len = 0;
++            
++            
++               axiom_data_source_t *data_source = NULL;
++               axutil_stream_t *stream = NULL;
++
++            
++                    current_node = parent;
++                    data_source = (axiom_data_source_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                    if (!data_source)
++                        return NULL;
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv()); /* assume parent is of type data source */
++                    if (!stream)
++                        return NULL;
++                  
++            if(!parent_tag_closed)
++            {
++            
++              string_to_stream = ">"; 
++              axutil_stream_write(stream, Environment::getEnv(), string_to_stream, axutil_strlen(string_to_stream));
++              tag_closed = 1;
++            
++            }
++            
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidAttrs)
++                   {
++                      
++                           /* no need to complain for minoccurs=0 element */
++                            
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("attrs"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("attrs")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     /*
++                      * Parsing Attrs array
++                      */
++                     if (property_Attrs != NULL)
++                     {
++                        
++
++                            sprintf(start_input_str, "<%s%sattrs",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                         start_input_str_len = axutil_strlen(start_input_str);
++
++                         sprintf(end_input_str, "</%s%sattrs>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                         end_input_str_len = axutil_strlen(end_input_str);
++
++                         count = property_Attrs->size();
++                         for(i = 0; i < count; i++)
++                         {
++                            AviaryCommon::Attribute* element = (*property_Attrs)[i];
++
++                            if(NULL == element) 
++                            {
++                                continue;
++                            }
++
++                    
++                     
++                     /*
++                      * parsing attrs element
++                      */
++
++                    
++                     
++                            if(!element->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                            }
++                            element->serialize(current_node, parent_element,
++                                                                                 element->isParticle() || false, namespaces, next_ns_index);
++                            
++                            if(!element->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                            }
++                            
++                         }
++                     }
++                   
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for attrs by  Property Number 1
++             */
++            std::vector<AviaryCommon::Attribute*>* WSF_CALL
++            AviaryCommon::Attributes::getProperty1()
++            {
++                return getAttrs();
++            }
++
++            /**
++             * getter for attrs.
++             */
++            std::vector<AviaryCommon::Attribute*>* WSF_CALL
++            AviaryCommon::Attributes::getAttrs()
++             {
++                return property_Attrs;
++             }
++
++            /**
++             * setter for attrs
++             */
++            bool WSF_CALL
++            AviaryCommon::Attributes::setAttrs(
++                    std::vector<AviaryCommon::Attribute*>*  arg_Attrs)
++             {
++                
++                 int size = 0;
++                 int i = 0;
++                 bool non_nil_exists = false;
++                
++
++                if(isValidAttrs &&
++                        arg_Attrs == property_Attrs)
++                {
++                    
++                    return true;
++                }
++
++                
++                 size = arg_Attrs->size();
++                 
++                 if (size < 0)
++                 {
++                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"attrs has less than minOccurs(0)");
++                     return false;
++                 }
++                 for(i = 0; i < size; i ++ )
++                 {
++                     if(NULL != (*arg_Attrs)[i])
++                     {
++                         non_nil_exists = true;
++                         break;
++                     }
++                 }
++
++                 
++
++                
++                resetAttrs();
++
++                
++                    if(NULL == arg_Attrs)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_Attrs = arg_Attrs;
++                        if(non_nil_exists)
++                        {
++                            isValidAttrs = true;
++                        }
++                        
++                    
++                return true;
++             }
++
++            
++            /**
++             * Get ith element of attrs.
++             */
++            AviaryCommon::Attribute* WSF_CALL
++            AviaryCommon::Attributes::getAttrsAt(int i)
++            {
++                AviaryCommon::Attribute* ret_val;
++                if(property_Attrs == NULL)
++                {
++                    return (AviaryCommon::Attribute*)0;
++                }
++                ret_val =   (*property_Attrs)[i];
++                
++                    return ret_val;
++                  
++            }
++
++            /**
++             * Set the ith element of attrs.
++             */
++           bool WSF_CALL
++            AviaryCommon::Attributes::setAttrsAt(int i,
++                    AviaryCommon::Attribute* arg_Attrs)
++            {
++                 AviaryCommon::Attribute* element;
++                int size = 0;
++
++                int non_nil_count;
++                bool non_nil_exists = false;
++
++                 
++
++                if( isValidAttrs &&
++                    property_Attrs &&
++                  
++                    arg_Attrs == (*property_Attrs)[i])
++                  
++                 {
++                    
++                    return AXIS2_SUCCESS; 
++                }
++
++                   
++                     non_nil_exists = true;
++                  
++
++                if(property_Attrs == NULL)
++                {
++                    property_Attrs = new std::vector<AviaryCommon::Attribute*>();
++                }
++                else{
++                /* check whether there already exist an element */
++                element = (*property_Attrs)[i];
++                }
++
++                
++                        if(NULL != element)
++                        {
++                          
++                          
++                          
++                                delete element;
++                             
++                        }
++                        
++                    
++                    if(!non_nil_exists)
++                    {
++                        
++                        isValidAttrs = true;
++                        (*property_Attrs)[i]= NULL;
++                        
++                        return AXIS2_SUCCESS;
++                    }
++                
++                    (*property_Attrs)[i] = arg_Attrs;
++                  
++
++               isValidAttrs = true;
++                
++                return AXIS2_SUCCESS;
++            }
++
++            /**
++             * Add to attrs.
++             */
++            bool WSF_CALL
++            AviaryCommon::Attributes::addAttrs(
++                    AviaryCommon::Attribute* arg_Attrs)
++             {
++
++                
++                    if( NULL == arg_Attrs
++                     )
++                    {
++                      
++                           return true; 
++                        
++                    }
++                  
++
++                if(property_Attrs == NULL)
++                {
++                    property_Attrs = new std::vector<AviaryCommon::Attribute*>();
++                }
++              
++               property_Attrs->push_back(arg_Attrs);
++              
++                isValidAttrs = true;
++                return true;
++             }
++
++            /**
++             * Get the size of the attrs array.
++             */
++            int WSF_CALL
++            AviaryCommon::Attributes::sizeofAttrs()
++            {
++
++                if(property_Attrs == NULL)
++                {
++                    return 0;
++                }
++                return property_Attrs->size();
++            }
++
++            /**
++             * remove the ith element, same as set_nil_at.
++             */
++            bool WSF_CALL
++            AviaryCommon::Attributes::removeAttrsAt(int i)
++            {
++                return setAttrsNilAt(i);
++            }
++
++            
++
++           /**
++            * resetter for attrs
++            */
++           bool WSF_CALL
++           AviaryCommon::Attributes::resetAttrs()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++                if (property_Attrs != NULL)
++                {
++                  std::vector<AviaryCommon::Attribute*>::iterator it =  property_Attrs->begin();
++                  for( ; it <  property_Attrs->end() ; ++it)
++                  {
++                     AviaryCommon::Attribute* element = *it;
++                
++            
++                
++
++                if(element != NULL)
++                {
++                   
++                   
++                         delete  element;
++                     
++
++                   }
++
++                
++                
++                
++               }
++
++             }
++                
++                    if(NULL != property_Attrs)
++                 delete property_Attrs;
++                
++               isValidAttrs = false; 
++               return true;
++           }
++
++           /**
++            * Check whether attrs is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::Attributes::isAttrsNil()
++           {
++               return !isValidAttrs;
++           }
++
++           /**
++            * Set attrs to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::Attributes::setAttrsNil()
++           {
++               return resetAttrs();
++           }
++
++           
++           /**
++            * Check whether attrs is nill at i
++            */
++           bool WSF_CALL
++           AviaryCommon::Attributes::isAttrsNilAt(int i)
++           {
++               return (isValidAttrs == false ||
++                       NULL == property_Attrs ||
++                     NULL == (*property_Attrs)[i]);
++            }
++
++           /**
++            * Set attrs to nil at i
++            */
++           bool WSF_CALL
++           AviaryCommon::Attributes::setAttrsNilAt(int i)
++           {
++                int size = 0;
++                int j;
++                bool non_nil_exists = false;
++
++                int k = 0;
++
++                if(property_Attrs == NULL ||
++                            isValidAttrs == false)
++                {
++                    
++                    non_nil_exists = false;
++                }
++                else
++                {
++                    size = property_Attrs->size();
++                    for(j = 0, k = 0; j < size; j ++ )
++                    {
++                        if(i == j) continue; 
++                        if(NULL != (*property_Attrs)[i])
++                        {
++                            k++;
++                            non_nil_exists = true;
++                            if( k >= 0)
++                            {
++                                break;
++                            }
++                        }
++                    }
++                }
++                
++
++                if( k < 0)
++                {
++                       WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "Size of the array of attrs is beinng set to be smaller than the specificed number of minOccurs(0)");
++                       return AXIS2_FAILURE;
++                }
++ 
++                if(property_Attrs == NULL)
++                {
++                    isValidAttrs = false;
++                    
++                    return true;
++                }
++                 
++                 /* check whether there already exist an element */
++                 AviaryCommon::Attribute* element = (*property_Attrs)[i];
++                if(NULL != element)
++                {
++                  
++                  
++                  
++                        delete element;
++                     
++                 }
++                 
++                    if(!non_nil_exists)
++                    {
++                        
++                        isValidAttrs = false;
++                        (*property_Attrs)[i] = NULL;
++                        return AXIS2_SUCCESS;
++                    }
++                
++
++                
++                (*property_Attrs)[i] = NULL;
++                
++                return AXIS2_SUCCESS;
++
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_JobConstraint.cpp b/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_JobConstraint.cpp
+new file mode 100644
+index 0000000..f17f65c
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_JobConstraint.cpp
+@@ -0,0 +1,717 @@
++
++
++        /**
++         * JobConstraint.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryCommon_JobConstraint.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryCommon;
++        
++                /*
++                 * This type was generated from the piece of schema that had
++                 * name = JobConstraint
++                 * Namespace URI = http://common.aviary.grid.redhat.com
++                 * Namespace Prefix = ns1
++                 */
++           AviaryCommon::JobConstraint::JobConstraint()
++        {
++
++        
++                property_Type  = NULL;
++              
++            isValidType  = false;
++        
++                    property_Value;
++                
++            isValidValue  = false;
++        
++        }
++
++       AviaryCommon::JobConstraint::JobConstraint(AviaryCommon::JobConstraintType* arg_Type,std::string arg_Value)
++        {
++             
++               property_Type  = NULL;
++             
++            isValidType  = true;
++            
++                 property_Value;
++             
++            isValidValue  = true;
++            
++                    property_Type = arg_Type;
++            
++                    property_Value = arg_Value;
++            
++        }
++        AviaryCommon::JobConstraint::~JobConstraint()
++        {
++
++        }
++
++        
++
++        bool WSF_CALL
++        AviaryCommon::JobConstraint::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++            axutil_qname_t *element_qname = NULL; 
++            
++               axiom_node_t *first_node = NULL;
++               bool is_early_node_valid = true;
++               axiom_node_t *current_node = NULL;
++               axiom_element_t *current_element = NULL;
++            
++              
++              while(parent && axiom_node_get_node_type(parent, Environment::getEnv()) != AXIOM_ELEMENT)
++              {
++                  parent = axiom_node_get_next_sibling(parent, Environment::getEnv());
++              }
++              if (NULL == parent)
++              {   
++                return AXIS2_FAILURE;
++              }
++              
++                      
++                      first_node = axiom_node_get_first_child(parent, Environment::getEnv());
++                      
++                    
++
++                     
++                     /*
++                      * building type element
++                      */
++                     
++                     
++                     
++                                   current_node = first_node;
++                                   is_early_node_valid = false;
++                                   
++                                   
++                                    while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                    {
++                                        current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                    }
++                                    if(current_node != NULL)
++                                    {
++                                        current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                        mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                    }
++                                   
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "type", NULL, NULL);
++                                 
++
++                           if (isParticle() ||  
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("type", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("type", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 AviaryCommon::JobConstraintType* element = new AviaryCommon::JobConstraintType();
++
++                                      status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                      if(AXIS2_FAILURE == status)
++                                      {
++                                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in building adb object for element type");
++                                      }
++                                      else
++                                      {
++                                          status = setType(element);
++                                      }
++                                    
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for type ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element type missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building value element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "value", NULL, NULL);
++                                 
++
++                           if ( 
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("value", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("value", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 
++                                      text_value = axiom_element_get_text(current_element, Environment::getEnv(), current_node);
++                                      if(text_value != NULL)
++                                      {
++                                            status = setValue(text_value);
++                                      }
++                                      
++                                      else
++                                      {
++                                            /*
++                                             * axis2_qname_t *qname = NULL;
++                                             * axiom_attribute_t *the_attri = NULL;
++                                             * 
++                                             * qname = axutil_qname_create(Environment::getEnv(), "nil", "http://www.w3.org/2001/XMLSchema-instance", "xsi");
++                                             * the_attri = axiom_element_get_attribute(current_element, Environment::getEnv(), qname);
++                                             */
++                                            /* currently thereis a bug in the axiom_element_get_attribute, so we have to go to this bad method */
++
++                                            axiom_attribute_t *the_attri = NULL;
++                                            axis2_char_t *attrib_text = NULL;
++                                            axutil_hash_t *attribute_hash = NULL;
++
++                                            attribute_hash = axiom_element_get_all_attributes(current_element, Environment::getEnv());
++
++                                            attrib_text = NULL;
++                                            if(attribute_hash)
++                                            {
++                                                 axutil_hash_index_t *hi;
++                                                 void *val;
++                                                 const void *key;
++                                        
++                                                 for (hi = axutil_hash_first(attribute_hash, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                                                 {
++                                                     axutil_hash_this(hi, &key, NULL, &val);
++                                                     
++                                                     if(strstr((axis2_char_t*)key, "nil|http://www.w3.org/2001/XMLSchema-instance"))
++                                                     {
++                                                         the_attri = (axiom_attribute_t*)val;
++                                                         break;
++                                                     }
++                                                 }
++                                            }
++
++                                            if(the_attri)
++                                            {
++                                                attrib_text = axiom_attribute_get_value(the_attri, Environment::getEnv());
++                                            }
++                                            else
++                                            {
++                                                /* this is hoping that attribute is stored in "http://www.w3.org/2001/XMLSchema-instance", this happnes when name is in default namespace */
++                                                attrib_text = axiom_element_get_attribute_value_by_name(current_element, Environment::getEnv(), "nil");
++                                            }
++
++                                            if(attrib_text && 0 == axutil_strcmp(attrib_text, "1"))
++                                            {
++                                                WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "NULL value is set to a non nillable element value");
++                                                status = AXIS2_FAILURE;
++                                            }
++                                            else
++                                            {
++                                                /* after all, we found this is a empty string */
++                                                status = setValue("");
++                                            }
++                                      }
++                                      
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for value ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element value missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryCommon::JobConstraint::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryCommon::JobConstraint::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryCommon::JobConstraint::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++             axis2_char_t *string_to_stream;
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++                axiom_namespace_t *ns1 = NULL;
++
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                axis2_char_t *p_prefix = NULL;
++            
++                    axis2_char_t text_value_1[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++                    axis2_char_t *text_value_2;
++                    axis2_char_t *text_value_2_temp;
++                    
++               axis2_char_t *start_input_str = NULL;
++               axis2_char_t *end_input_str = NULL;
++               unsigned int start_input_str_len = 0;
++               unsigned int end_input_str_len = 0;
++            
++            
++               axiom_data_source_t *data_source = NULL;
++               axutil_stream_t *stream = NULL;
++
++            
++                    current_node = parent;
++                    data_source = (axiom_data_source_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                    if (!data_source)
++                        return NULL;
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv()); /* assume parent is of type data source */
++                    if (!stream)
++                        return NULL;
++                  
++            if(!parent_tag_closed)
++            {
++            
++              string_to_stream = ">"; 
++              axutil_stream_write(stream, Environment::getEnv(), string_to_stream, axutil_strlen(string_to_stream));
++              tag_closed = 1;
++            
++            }
++            
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidType)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property type");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("type"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("type")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing type element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%stype",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":""); 
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%stype>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                     
++                            if(!property_Type->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                            }
++                            property_Type->serialize(current_node, parent_element,
++                                                                                 property_Type->isParticle() || false, namespaces, next_ns_index);
++                            
++                            if(!property_Type->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                            }
++                            
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidValue)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property value");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("value"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("value")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing value element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%svalue>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%svalue>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                    
++                           text_value_2 = (axis2_char_t*)property_Value.c_str();
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                           
++                            
++                           text_value_2_temp = axutil_xml_quote_string(Environment::getEnv(), text_value_2, true);
++                           if (text_value_2_temp)
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_2_temp, axutil_strlen(text_value_2_temp));
++                               AXIS2_FREE(Environment::getEnv()->allocator, text_value_2_temp);
++                           }
++                           else
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_2, axutil_strlen(text_value_2));
++                           }
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                           
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for type by  Property Number 1
++             */
++            AviaryCommon::JobConstraintType* WSF_CALL
++            AviaryCommon::JobConstraint::getProperty1()
++            {
++                return getType();
++            }
++
++            /**
++             * getter for type.
++             */
++            AviaryCommon::JobConstraintType* WSF_CALL
++            AviaryCommon::JobConstraint::getType()
++             {
++                return property_Type;
++             }
++
++            /**
++             * setter for type
++             */
++            bool WSF_CALL
++            AviaryCommon::JobConstraint::setType(
++                    AviaryCommon::JobConstraintType*  arg_Type)
++             {
++                
++
++                if(isValidType &&
++                        arg_Type == property_Type)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(NULL == arg_Type)
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"type is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetType();
++
++                
++                    if(NULL == arg_Type)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_Type = arg_Type;
++                        isValidType = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for type
++            */
++           bool WSF_CALL
++           AviaryCommon::JobConstraint::resetType()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++            
++                
++
++                if(property_Type != NULL)
++                {
++                   
++                   
++                         delete  property_Type;
++                     
++
++                   }
++
++                
++                
++                
++               isValidType = false; 
++               return true;
++           }
++
++           /**
++            * Check whether type is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::JobConstraint::isTypeNil()
++           {
++               return !isValidType;
++           }
++
++           /**
++            * Set type to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::JobConstraint::setTypeNil()
++           {
++               return resetType();
++           }
++
++           
++
++            /**
++             * Getter for value by  Property Number 2
++             */
++            std::string WSF_CALL
++            AviaryCommon::JobConstraint::getProperty2()
++            {
++                return getValue();
++            }
++
++            /**
++             * getter for value.
++             */
++            std::string WSF_CALL
++            AviaryCommon::JobConstraint::getValue()
++             {
++                return property_Value;
++             }
++
++            /**
++             * setter for value
++             */
++            bool WSF_CALL
++            AviaryCommon::JobConstraint::setValue(
++                    const std::string  arg_Value)
++             {
++                
++
++                if(isValidValue &&
++                        arg_Value == property_Value)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(arg_Value.empty())
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"value is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetValue();
++
++                
++                        property_Value = std::string(arg_Value.c_str());
++                        isValidValue = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for value
++            */
++           bool WSF_CALL
++           AviaryCommon::JobConstraint::resetValue()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidValue = false; 
++               return true;
++           }
++
++           /**
++            * Check whether value is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::JobConstraint::isValueNil()
++           {
++               return !isValidValue;
++           }
++
++           /**
++            * Set value to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::JobConstraint::setValueNil()
++           {
++               return resetValue();
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_JobConstraintType.cpp b/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_JobConstraintType.cpp
+new file mode 100644
+index 0000000..b5c7161
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_JobConstraintType.cpp
+@@ -0,0 +1,361 @@
++
++
++        /**
++         * JobConstraintType.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryCommon_JobConstraintType.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryCommon;
++        
++               /*
++                * Implementation of the JobConstraintType|http://common.aviary.grid.redhat.com Element
++                */
++           AviaryCommon::JobConstraintType::JobConstraintType()
++        {
++
++        
++            qname = NULL;
++        
++                    property_JobConstraintType;
++                
++            isValidJobConstraintType  = false;
++        
++                  qname =  axutil_qname_create (Environment::getEnv(),
++                        "JobConstraintType",
++                        "http://common.aviary.grid.redhat.com",
++                        NULL);
++                
++        }
++
++       AviaryCommon::JobConstraintType::JobConstraintType(std::string arg_JobConstraintType)
++        {
++             
++                   qname = NULL;
++             
++                 property_JobConstraintType;
++             
++            isValidJobConstraintType  = true;
++            
++                 qname =  axutil_qname_create (Environment::getEnv(),
++                       "JobConstraintType",
++                       "http://common.aviary.grid.redhat.com",
++                       NULL);
++               
++                    property_JobConstraintType = arg_JobConstraintType;
++            
++        }
++        AviaryCommon::JobConstraintType::~JobConstraintType()
++        {
++
++        }
++
++        
++            bool WSF_CALL
++            JobConstraintType::deserializeFromString(
++                                            const axis2_char_t *node_value,
++                                            axiom_node_t *parent)
++            {
++              bool status = true;
++            
++                        setJobConstraintType(node_value);
++                    
++              return status;
++            }
++        
++
++        bool WSF_CALL
++        AviaryCommon::JobConstraintType::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++            
++        status = AXIS2_FAILURE;
++        if(parent)
++        {
++            axis2_char_t *attrib_text = NULL;
++            attrib_text = axiom_element_get_attribute_value_by_name((axiom_element_t*)axiom_node_get_data_element(parent, Environment::getEnv()), Environment::getEnv(), "nil");
++            if (attrib_text != NULL && !axutil_strcasecmp(attrib_text, "true"))
++            {
++              
++               /* but the wsdl says that, this is non nillable */
++                WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "NULL value is set to a non nillable element JobConstraintType");
++                status = AXIS2_FAILURE;
++               
++            }
++            else
++            {
++                axiom_node_t *text_node = NULL;
++                text_node = axiom_node_get_first_child(parent, Environment::getEnv());
++                axiom_text_t *text_element = NULL;
++                if (text_node &&
++                        axiom_node_get_node_type(text_node, Environment::getEnv()) == AXIOM_TEXT)
++                    text_element = (axiom_text_t*)axiom_node_get_data_element(text_node, Environment::getEnv());
++                text_value = "";
++                if(text_element && axiom_text_get_value(text_element, Environment::getEnv()))
++                {
++                    text_value = (axis2_char_t*)axiom_text_get_value(text_element, Environment::getEnv());
++                }
++                status = deserializeFromString(text_value, parent);
++                }
++            }
++            
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryCommon::JobConstraintType::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryCommon::JobConstraintType::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++            char* WSF_CALL
++            AviaryCommon::JobConstraintType::serializeToString(axutil_hash_t *namespaces)
++            {
++                axis2_char_t *text_value = NULL;
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                
++                         text_value = (axis2_char_t*)axutil_xml_quote_string(Environment::getEnv(), (axis2_char_t*)property_JobConstraintType.c_str(), false);
++                         if (!text_value)
++                         {
++                             text_value = (axis2_char_t*)axutil_strdup(Environment::getEnv(), property_JobConstraintType.c_str());
++                         }
++                      
++                return text_value;
++            }
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryCommon::JobConstraintType::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++            axiom_data_source_t *data_source = NULL;
++            axutil_stream_t *stream = NULL;
++            axis2_char_t *text_value;
++             
++                    current_node = parent;
++                    data_source = (axiom_data_source_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                    if (!data_source)
++                        return NULL;
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv()); /* assume parent is of type data source */
++                    if (!stream)
++                        return NULL;
++                  
++               if(!parent_tag_closed && !tag_closed)
++               {
++                  text_value = ">"; 
++                  axutil_stream_write(stream, Environment::getEnv(), text_value, axutil_strlen(text_value));
++               }
++               
++               text_value = serializeToString(namespaces);
++               if(text_value)
++               {
++                    axutil_stream_write(stream, Environment::getEnv(), text_value, axutil_strlen(text_value));
++                    AXIS2_FREE(Environment::getEnv()->allocator, text_value);
++               }
++            
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for JobConstraintType by  Property Number 1
++             */
++            std::string WSF_CALL
++            AviaryCommon::JobConstraintType::getProperty1()
++            {
++                return getJobConstraintType();
++            }
++
++            /**
++             * getter for JobConstraintType.
++             */
++            std::string WSF_CALL
++            AviaryCommon::JobConstraintType::getJobConstraintType()
++             {
++                return property_JobConstraintType;
++             }
++
++            /**
++             * setter for JobConstraintType
++             */
++            bool WSF_CALL
++            AviaryCommon::JobConstraintType::setJobConstraintType(
++                    const std::string  arg_JobConstraintType)
++             {
++                
++
++                if(isValidJobConstraintType &&
++                        arg_JobConstraintType == property_JobConstraintType)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(arg_JobConstraintType.empty())
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"JobConstraintType is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetJobConstraintType();
++
++                
++                        property_JobConstraintType = std::string(arg_JobConstraintType.c_str());
++                        isValidJobConstraintType = true;
++                    
++                return true;
++             }
++
++            
++             /**
++             * specialized enum getter for JobConstraintType.
++             */
++             ADBJobConstraintTypeEnum WSF_CALL
++             AviaryCommon::JobConstraintType::getJobConstraintTypeEnum()
++             {
++
++                
++                 if (axutil_strcmp(property_JobConstraintType.c_str(), "CMD") == 0)
++                    return JobConstraintType_CMD;
++             
++                 if (axutil_strcmp(property_JobConstraintType.c_str(), "ARGS") == 0)
++                    return JobConstraintType_ARGS;
++             
++                 if (axutil_strcmp(property_JobConstraintType.c_str(), "OWNER") == 0)
++                    return JobConstraintType_OWNER;
++             
++             
++                 /* Error: none of the strings matched; invalid enum value */
++                 return (ADBJobConstraintTypeEnum)-1;
++             }
++             
++             
++             /**
++             * specialized enum setter for JobConstraintType.
++             */
++             bool WSF_CALL
++            AviaryCommon::JobConstraintType::setJobConstraintTypeEnum(const ADBJobConstraintTypeEnum  arg_JobConstraintType)
++             {
++                
++
++                
++                resetJobConstraintType();
++
++                   
++                   switch (arg_JobConstraintType)
++                   {
++                     
++                       case JobConstraintType_CMD :
++                            property_JobConstraintType = (axis2_char_t *)axutil_strdup(Environment::getEnv(), "CMD");
++                          break;
++                     
++                       case JobConstraintType_ARGS :
++                            property_JobConstraintType = (axis2_char_t *)axutil_strdup(Environment::getEnv(), "ARGS");
++                          break;
++                     
++                       case JobConstraintType_OWNER :
++                            property_JobConstraintType = (axis2_char_t *)axutil_strdup(Environment::getEnv(), "OWNER");
++                          break;
++                     
++                     
++                       default:
++                          isValidJobConstraintType = false;
++                          property_JobConstraintType = "";
++                          WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Error setting JobConstraintType: undefined enum value");
++                          return false;
++                   }
++                
++                   if(property_JobConstraintType.empty())
++                   {
++                       return AXIS2_FAILURE;
++                   }
++                     isValidJobConstraintType = true;
++                        
++                
++                return true;
++             }
++             
++
++           /**
++            * resetter for JobConstraintType
++            */
++           bool WSF_CALL
++           AviaryCommon::JobConstraintType::resetJobConstraintType()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidJobConstraintType = false; 
++               return true;
++           }
++
++           /**
++            * Check whether JobConstraintType is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::JobConstraintType::isJobConstraintTypeNil()
++           {
++               return !isValidJobConstraintType;
++           }
++
++           /**
++            * Set JobConstraintType to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::JobConstraintType::setJobConstraintTypeNil()
++           {
++               return resetJobConstraintType();
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_JobData.cpp b/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_JobData.cpp
+new file mode 100644
+index 0000000..fd24b98
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_JobData.cpp
+@@ -0,0 +1,679 @@
++
++
++        /**
++         * JobData.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryCommon_JobData.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryCommon;
++        
++                /*
++                 * This type was generated from the piece of schema that had
++                 * name = JobData
++                 * Namespace URI = http://common.aviary.grid.redhat.com
++                 * Namespace Prefix = ns1
++                 */
++           AviaryCommon::JobData::JobData()
++        {
++
++        
++                property_Id  = NULL;
++              
++            isValidId  = false;
++        
++                property_Type  = NULL;
++              
++            isValidType  = false;
++        
++        }
++
++       AviaryCommon::JobData::JobData(AviaryCommon::JobID* arg_Id,AviaryCommon::JobDataType* arg_Type)
++        {
++             
++               property_Id  = NULL;
++             
++            isValidId  = true;
++            
++               property_Type  = NULL;
++             
++            isValidType  = true;
++            
++                    property_Id = arg_Id;
++            
++                    property_Type = arg_Type;
++            
++        }
++        AviaryCommon::JobData::~JobData()
++        {
++
++        }
++
++        
++
++        bool WSF_CALL
++        AviaryCommon::JobData::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++            axutil_qname_t *element_qname = NULL; 
++            
++               axiom_node_t *first_node = NULL;
++               bool is_early_node_valid = true;
++               axiom_node_t *current_node = NULL;
++               axiom_element_t *current_element = NULL;
++            
++              
++              while(parent && axiom_node_get_node_type(parent, Environment::getEnv()) != AXIOM_ELEMENT)
++              {
++                  parent = axiom_node_get_next_sibling(parent, Environment::getEnv());
++              }
++              if (NULL == parent)
++              {   
++                return AXIS2_FAILURE;
++              }
++              
++                      
++                      first_node = axiom_node_get_first_child(parent, Environment::getEnv());
++                      
++                    
++
++                     
++                     /*
++                      * building id element
++                      */
++                     
++                     
++                     
++                                   current_node = first_node;
++                                   is_early_node_valid = false;
++                                   
++                                   
++                                    while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                    {
++                                        current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                    }
++                                    if(current_node != NULL)
++                                    {
++                                        current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                        mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                    }
++                                   
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "id", NULL, NULL);
++                                 
++
++                           if (isParticle() ||  
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("id", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("id", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 AviaryCommon::JobID* element = new AviaryCommon::JobID();
++
++                                      status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                      if(AXIS2_FAILURE == status)
++                                      {
++                                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in building adb object for element id");
++                                      }
++                                      else
++                                      {
++                                          status = setId(element);
++                                      }
++                                    
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for id ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element id missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building type element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "type", NULL, NULL);
++                                 
++
++                           if (isParticle() ||  
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("type", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("type", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 AviaryCommon::JobDataType* element = new AviaryCommon::JobDataType();
++
++                                      status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                      if(AXIS2_FAILURE == status)
++                                      {
++                                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in building adb object for element type");
++                                      }
++                                      else
++                                      {
++                                          status = setType(element);
++                                      }
++                                    
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for type ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element type missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryCommon::JobData::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryCommon::JobData::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryCommon::JobData::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++             axis2_char_t *string_to_stream;
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++                axiom_namespace_t *ns1 = NULL;
++
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                axis2_char_t *p_prefix = NULL;
++            
++                    axis2_char_t text_value_1[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++                    axis2_char_t text_value_2[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++               axis2_char_t *start_input_str = NULL;
++               axis2_char_t *end_input_str = NULL;
++               unsigned int start_input_str_len = 0;
++               unsigned int end_input_str_len = 0;
++            
++            
++               axiom_data_source_t *data_source = NULL;
++               axutil_stream_t *stream = NULL;
++
++            
++                    current_node = parent;
++                    data_source = (axiom_data_source_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                    if (!data_source)
++                        return NULL;
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv()); /* assume parent is of type data source */
++                    if (!stream)
++                        return NULL;
++                  
++            if(!parent_tag_closed)
++            {
++            
++              string_to_stream = ">"; 
++              axutil_stream_write(stream, Environment::getEnv(), string_to_stream, axutil_strlen(string_to_stream));
++              tag_closed = 1;
++            
++            }
++            
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidId)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property id");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("id"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("id")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing id element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sid",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":""); 
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sid>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                     
++                            if(!property_Id->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                            }
++                            property_Id->serialize(current_node, parent_element,
++                                                                                 property_Id->isParticle() || false, namespaces, next_ns_index);
++                            
++                            if(!property_Id->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                            }
++                            
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidType)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property type");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("type"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("type")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing type element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%stype",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":""); 
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%stype>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                     
++                            if(!property_Type->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                            }
++                            property_Type->serialize(current_node, parent_element,
++                                                                                 property_Type->isParticle() || false, namespaces, next_ns_index);
++                            
++                            if(!property_Type->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                            }
++                            
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for id by  Property Number 1
++             */
++            AviaryCommon::JobID* WSF_CALL
++            AviaryCommon::JobData::getProperty1()
++            {
++                return getId();
++            }
++
++            /**
++             * getter for id.
++             */
++            AviaryCommon::JobID* WSF_CALL
++            AviaryCommon::JobData::getId()
++             {
++                return property_Id;
++             }
++
++            /**
++             * setter for id
++             */
++            bool WSF_CALL
++            AviaryCommon::JobData::setId(
++                    AviaryCommon::JobID*  arg_Id)
++             {
++                
++
++                if(isValidId &&
++                        arg_Id == property_Id)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(NULL == arg_Id)
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"id is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetId();
++
++                
++                    if(NULL == arg_Id)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_Id = arg_Id;
++                        isValidId = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for id
++            */
++           bool WSF_CALL
++           AviaryCommon::JobData::resetId()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++            
++                
++
++                if(property_Id != NULL)
++                {
++                   
++                   
++                         delete  property_Id;
++                     
++
++                   }
++
++                
++                
++                
++               isValidId = false; 
++               return true;
++           }
++
++           /**
++            * Check whether id is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::JobData::isIdNil()
++           {
++               return !isValidId;
++           }
++
++           /**
++            * Set id to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::JobData::setIdNil()
++           {
++               return resetId();
++           }
++
++           
++
++            /**
++             * Getter for type by  Property Number 2
++             */
++            AviaryCommon::JobDataType* WSF_CALL
++            AviaryCommon::JobData::getProperty2()
++            {
++                return getType();
++            }
++
++            /**
++             * getter for type.
++             */
++            AviaryCommon::JobDataType* WSF_CALL
++            AviaryCommon::JobData::getType()
++             {
++                return property_Type;
++             }
++
++            /**
++             * setter for type
++             */
++            bool WSF_CALL
++            AviaryCommon::JobData::setType(
++                    AviaryCommon::JobDataType*  arg_Type)
++             {
++                
++
++                if(isValidType &&
++                        arg_Type == property_Type)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(NULL == arg_Type)
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"type is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetType();
++
++                
++                    if(NULL == arg_Type)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_Type = arg_Type;
++                        isValidType = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for type
++            */
++           bool WSF_CALL
++           AviaryCommon::JobData::resetType()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++            
++                
++
++                if(property_Type != NULL)
++                {
++                   
++                   
++                         delete  property_Type;
++                     
++
++                   }
++
++                
++                
++                
++               isValidType = false; 
++               return true;
++           }
++
++           /**
++            * Check whether type is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::JobData::isTypeNil()
++           {
++               return !isValidType;
++           }
++
++           /**
++            * Set type to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::JobData::setTypeNil()
++           {
++               return resetType();
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_JobDataType.cpp b/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_JobDataType.cpp
+new file mode 100644
+index 0000000..6c259b7
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_JobDataType.cpp
+@@ -0,0 +1,361 @@
++
++
++        /**
++         * JobDataType.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryCommon_JobDataType.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryCommon;
++        
++               /*
++                * Implementation of the JobDataType|http://common.aviary.grid.redhat.com Element
++                */
++           AviaryCommon::JobDataType::JobDataType()
++        {
++
++        
++            qname = NULL;
++        
++                    property_JobDataType;
++                
++            isValidJobDataType  = false;
++        
++                  qname =  axutil_qname_create (Environment::getEnv(),
++                        "JobDataType",
++                        "http://common.aviary.grid.redhat.com",
++                        NULL);
++                
++        }
++
++       AviaryCommon::JobDataType::JobDataType(std::string arg_JobDataType)
++        {
++             
++                   qname = NULL;
++             
++                 property_JobDataType;
++             
++            isValidJobDataType  = true;
++            
++                 qname =  axutil_qname_create (Environment::getEnv(),
++                       "JobDataType",
++                       "http://common.aviary.grid.redhat.com",
++                       NULL);
++               
++                    property_JobDataType = arg_JobDataType;
++            
++        }
++        AviaryCommon::JobDataType::~JobDataType()
++        {
++
++        }
++
++        
++            bool WSF_CALL
++            JobDataType::deserializeFromString(
++                                            const axis2_char_t *node_value,
++                                            axiom_node_t *parent)
++            {
++              bool status = true;
++            
++                        setJobDataType(node_value);
++                    
++              return status;
++            }
++        
++
++        bool WSF_CALL
++        AviaryCommon::JobDataType::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++            
++        status = AXIS2_FAILURE;
++        if(parent)
++        {
++            axis2_char_t *attrib_text = NULL;
++            attrib_text = axiom_element_get_attribute_value_by_name((axiom_element_t*)axiom_node_get_data_element(parent, Environment::getEnv()), Environment::getEnv(), "nil");
++            if (attrib_text != NULL && !axutil_strcasecmp(attrib_text, "true"))
++            {
++              
++               /* but the wsdl says that, this is non nillable */
++                WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "NULL value is set to a non nillable element JobDataType");
++                status = AXIS2_FAILURE;
++               
++            }
++            else
++            {
++                axiom_node_t *text_node = NULL;
++                text_node = axiom_node_get_first_child(parent, Environment::getEnv());
++                axiom_text_t *text_element = NULL;
++                if (text_node &&
++                        axiom_node_get_node_type(text_node, Environment::getEnv()) == AXIOM_TEXT)
++                    text_element = (axiom_text_t*)axiom_node_get_data_element(text_node, Environment::getEnv());
++                text_value = "";
++                if(text_element && axiom_text_get_value(text_element, Environment::getEnv()))
++                {
++                    text_value = (axis2_char_t*)axiom_text_get_value(text_element, Environment::getEnv());
++                }
++                status = deserializeFromString(text_value, parent);
++                }
++            }
++            
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryCommon::JobDataType::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryCommon::JobDataType::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++            char* WSF_CALL
++            AviaryCommon::JobDataType::serializeToString(axutil_hash_t *namespaces)
++            {
++                axis2_char_t *text_value = NULL;
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                
++                         text_value = (axis2_char_t*)axutil_xml_quote_string(Environment::getEnv(), (axis2_char_t*)property_JobDataType.c_str(), false);
++                         if (!text_value)
++                         {
++                             text_value = (axis2_char_t*)axutil_strdup(Environment::getEnv(), property_JobDataType.c_str());
++                         }
++                      
++                return text_value;
++            }
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryCommon::JobDataType::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++            axiom_data_source_t *data_source = NULL;
++            axutil_stream_t *stream = NULL;
++            axis2_char_t *text_value;
++             
++                    current_node = parent;
++                    data_source = (axiom_data_source_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                    if (!data_source)
++                        return NULL;
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv()); /* assume parent is of type data source */
++                    if (!stream)
++                        return NULL;
++                  
++               if(!parent_tag_closed && !tag_closed)
++               {
++                  text_value = ">"; 
++                  axutil_stream_write(stream, Environment::getEnv(), text_value, axutil_strlen(text_value));
++               }
++               
++               text_value = serializeToString(namespaces);
++               if(text_value)
++               {
++                    axutil_stream_write(stream, Environment::getEnv(), text_value, axutil_strlen(text_value));
++                    AXIS2_FREE(Environment::getEnv()->allocator, text_value);
++               }
++            
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for JobDataType by  Property Number 1
++             */
++            std::string WSF_CALL
++            AviaryCommon::JobDataType::getProperty1()
++            {
++                return getJobDataType();
++            }
++
++            /**
++             * getter for JobDataType.
++             */
++            std::string WSF_CALL
++            AviaryCommon::JobDataType::getJobDataType()
++             {
++                return property_JobDataType;
++             }
++
++            /**
++             * setter for JobDataType
++             */
++            bool WSF_CALL
++            AviaryCommon::JobDataType::setJobDataType(
++                    const std::string  arg_JobDataType)
++             {
++                
++
++                if(isValidJobDataType &&
++                        arg_JobDataType == property_JobDataType)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(arg_JobDataType.empty())
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"JobDataType is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetJobDataType();
++
++                
++                        property_JobDataType = std::string(arg_JobDataType.c_str());
++                        isValidJobDataType = true;
++                    
++                return true;
++             }
++
++            
++             /**
++             * specialized enum getter for JobDataType.
++             */
++             ADBJobDataTypeEnum WSF_CALL
++             AviaryCommon::JobDataType::getJobDataTypeEnum()
++             {
++
++                
++                 if (axutil_strcmp(property_JobDataType.c_str(), "ERR") == 0)
++                    return JobDataType_ERR;
++             
++                 if (axutil_strcmp(property_JobDataType.c_str(), "LOG") == 0)
++                    return JobDataType_LOG;
++             
++                 if (axutil_strcmp(property_JobDataType.c_str(), "OUT") == 0)
++                    return JobDataType_OUT;
++             
++             
++                 /* Error: none of the strings matched; invalid enum value */
++                 return (ADBJobDataTypeEnum)-1;
++             }
++             
++             
++             /**
++             * specialized enum setter for JobDataType.
++             */
++             bool WSF_CALL
++            AviaryCommon::JobDataType::setJobDataTypeEnum(const ADBJobDataTypeEnum  arg_JobDataType)
++             {
++                
++
++                
++                resetJobDataType();
++
++                   
++                   switch (arg_JobDataType)
++                   {
++                     
++                       case JobDataType_ERR :
++                            property_JobDataType = (axis2_char_t *)axutil_strdup(Environment::getEnv(), "ERR");
++                          break;
++                     
++                       case JobDataType_LOG :
++                            property_JobDataType = (axis2_char_t *)axutil_strdup(Environment::getEnv(), "LOG");
++                          break;
++                     
++                       case JobDataType_OUT :
++                            property_JobDataType = (axis2_char_t *)axutil_strdup(Environment::getEnv(), "OUT");
++                          break;
++                     
++                     
++                       default:
++                          isValidJobDataType = false;
++                          property_JobDataType = "";
++                          WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Error setting JobDataType: undefined enum value");
++                          return false;
++                   }
++                
++                   if(property_JobDataType.empty())
++                   {
++                       return AXIS2_FAILURE;
++                   }
++                     isValidJobDataType = true;
++                        
++                
++                return true;
++             }
++             
++
++           /**
++            * resetter for JobDataType
++            */
++           bool WSF_CALL
++           AviaryCommon::JobDataType::resetJobDataType()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidJobDataType = false; 
++               return true;
++           }
++
++           /**
++            * Check whether JobDataType is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::JobDataType::isJobDataTypeNil()
++           {
++               return !isValidJobDataType;
++           }
++
++           /**
++            * Set JobDataType to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::JobDataType::setJobDataTypeNil()
++           {
++               return resetJobDataType();
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_JobDetails.cpp b/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_JobDetails.cpp
+new file mode 100644
+index 0000000..0848d89
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_JobDetails.cpp
+@@ -0,0 +1,927 @@
++
++
++        /**
++         * JobDetails.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryCommon_JobDetails.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryCommon;
++        
++                /*
++                 * This type was generated from the piece of schema that had
++                 * name = JobDetails
++                 * Namespace URI = http://common.aviary.grid.redhat.com
++                 * Namespace Prefix = ns1
++                 */
++           AviaryCommon::JobDetails::JobDetails()
++        {
++
++        
++                property_Id  = NULL;
++              
++            isValidId  = false;
++        
++                property_Status  = NULL;
++              
++            isValidStatus  = false;
++        
++                property_Details  = NULL;
++              
++            isValidDetails  = false;
++        
++        }
++
++       AviaryCommon::JobDetails::JobDetails(AviaryCommon::JobID* arg_Id,AviaryCommon::Status* arg_Status,AviaryCommon::Attributes* arg_Details)
++        {
++             
++               property_Id  = NULL;
++             
++            isValidId  = true;
++            
++               property_Status  = NULL;
++             
++            isValidStatus  = true;
++            
++               property_Details  = NULL;
++             
++            isValidDetails  = true;
++            
++                    property_Id = arg_Id;
++            
++                    property_Status = arg_Status;
++            
++                    property_Details = arg_Details;
++            
++        }
++        AviaryCommon::JobDetails::~JobDetails()
++        {
++
++        }
++
++        
++
++        bool WSF_CALL
++        AviaryCommon::JobDetails::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++            axutil_qname_t *element_qname = NULL; 
++            
++               axiom_node_t *first_node = NULL;
++               bool is_early_node_valid = true;
++               axiom_node_t *current_node = NULL;
++               axiom_element_t *current_element = NULL;
++            
++              
++              while(parent && axiom_node_get_node_type(parent, Environment::getEnv()) != AXIOM_ELEMENT)
++              {
++                  parent = axiom_node_get_next_sibling(parent, Environment::getEnv());
++              }
++              if (NULL == parent)
++              {   
++                return AXIS2_FAILURE;
++              }
++              
++                      
++                      first_node = axiom_node_get_first_child(parent, Environment::getEnv());
++                      
++                    
++
++                     
++                     /*
++                      * building id element
++                      */
++                     
++                     
++                     
++                                   current_node = first_node;
++                                   is_early_node_valid = false;
++                                   
++                                   
++                                    while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                    {
++                                        current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                    }
++                                    if(current_node != NULL)
++                                    {
++                                        current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                        mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                    }
++                                   
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "id", NULL, NULL);
++                                 
++
++                           if (isParticle() ||  
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("id", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("id", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 AviaryCommon::JobID* element = new AviaryCommon::JobID();
++
++                                      status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                      if(AXIS2_FAILURE == status)
++                                      {
++                                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in building adb object for element id");
++                                      }
++                                      else
++                                      {
++                                          status = setId(element);
++                                      }
++                                    
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for id ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element id missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building status element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "status", NULL, NULL);
++                                 
++
++                           if (isParticle() ||  
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("status", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("status", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 AviaryCommon::Status* element = new AviaryCommon::Status();
++
++                                      status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                      if(AXIS2_FAILURE == status)
++                                      {
++                                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in building adb object for element status");
++                                      }
++                                      else
++                                      {
++                                          status = setStatus(element);
++                                      }
++                                    
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for status ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element status missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building details element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "details", NULL, NULL);
++                                 
++
++                           if (isParticle() ||  
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("details", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("details", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 AviaryCommon::Attributes* element = new AviaryCommon::Attributes();
++
++                                      status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                      if(AXIS2_FAILURE == status)
++                                      {
++                                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in building adb object for element details");
++                                      }
++                                      else
++                                      {
++                                          status = setDetails(element);
++                                      }
++                                    
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for details ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryCommon::JobDetails::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryCommon::JobDetails::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryCommon::JobDetails::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++             axis2_char_t *string_to_stream;
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++                axiom_namespace_t *ns1 = NULL;
++
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                axis2_char_t *p_prefix = NULL;
++            
++                    axis2_char_t text_value_1[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++                    axis2_char_t text_value_2[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++                    axis2_char_t text_value_3[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++               axis2_char_t *start_input_str = NULL;
++               axis2_char_t *end_input_str = NULL;
++               unsigned int start_input_str_len = 0;
++               unsigned int end_input_str_len = 0;
++            
++            
++               axiom_data_source_t *data_source = NULL;
++               axutil_stream_t *stream = NULL;
++
++            
++                    current_node = parent;
++                    data_source = (axiom_data_source_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                    if (!data_source)
++                        return NULL;
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv()); /* assume parent is of type data source */
++                    if (!stream)
++                        return NULL;
++                  
++            if(!parent_tag_closed)
++            {
++            
++              string_to_stream = ">"; 
++              axutil_stream_write(stream, Environment::getEnv(), string_to_stream, axutil_strlen(string_to_stream));
++              tag_closed = 1;
++            
++            }
++            
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidId)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property id");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("id"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("id")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing id element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sid",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":""); 
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sid>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                     
++                            if(!property_Id->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                            }
++                            property_Id->serialize(current_node, parent_element,
++                                                                                 property_Id->isParticle() || false, namespaces, next_ns_index);
++                            
++                            if(!property_Id->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                            }
++                            
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidStatus)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property status");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("status"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("status")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing status element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sstatus",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":""); 
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sstatus>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                     
++                            if(!property_Status->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                            }
++                            property_Status->serialize(current_node, parent_element,
++                                                                                 property_Status->isParticle() || false, namespaces, next_ns_index);
++                            
++                            if(!property_Status->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                            }
++                            
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidDetails)
++                   {
++                      
++                           /* no need to complain for minoccurs=0 element */
++                            
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("details"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("details")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing details element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sdetails",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":""); 
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sdetails>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                     
++                            if(!property_Details->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                            }
++                            property_Details->serialize(current_node, parent_element,
++                                                                                 property_Details->isParticle() || false, namespaces, next_ns_index);
++                            
++                            if(!property_Details->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                            }
++                            
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for id by  Property Number 1
++             */
++            AviaryCommon::JobID* WSF_CALL
++            AviaryCommon::JobDetails::getProperty1()
++            {
++                return getId();
++            }
++
++            /**
++             * getter for id.
++             */
++            AviaryCommon::JobID* WSF_CALL
++            AviaryCommon::JobDetails::getId()
++             {
++                return property_Id;
++             }
++
++            /**
++             * setter for id
++             */
++            bool WSF_CALL
++            AviaryCommon::JobDetails::setId(
++                    AviaryCommon::JobID*  arg_Id)
++             {
++                
++
++                if(isValidId &&
++                        arg_Id == property_Id)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(NULL == arg_Id)
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"id is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetId();
++
++                
++                    if(NULL == arg_Id)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_Id = arg_Id;
++                        isValidId = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for id
++            */
++           bool WSF_CALL
++           AviaryCommon::JobDetails::resetId()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++            
++                
++
++                if(property_Id != NULL)
++                {
++                   
++                   
++                         delete  property_Id;
++                     
++
++                   }
++
++                
++                
++                
++               isValidId = false; 
++               return true;
++           }
++
++           /**
++            * Check whether id is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::JobDetails::isIdNil()
++           {
++               return !isValidId;
++           }
++
++           /**
++            * Set id to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::JobDetails::setIdNil()
++           {
++               return resetId();
++           }
++
++           
++
++            /**
++             * Getter for status by  Property Number 2
++             */
++            AviaryCommon::Status* WSF_CALL
++            AviaryCommon::JobDetails::getProperty2()
++            {
++                return getStatus();
++            }
++
++            /**
++             * getter for status.
++             */
++            AviaryCommon::Status* WSF_CALL
++            AviaryCommon::JobDetails::getStatus()
++             {
++                return property_Status;
++             }
++
++            /**
++             * setter for status
++             */
++            bool WSF_CALL
++            AviaryCommon::JobDetails::setStatus(
++                    AviaryCommon::Status*  arg_Status)
++             {
++                
++
++                if(isValidStatus &&
++                        arg_Status == property_Status)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(NULL == arg_Status)
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"status is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetStatus();
++
++                
++                    if(NULL == arg_Status)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_Status = arg_Status;
++                        isValidStatus = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for status
++            */
++           bool WSF_CALL
++           AviaryCommon::JobDetails::resetStatus()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++            
++                
++
++                if(property_Status != NULL)
++                {
++                   
++                   
++                         delete  property_Status;
++                     
++
++                   }
++
++                
++                
++                
++               isValidStatus = false; 
++               return true;
++           }
++
++           /**
++            * Check whether status is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::JobDetails::isStatusNil()
++           {
++               return !isValidStatus;
++           }
++
++           /**
++            * Set status to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::JobDetails::setStatusNil()
++           {
++               return resetStatus();
++           }
++
++           
++
++            /**
++             * Getter for details by  Property Number 3
++             */
++            AviaryCommon::Attributes* WSF_CALL
++            AviaryCommon::JobDetails::getProperty3()
++            {
++                return getDetails();
++            }
++
++            /**
++             * getter for details.
++             */
++            AviaryCommon::Attributes* WSF_CALL
++            AviaryCommon::JobDetails::getDetails()
++             {
++                return property_Details;
++             }
++
++            /**
++             * setter for details
++             */
++            bool WSF_CALL
++            AviaryCommon::JobDetails::setDetails(
++                    AviaryCommon::Attributes*  arg_Details)
++             {
++                
++
++                if(isValidDetails &&
++                        arg_Details == property_Details)
++                {
++                    
++                    return true;
++                }
++
++                
++
++                
++                resetDetails();
++
++                
++                    if(NULL == arg_Details)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_Details = arg_Details;
++                        isValidDetails = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for details
++            */
++           bool WSF_CALL
++           AviaryCommon::JobDetails::resetDetails()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++            
++                
++
++                if(property_Details != NULL)
++                {
++                   
++                   
++                         delete  property_Details;
++                     
++
++                   }
++
++                
++                
++                
++               isValidDetails = false; 
++               return true;
++           }
++
++           /**
++            * Check whether details is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::JobDetails::isDetailsNil()
++           {
++               return !isValidDetails;
++           }
++
++           /**
++            * Set details to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::JobDetails::setDetailsNil()
++           {
++               return resetDetails();
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_JobID.cpp b/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_JobID.cpp
+new file mode 100644
+index 0000000..249a55b
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_JobID.cpp
+@@ -0,0 +1,1270 @@
++
++
++        /**
++         * JobID.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryCommon_JobID.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryCommon;
++        
++                /*
++                 * This type was generated from the piece of schema that had
++                 * name = JobID
++                 * Namespace URI = http://common.aviary.grid.redhat.com
++                 * Namespace Prefix = ns1
++                 */
++           AviaryCommon::JobID::JobID()
++        {
++
++        
++                    property_Job;
++                
++            isValidJob  = false;
++        
++                    property_Pool;
++                
++            isValidPool  = false;
++        
++                    property_Scheduler;
++                
++            isValidScheduler  = false;
++        
++                property_Submission  = NULL;
++              
++            isValidSubmission  = false;
++        
++        }
++
++       AviaryCommon::JobID::JobID(std::string arg_Job,std::string arg_Pool,std::string arg_Scheduler,AviaryCommon::SubmissionID* arg_Submission)
++        {
++             
++                 property_Job;
++             
++            isValidJob  = true;
++            
++                 property_Pool;
++             
++            isValidPool  = true;
++            
++                 property_Scheduler;
++             
++            isValidScheduler  = true;
++            
++               property_Submission  = NULL;
++             
++            isValidSubmission  = true;
++            
++                    property_Job = arg_Job;
++            
++                    property_Pool = arg_Pool;
++            
++                    property_Scheduler = arg_Scheduler;
++            
++                    property_Submission = arg_Submission;
++            
++        }
++        AviaryCommon::JobID::~JobID()
++        {
++
++        }
++
++        
++
++        bool WSF_CALL
++        AviaryCommon::JobID::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++            axutil_qname_t *element_qname = NULL; 
++            
++               axiom_node_t *first_node = NULL;
++               bool is_early_node_valid = true;
++               axiom_node_t *current_node = NULL;
++               axiom_element_t *current_element = NULL;
++            
++              
++              while(parent && axiom_node_get_node_type(parent, Environment::getEnv()) != AXIOM_ELEMENT)
++              {
++                  parent = axiom_node_get_next_sibling(parent, Environment::getEnv());
++              }
++              if (NULL == parent)
++              {   
++                return AXIS2_FAILURE;
++              }
++              
++                      
++                      first_node = axiom_node_get_first_child(parent, Environment::getEnv());
++                      
++                    
++
++                     
++                     /*
++                      * building job element
++                      */
++                     
++                     
++                     
++                                   current_node = first_node;
++                                   is_early_node_valid = false;
++                                   
++                                   
++                                    while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                    {
++                                        current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                    }
++                                    if(current_node != NULL)
++                                    {
++                                        current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                        mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                    }
++                                   
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "job", NULL, NULL);
++                                 
++
++                           if ( 
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("job", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("job", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 
++                                      text_value = axiom_element_get_text(current_element, Environment::getEnv(), current_node);
++                                      if(text_value != NULL)
++                                      {
++                                            status = setJob(text_value);
++                                      }
++                                      
++                                      else
++                                      {
++                                            /*
++                                             * axis2_qname_t *qname = NULL;
++                                             * axiom_attribute_t *the_attri = NULL;
++                                             * 
++                                             * qname = axutil_qname_create(Environment::getEnv(), "nil", "http://www.w3.org/2001/XMLSchema-instance", "xsi");
++                                             * the_attri = axiom_element_get_attribute(current_element, Environment::getEnv(), qname);
++                                             */
++                                            /* currently thereis a bug in the axiom_element_get_attribute, so we have to go to this bad method */
++
++                                            axiom_attribute_t *the_attri = NULL;
++                                            axis2_char_t *attrib_text = NULL;
++                                            axutil_hash_t *attribute_hash = NULL;
++
++                                            attribute_hash = axiom_element_get_all_attributes(current_element, Environment::getEnv());
++
++                                            attrib_text = NULL;
++                                            if(attribute_hash)
++                                            {
++                                                 axutil_hash_index_t *hi;
++                                                 void *val;
++                                                 const void *key;
++                                        
++                                                 for (hi = axutil_hash_first(attribute_hash, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                                                 {
++                                                     axutil_hash_this(hi, &key, NULL, &val);
++                                                     
++                                                     if(strstr((axis2_char_t*)key, "nil|http://www.w3.org/2001/XMLSchema-instance"))
++                                                     {
++                                                         the_attri = (axiom_attribute_t*)val;
++                                                         break;
++                                                     }
++                                                 }
++                                            }
++
++                                            if(the_attri)
++                                            {
++                                                attrib_text = axiom_attribute_get_value(the_attri, Environment::getEnv());
++                                            }
++                                            else
++                                            {
++                                                /* this is hoping that attribute is stored in "http://www.w3.org/2001/XMLSchema-instance", this happnes when name is in default namespace */
++                                                attrib_text = axiom_element_get_attribute_value_by_name(current_element, Environment::getEnv(), "nil");
++                                            }
++
++                                            if(attrib_text && 0 == axutil_strcmp(attrib_text, "1"))
++                                            {
++                                                WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "NULL value is set to a non nillable element job");
++                                                status = AXIS2_FAILURE;
++                                            }
++                                            else
++                                            {
++                                                /* after all, we found this is a empty string */
++                                                status = setJob("");
++                                            }
++                                      }
++                                      
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for job ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element job missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building pool element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "pool", NULL, NULL);
++                                 
++
++                           if ( 
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("pool", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("pool", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 
++                                      text_value = axiom_element_get_text(current_element, Environment::getEnv(), current_node);
++                                      if(text_value != NULL)
++                                      {
++                                            status = setPool(text_value);
++                                      }
++                                      
++                                      else
++                                      {
++                                            /*
++                                             * axis2_qname_t *qname = NULL;
++                                             * axiom_attribute_t *the_attri = NULL;
++                                             * 
++                                             * qname = axutil_qname_create(Environment::getEnv(), "nil", "http://www.w3.org/2001/XMLSchema-instance", "xsi");
++                                             * the_attri = axiom_element_get_attribute(current_element, Environment::getEnv(), qname);
++                                             */
++                                            /* currently thereis a bug in the axiom_element_get_attribute, so we have to go to this bad method */
++
++                                            axiom_attribute_t *the_attri = NULL;
++                                            axis2_char_t *attrib_text = NULL;
++                                            axutil_hash_t *attribute_hash = NULL;
++
++                                            attribute_hash = axiom_element_get_all_attributes(current_element, Environment::getEnv());
++
++                                            attrib_text = NULL;
++                                            if(attribute_hash)
++                                            {
++                                                 axutil_hash_index_t *hi;
++                                                 void *val;
++                                                 const void *key;
++                                        
++                                                 for (hi = axutil_hash_first(attribute_hash, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                                                 {
++                                                     axutil_hash_this(hi, &key, NULL, &val);
++                                                     
++                                                     if(strstr((axis2_char_t*)key, "nil|http://www.w3.org/2001/XMLSchema-instance"))
++                                                     {
++                                                         the_attri = (axiom_attribute_t*)val;
++                                                         break;
++                                                     }
++                                                 }
++                                            }
++
++                                            if(the_attri)
++                                            {
++                                                attrib_text = axiom_attribute_get_value(the_attri, Environment::getEnv());
++                                            }
++                                            else
++                                            {
++                                                /* this is hoping that attribute is stored in "http://www.w3.org/2001/XMLSchema-instance", this happnes when name is in default namespace */
++                                                attrib_text = axiom_element_get_attribute_value_by_name(current_element, Environment::getEnv(), "nil");
++                                            }
++
++                                            if(attrib_text && 0 == axutil_strcmp(attrib_text, "1"))
++                                            {
++                                                WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "NULL value is set to a non nillable element pool");
++                                                status = AXIS2_FAILURE;
++                                            }
++                                            else
++                                            {
++                                                /* after all, we found this is a empty string */
++                                                status = setPool("");
++                                            }
++                                      }
++                                      
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for pool ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building scheduler element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "scheduler", NULL, NULL);
++                                 
++
++                           if ( 
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("scheduler", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("scheduler", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 
++                                      text_value = axiom_element_get_text(current_element, Environment::getEnv(), current_node);
++                                      if(text_value != NULL)
++                                      {
++                                            status = setScheduler(text_value);
++                                      }
++                                      
++                                      else
++                                      {
++                                            /*
++                                             * axis2_qname_t *qname = NULL;
++                                             * axiom_attribute_t *the_attri = NULL;
++                                             * 
++                                             * qname = axutil_qname_create(Environment::getEnv(), "nil", "http://www.w3.org/2001/XMLSchema-instance", "xsi");
++                                             * the_attri = axiom_element_get_attribute(current_element, Environment::getEnv(), qname);
++                                             */
++                                            /* currently thereis a bug in the axiom_element_get_attribute, so we have to go to this bad method */
++
++                                            axiom_attribute_t *the_attri = NULL;
++                                            axis2_char_t *attrib_text = NULL;
++                                            axutil_hash_t *attribute_hash = NULL;
++
++                                            attribute_hash = axiom_element_get_all_attributes(current_element, Environment::getEnv());
++
++                                            attrib_text = NULL;
++                                            if(attribute_hash)
++                                            {
++                                                 axutil_hash_index_t *hi;
++                                                 void *val;
++                                                 const void *key;
++                                        
++                                                 for (hi = axutil_hash_first(attribute_hash, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                                                 {
++                                                     axutil_hash_this(hi, &key, NULL, &val);
++                                                     
++                                                     if(strstr((axis2_char_t*)key, "nil|http://www.w3.org/2001/XMLSchema-instance"))
++                                                     {
++                                                         the_attri = (axiom_attribute_t*)val;
++                                                         break;
++                                                     }
++                                                 }
++                                            }
++
++                                            if(the_attri)
++                                            {
++                                                attrib_text = axiom_attribute_get_value(the_attri, Environment::getEnv());
++                                            }
++                                            else
++                                            {
++                                                /* this is hoping that attribute is stored in "http://www.w3.org/2001/XMLSchema-instance", this happnes when name is in default namespace */
++                                                attrib_text = axiom_element_get_attribute_value_by_name(current_element, Environment::getEnv(), "nil");
++                                            }
++
++                                            if(attrib_text && 0 == axutil_strcmp(attrib_text, "1"))
++                                            {
++                                                WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "NULL value is set to a non nillable element scheduler");
++                                                status = AXIS2_FAILURE;
++                                            }
++                                            else
++                                            {
++                                                /* after all, we found this is a empty string */
++                                                status = setScheduler("");
++                                            }
++                                      }
++                                      
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for scheduler ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building submission element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "submission", NULL, NULL);
++                                 
++
++                           if (isParticle() ||  
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("submission", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("submission", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 AviaryCommon::SubmissionID* element = new AviaryCommon::SubmissionID();
++
++                                      status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                      if(AXIS2_FAILURE == status)
++                                      {
++                                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in building adb object for element submission");
++                                      }
++                                      else
++                                      {
++                                          status = setSubmission(element);
++                                      }
++                                    
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for submission ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryCommon::JobID::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryCommon::JobID::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryCommon::JobID::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++             axis2_char_t *string_to_stream;
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++                axiom_namespace_t *ns1 = NULL;
++
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                axis2_char_t *p_prefix = NULL;
++            
++                    axis2_char_t *text_value_1;
++                    axis2_char_t *text_value_1_temp;
++                    
++                    axis2_char_t *text_value_2;
++                    axis2_char_t *text_value_2_temp;
++                    
++                    axis2_char_t *text_value_3;
++                    axis2_char_t *text_value_3_temp;
++                    
++                    axis2_char_t text_value_4[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++               axis2_char_t *start_input_str = NULL;
++               axis2_char_t *end_input_str = NULL;
++               unsigned int start_input_str_len = 0;
++               unsigned int end_input_str_len = 0;
++            
++            
++               axiom_data_source_t *data_source = NULL;
++               axutil_stream_t *stream = NULL;
++
++            
++                    current_node = parent;
++                    data_source = (axiom_data_source_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                    if (!data_source)
++                        return NULL;
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv()); /* assume parent is of type data source */
++                    if (!stream)
++                        return NULL;
++                  
++            if(!parent_tag_closed)
++            {
++            
++              string_to_stream = ">"; 
++              axutil_stream_write(stream, Environment::getEnv(), string_to_stream, axutil_strlen(string_to_stream));
++              tag_closed = 1;
++            
++            }
++            
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidJob)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property job");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("job"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("job")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing job element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sjob>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sjob>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                    
++                           text_value_1 = (axis2_char_t*)property_Job.c_str();
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                           
++                            
++                           text_value_1_temp = axutil_xml_quote_string(Environment::getEnv(), text_value_1, true);
++                           if (text_value_1_temp)
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_1_temp, axutil_strlen(text_value_1_temp));
++                               AXIS2_FREE(Environment::getEnv()->allocator, text_value_1_temp);
++                           }
++                           else
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_1, axutil_strlen(text_value_1));
++                           }
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                           
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidPool)
++                   {
++                      
++                           /* no need to complain for minoccurs=0 element */
++                            
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("pool"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("pool")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing pool element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%spool>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%spool>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                    
++                           text_value_2 = (axis2_char_t*)property_Pool.c_str();
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                           
++                            
++                           text_value_2_temp = axutil_xml_quote_string(Environment::getEnv(), text_value_2, true);
++                           if (text_value_2_temp)
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_2_temp, axutil_strlen(text_value_2_temp));
++                               AXIS2_FREE(Environment::getEnv()->allocator, text_value_2_temp);
++                           }
++                           else
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_2, axutil_strlen(text_value_2));
++                           }
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                           
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidScheduler)
++                   {
++                      
++                           /* no need to complain for minoccurs=0 element */
++                            
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("scheduler"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("scheduler")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing scheduler element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sscheduler>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sscheduler>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                    
++                           text_value_3 = (axis2_char_t*)property_Scheduler.c_str();
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                           
++                            
++                           text_value_3_temp = axutil_xml_quote_string(Environment::getEnv(), text_value_3, true);
++                           if (text_value_3_temp)
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_3_temp, axutil_strlen(text_value_3_temp));
++                               AXIS2_FREE(Environment::getEnv()->allocator, text_value_3_temp);
++                           }
++                           else
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_3, axutil_strlen(text_value_3));
++                           }
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                           
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidSubmission)
++                   {
++                      
++                           /* no need to complain for minoccurs=0 element */
++                            
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("submission"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("submission")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing submission element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%ssubmission",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":""); 
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%ssubmission>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                     
++                            if(!property_Submission->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                            }
++                            property_Submission->serialize(current_node, parent_element,
++                                                                                 property_Submission->isParticle() || false, namespaces, next_ns_index);
++                            
++                            if(!property_Submission->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                            }
++                            
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for job by  Property Number 1
++             */
++            std::string WSF_CALL
++            AviaryCommon::JobID::getProperty1()
++            {
++                return getJob();
++            }
++
++            /**
++             * getter for job.
++             */
++            std::string WSF_CALL
++            AviaryCommon::JobID::getJob()
++             {
++                return property_Job;
++             }
++
++            /**
++             * setter for job
++             */
++            bool WSF_CALL
++            AviaryCommon::JobID::setJob(
++                    const std::string  arg_Job)
++             {
++                
++
++                if(isValidJob &&
++                        arg_Job == property_Job)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(arg_Job.empty())
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"job is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetJob();
++
++                
++                        property_Job = std::string(arg_Job.c_str());
++                        isValidJob = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for job
++            */
++           bool WSF_CALL
++           AviaryCommon::JobID::resetJob()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidJob = false; 
++               return true;
++           }
++
++           /**
++            * Check whether job is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::JobID::isJobNil()
++           {
++               return !isValidJob;
++           }
++
++           /**
++            * Set job to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::JobID::setJobNil()
++           {
++               return resetJob();
++           }
++
++           
++
++            /**
++             * Getter for pool by  Property Number 2
++             */
++            std::string WSF_CALL
++            AviaryCommon::JobID::getProperty2()
++            {
++                return getPool();
++            }
++
++            /**
++             * getter for pool.
++             */
++            std::string WSF_CALL
++            AviaryCommon::JobID::getPool()
++             {
++                return property_Pool;
++             }
++
++            /**
++             * setter for pool
++             */
++            bool WSF_CALL
++            AviaryCommon::JobID::setPool(
++                    const std::string  arg_Pool)
++             {
++                
++
++                if(isValidPool &&
++                        arg_Pool == property_Pool)
++                {
++                    
++                    return true;
++                }
++
++                
++
++                
++                resetPool();
++
++                
++                        property_Pool = std::string(arg_Pool.c_str());
++                        isValidPool = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for pool
++            */
++           bool WSF_CALL
++           AviaryCommon::JobID::resetPool()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidPool = false; 
++               return true;
++           }
++
++           /**
++            * Check whether pool is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::JobID::isPoolNil()
++           {
++               return !isValidPool;
++           }
++
++           /**
++            * Set pool to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::JobID::setPoolNil()
++           {
++               return resetPool();
++           }
++
++           
++
++            /**
++             * Getter for scheduler by  Property Number 3
++             */
++            std::string WSF_CALL
++            AviaryCommon::JobID::getProperty3()
++            {
++                return getScheduler();
++            }
++
++            /**
++             * getter for scheduler.
++             */
++            std::string WSF_CALL
++            AviaryCommon::JobID::getScheduler()
++             {
++                return property_Scheduler;
++             }
++
++            /**
++             * setter for scheduler
++             */
++            bool WSF_CALL
++            AviaryCommon::JobID::setScheduler(
++                    const std::string  arg_Scheduler)
++             {
++                
++
++                if(isValidScheduler &&
++                        arg_Scheduler == property_Scheduler)
++                {
++                    
++                    return true;
++                }
++
++                
++
++                
++                resetScheduler();
++
++                
++                        property_Scheduler = std::string(arg_Scheduler.c_str());
++                        isValidScheduler = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for scheduler
++            */
++           bool WSF_CALL
++           AviaryCommon::JobID::resetScheduler()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidScheduler = false; 
++               return true;
++           }
++
++           /**
++            * Check whether scheduler is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::JobID::isSchedulerNil()
++           {
++               return !isValidScheduler;
++           }
++
++           /**
++            * Set scheduler to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::JobID::setSchedulerNil()
++           {
++               return resetScheduler();
++           }
++
++           
++
++            /**
++             * Getter for submission by  Property Number 4
++             */
++            AviaryCommon::SubmissionID* WSF_CALL
++            AviaryCommon::JobID::getProperty4()
++            {
++                return getSubmission();
++            }
++
++            /**
++             * getter for submission.
++             */
++            AviaryCommon::SubmissionID* WSF_CALL
++            AviaryCommon::JobID::getSubmission()
++             {
++                return property_Submission;
++             }
++
++            /**
++             * setter for submission
++             */
++            bool WSF_CALL
++            AviaryCommon::JobID::setSubmission(
++                    AviaryCommon::SubmissionID*  arg_Submission)
++             {
++                
++
++                if(isValidSubmission &&
++                        arg_Submission == property_Submission)
++                {
++                    
++                    return true;
++                }
++
++                
++
++                
++                resetSubmission();
++
++                
++                    if(NULL == arg_Submission)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_Submission = arg_Submission;
++                        isValidSubmission = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for submission
++            */
++           bool WSF_CALL
++           AviaryCommon::JobID::resetSubmission()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++            
++                
++
++                if(property_Submission != NULL)
++                {
++                   
++                   
++                         delete  property_Submission;
++                     
++
++                   }
++
++                
++                
++                
++               isValidSubmission = false; 
++               return true;
++           }
++
++           /**
++            * Check whether submission is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::JobID::isSubmissionNil()
++           {
++               return !isValidSubmission;
++           }
++
++           /**
++            * Set submission to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::JobID::setSubmissionNil()
++           {
++               return resetSubmission();
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_JobStatus.cpp b/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_JobStatus.cpp
+new file mode 100644
+index 0000000..bf70be7
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_JobStatus.cpp
+@@ -0,0 +1,927 @@
++
++
++        /**
++         * JobStatus.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryCommon_JobStatus.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryCommon;
++        
++                /*
++                 * This type was generated from the piece of schema that had
++                 * name = JobStatus
++                 * Namespace URI = http://common.aviary.grid.redhat.com
++                 * Namespace Prefix = ns1
++                 */
++           AviaryCommon::JobStatus::JobStatus()
++        {
++
++        
++                property_Id  = NULL;
++              
++            isValidId  = false;
++        
++                property_Status  = NULL;
++              
++            isValidStatus  = false;
++        
++                property_Job_status  = NULL;
++              
++            isValidJob_status  = false;
++        
++        }
++
++       AviaryCommon::JobStatus::JobStatus(AviaryCommon::JobID* arg_Id,AviaryCommon::Status* arg_Status,AviaryCommon::JobStatusType* arg_Job_status)
++        {
++             
++               property_Id  = NULL;
++             
++            isValidId  = true;
++            
++               property_Status  = NULL;
++             
++            isValidStatus  = true;
++            
++               property_Job_status  = NULL;
++             
++            isValidJob_status  = true;
++            
++                    property_Id = arg_Id;
++            
++                    property_Status = arg_Status;
++            
++                    property_Job_status = arg_Job_status;
++            
++        }
++        AviaryCommon::JobStatus::~JobStatus()
++        {
++
++        }
++
++        
++
++        bool WSF_CALL
++        AviaryCommon::JobStatus::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++            axutil_qname_t *element_qname = NULL; 
++            
++               axiom_node_t *first_node = NULL;
++               bool is_early_node_valid = true;
++               axiom_node_t *current_node = NULL;
++               axiom_element_t *current_element = NULL;
++            
++              
++              while(parent && axiom_node_get_node_type(parent, Environment::getEnv()) != AXIOM_ELEMENT)
++              {
++                  parent = axiom_node_get_next_sibling(parent, Environment::getEnv());
++              }
++              if (NULL == parent)
++              {   
++                return AXIS2_FAILURE;
++              }
++              
++                      
++                      first_node = axiom_node_get_first_child(parent, Environment::getEnv());
++                      
++                    
++
++                     
++                     /*
++                      * building id element
++                      */
++                     
++                     
++                     
++                                   current_node = first_node;
++                                   is_early_node_valid = false;
++                                   
++                                   
++                                    while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                    {
++                                        current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                    }
++                                    if(current_node != NULL)
++                                    {
++                                        current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                        mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                    }
++                                   
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "id", NULL, NULL);
++                                 
++
++                           if (isParticle() ||  
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("id", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("id", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 AviaryCommon::JobID* element = new AviaryCommon::JobID();
++
++                                      status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                      if(AXIS2_FAILURE == status)
++                                      {
++                                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in building adb object for element id");
++                                      }
++                                      else
++                                      {
++                                          status = setId(element);
++                                      }
++                                    
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for id ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element id missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building status element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "status", NULL, NULL);
++                                 
++
++                           if (isParticle() ||  
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("status", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("status", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 AviaryCommon::Status* element = new AviaryCommon::Status();
++
++                                      status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                      if(AXIS2_FAILURE == status)
++                                      {
++                                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in building adb object for element status");
++                                      }
++                                      else
++                                      {
++                                          status = setStatus(element);
++                                      }
++                                    
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for status ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element status missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building job_status element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "job_status", NULL, NULL);
++                                 
++
++                           if (isParticle() ||  
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("job_status", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("job_status", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 AviaryCommon::JobStatusType* element = new AviaryCommon::JobStatusType();
++
++                                      status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                      if(AXIS2_FAILURE == status)
++                                      {
++                                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in building adb object for element job_status");
++                                      }
++                                      else
++                                      {
++                                          status = setJob_status(element);
++                                      }
++                                    
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for job_status ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryCommon::JobStatus::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryCommon::JobStatus::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryCommon::JobStatus::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++             axis2_char_t *string_to_stream;
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++                axiom_namespace_t *ns1 = NULL;
++
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                axis2_char_t *p_prefix = NULL;
++            
++                    axis2_char_t text_value_1[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++                    axis2_char_t text_value_2[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++                    axis2_char_t text_value_3[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++               axis2_char_t *start_input_str = NULL;
++               axis2_char_t *end_input_str = NULL;
++               unsigned int start_input_str_len = 0;
++               unsigned int end_input_str_len = 0;
++            
++            
++               axiom_data_source_t *data_source = NULL;
++               axutil_stream_t *stream = NULL;
++
++            
++                    current_node = parent;
++                    data_source = (axiom_data_source_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                    if (!data_source)
++                        return NULL;
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv()); /* assume parent is of type data source */
++                    if (!stream)
++                        return NULL;
++                  
++            if(!parent_tag_closed)
++            {
++            
++              string_to_stream = ">"; 
++              axutil_stream_write(stream, Environment::getEnv(), string_to_stream, axutil_strlen(string_to_stream));
++              tag_closed = 1;
++            
++            }
++            
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidId)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property id");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("id"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("id")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing id element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sid",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":""); 
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sid>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                     
++                            if(!property_Id->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                            }
++                            property_Id->serialize(current_node, parent_element,
++                                                                                 property_Id->isParticle() || false, namespaces, next_ns_index);
++                            
++                            if(!property_Id->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                            }
++                            
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidStatus)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property status");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("status"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("status")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing status element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sstatus",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":""); 
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sstatus>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                     
++                            if(!property_Status->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                            }
++                            property_Status->serialize(current_node, parent_element,
++                                                                                 property_Status->isParticle() || false, namespaces, next_ns_index);
++                            
++                            if(!property_Status->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                            }
++                            
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidJob_status)
++                   {
++                      
++                           /* no need to complain for minoccurs=0 element */
++                            
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("job_status"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("job_status")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing job_status element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sjob_status",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":""); 
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sjob_status>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                     
++                            if(!property_Job_status->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                            }
++                            property_Job_status->serialize(current_node, parent_element,
++                                                                                 property_Job_status->isParticle() || false, namespaces, next_ns_index);
++                            
++                            if(!property_Job_status->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                            }
++                            
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for id by  Property Number 1
++             */
++            AviaryCommon::JobID* WSF_CALL
++            AviaryCommon::JobStatus::getProperty1()
++            {
++                return getId();
++            }
++
++            /**
++             * getter for id.
++             */
++            AviaryCommon::JobID* WSF_CALL
++            AviaryCommon::JobStatus::getId()
++             {
++                return property_Id;
++             }
++
++            /**
++             * setter for id
++             */
++            bool WSF_CALL
++            AviaryCommon::JobStatus::setId(
++                    AviaryCommon::JobID*  arg_Id)
++             {
++                
++
++                if(isValidId &&
++                        arg_Id == property_Id)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(NULL == arg_Id)
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"id is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetId();
++
++                
++                    if(NULL == arg_Id)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_Id = arg_Id;
++                        isValidId = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for id
++            */
++           bool WSF_CALL
++           AviaryCommon::JobStatus::resetId()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++            
++                
++
++                if(property_Id != NULL)
++                {
++                   
++                   
++                         delete  property_Id;
++                     
++
++                   }
++
++                
++                
++                
++               isValidId = false; 
++               return true;
++           }
++
++           /**
++            * Check whether id is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::JobStatus::isIdNil()
++           {
++               return !isValidId;
++           }
++
++           /**
++            * Set id to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::JobStatus::setIdNil()
++           {
++               return resetId();
++           }
++
++           
++
++            /**
++             * Getter for status by  Property Number 2
++             */
++            AviaryCommon::Status* WSF_CALL
++            AviaryCommon::JobStatus::getProperty2()
++            {
++                return getStatus();
++            }
++
++            /**
++             * getter for status.
++             */
++            AviaryCommon::Status* WSF_CALL
++            AviaryCommon::JobStatus::getStatus()
++             {
++                return property_Status;
++             }
++
++            /**
++             * setter for status
++             */
++            bool WSF_CALL
++            AviaryCommon::JobStatus::setStatus(
++                    AviaryCommon::Status*  arg_Status)
++             {
++                
++
++                if(isValidStatus &&
++                        arg_Status == property_Status)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(NULL == arg_Status)
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"status is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetStatus();
++
++                
++                    if(NULL == arg_Status)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_Status = arg_Status;
++                        isValidStatus = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for status
++            */
++           bool WSF_CALL
++           AviaryCommon::JobStatus::resetStatus()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++            
++                
++
++                if(property_Status != NULL)
++                {
++                   
++                   
++                         delete  property_Status;
++                     
++
++                   }
++
++                
++                
++                
++               isValidStatus = false; 
++               return true;
++           }
++
++           /**
++            * Check whether status is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::JobStatus::isStatusNil()
++           {
++               return !isValidStatus;
++           }
++
++           /**
++            * Set status to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::JobStatus::setStatusNil()
++           {
++               return resetStatus();
++           }
++
++           
++
++            /**
++             * Getter for job_status by  Property Number 3
++             */
++            AviaryCommon::JobStatusType* WSF_CALL
++            AviaryCommon::JobStatus::getProperty3()
++            {
++                return getJob_status();
++            }
++
++            /**
++             * getter for job_status.
++             */
++            AviaryCommon::JobStatusType* WSF_CALL
++            AviaryCommon::JobStatus::getJob_status()
++             {
++                return property_Job_status;
++             }
++
++            /**
++             * setter for job_status
++             */
++            bool WSF_CALL
++            AviaryCommon::JobStatus::setJob_status(
++                    AviaryCommon::JobStatusType*  arg_Job_status)
++             {
++                
++
++                if(isValidJob_status &&
++                        arg_Job_status == property_Job_status)
++                {
++                    
++                    return true;
++                }
++
++                
++
++                
++                resetJob_status();
++
++                
++                    if(NULL == arg_Job_status)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_Job_status = arg_Job_status;
++                        isValidJob_status = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for job_status
++            */
++           bool WSF_CALL
++           AviaryCommon::JobStatus::resetJob_status()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++            
++                
++
++                if(property_Job_status != NULL)
++                {
++                   
++                   
++                         delete  property_Job_status;
++                     
++
++                   }
++
++                
++                
++                
++               isValidJob_status = false; 
++               return true;
++           }
++
++           /**
++            * Check whether job_status is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::JobStatus::isJob_statusNil()
++           {
++               return !isValidJob_status;
++           }
++
++           /**
++            * Set job_status to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::JobStatus::setJob_statusNil()
++           {
++               return resetJob_status();
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_JobStatusType.cpp b/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_JobStatusType.cpp
+new file mode 100644
+index 0000000..278c54a
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_JobStatusType.cpp
+@@ -0,0 +1,375 @@
++
++
++        /**
++         * JobStatusType.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryCommon_JobStatusType.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryCommon;
++        
++               /*
++                * Implementation of the JobStatusType|http://common.aviary.grid.redhat.com Element
++                */
++           AviaryCommon::JobStatusType::JobStatusType()
++        {
++
++        
++            qname = NULL;
++        
++                    property_JobStatusType;
++                
++            isValidJobStatusType  = false;
++        
++                  qname =  axutil_qname_create (Environment::getEnv(),
++                        "JobStatusType",
++                        "http://common.aviary.grid.redhat.com",
++                        NULL);
++                
++        }
++
++       AviaryCommon::JobStatusType::JobStatusType(std::string arg_JobStatusType)
++        {
++             
++                   qname = NULL;
++             
++                 property_JobStatusType;
++             
++            isValidJobStatusType  = true;
++            
++                 qname =  axutil_qname_create (Environment::getEnv(),
++                       "JobStatusType",
++                       "http://common.aviary.grid.redhat.com",
++                       NULL);
++               
++                    property_JobStatusType = arg_JobStatusType;
++            
++        }
++        AviaryCommon::JobStatusType::~JobStatusType()
++        {
++
++        }
++
++        
++            bool WSF_CALL
++            JobStatusType::deserializeFromString(
++                                            const axis2_char_t *node_value,
++                                            axiom_node_t *parent)
++            {
++              bool status = true;
++            
++                        setJobStatusType(node_value);
++                    
++              return status;
++            }
++        
++
++        bool WSF_CALL
++        AviaryCommon::JobStatusType::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++            
++        status = AXIS2_FAILURE;
++        if(parent)
++        {
++            axis2_char_t *attrib_text = NULL;
++            attrib_text = axiom_element_get_attribute_value_by_name((axiom_element_t*)axiom_node_get_data_element(parent, Environment::getEnv()), Environment::getEnv(), "nil");
++            if (attrib_text != NULL && !axutil_strcasecmp(attrib_text, "true"))
++            {
++              
++               /* but the wsdl says that, this is non nillable */
++                WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "NULL value is set to a non nillable element JobStatusType");
++                status = AXIS2_FAILURE;
++               
++            }
++            else
++            {
++                axiom_node_t *text_node = NULL;
++                text_node = axiom_node_get_first_child(parent, Environment::getEnv());
++                axiom_text_t *text_element = NULL;
++                if (text_node &&
++                        axiom_node_get_node_type(text_node, Environment::getEnv()) == AXIOM_TEXT)
++                    text_element = (axiom_text_t*)axiom_node_get_data_element(text_node, Environment::getEnv());
++                text_value = "";
++                if(text_element && axiom_text_get_value(text_element, Environment::getEnv()))
++                {
++                    text_value = (axis2_char_t*)axiom_text_get_value(text_element, Environment::getEnv());
++                }
++                status = deserializeFromString(text_value, parent);
++                }
++            }
++            
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryCommon::JobStatusType::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryCommon::JobStatusType::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++            char* WSF_CALL
++            AviaryCommon::JobStatusType::serializeToString(axutil_hash_t *namespaces)
++            {
++                axis2_char_t *text_value = NULL;
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                
++                         text_value = (axis2_char_t*)axutil_xml_quote_string(Environment::getEnv(), (axis2_char_t*)property_JobStatusType.c_str(), false);
++                         if (!text_value)
++                         {
++                             text_value = (axis2_char_t*)axutil_strdup(Environment::getEnv(), property_JobStatusType.c_str());
++                         }
++                      
++                return text_value;
++            }
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryCommon::JobStatusType::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++            axiom_data_source_t *data_source = NULL;
++            axutil_stream_t *stream = NULL;
++            axis2_char_t *text_value;
++             
++                    current_node = parent;
++                    data_source = (axiom_data_source_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                    if (!data_source)
++                        return NULL;
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv()); /* assume parent is of type data source */
++                    if (!stream)
++                        return NULL;
++                  
++               if(!parent_tag_closed && !tag_closed)
++               {
++                  text_value = ">"; 
++                  axutil_stream_write(stream, Environment::getEnv(), text_value, axutil_strlen(text_value));
++               }
++               
++               text_value = serializeToString(namespaces);
++               if(text_value)
++               {
++                    axutil_stream_write(stream, Environment::getEnv(), text_value, axutil_strlen(text_value));
++                    AXIS2_FREE(Environment::getEnv()->allocator, text_value);
++               }
++            
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for JobStatusType by  Property Number 1
++             */
++            std::string WSF_CALL
++            AviaryCommon::JobStatusType::getProperty1()
++            {
++                return getJobStatusType();
++            }
++
++            /**
++             * getter for JobStatusType.
++             */
++            std::string WSF_CALL
++            AviaryCommon::JobStatusType::getJobStatusType()
++             {
++                return property_JobStatusType;
++             }
++
++            /**
++             * setter for JobStatusType
++             */
++            bool WSF_CALL
++            AviaryCommon::JobStatusType::setJobStatusType(
++                    const std::string  arg_JobStatusType)
++             {
++                
++
++                if(isValidJobStatusType &&
++                        arg_JobStatusType == property_JobStatusType)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(arg_JobStatusType.empty())
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"JobStatusType is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetJobStatusType();
++
++                
++                        property_JobStatusType = std::string(arg_JobStatusType.c_str());
++                        isValidJobStatusType = true;
++                    
++                return true;
++             }
++
++            
++             /**
++             * specialized enum getter for JobStatusType.
++             */
++             ADBJobStatusTypeEnum WSF_CALL
++             AviaryCommon::JobStatusType::getJobStatusTypeEnum()
++             {
++
++                
++                 if (axutil_strcmp(property_JobStatusType.c_str(), "IDLE") == 0)
++                    return JobStatusType_IDLE;
++             
++                 if (axutil_strcmp(property_JobStatusType.c_str(), "RUNNING") == 0)
++                    return JobStatusType_RUNNING;
++             
++                 if (axutil_strcmp(property_JobStatusType.c_str(), "REMOVED") == 0)
++                    return JobStatusType_REMOVED;
++             
++                 if (axutil_strcmp(property_JobStatusType.c_str(), "COMPLETED") == 0)
++                    return JobStatusType_COMPLETED;
++             
++                 if (axutil_strcmp(property_JobStatusType.c_str(), "HELD") == 0)
++                    return JobStatusType_HELD;
++             
++             
++                 /* Error: none of the strings matched; invalid enum value */
++                 return (ADBJobStatusTypeEnum)-1;
++             }
++             
++             
++             /**
++             * specialized enum setter for JobStatusType.
++             */
++             bool WSF_CALL
++            AviaryCommon::JobStatusType::setJobStatusTypeEnum(const ADBJobStatusTypeEnum  arg_JobStatusType)
++             {
++                
++
++                
++                resetJobStatusType();
++
++                   
++                   switch (arg_JobStatusType)
++                   {
++                     
++                       case JobStatusType_IDLE :
++                            property_JobStatusType = (axis2_char_t *)axutil_strdup(Environment::getEnv(), "IDLE");
++                          break;
++                     
++                       case JobStatusType_RUNNING :
++                            property_JobStatusType = (axis2_char_t *)axutil_strdup(Environment::getEnv(), "RUNNING");
++                          break;
++                     
++                       case JobStatusType_REMOVED :
++                            property_JobStatusType = (axis2_char_t *)axutil_strdup(Environment::getEnv(), "REMOVED");
++                          break;
++                     
++                       case JobStatusType_COMPLETED :
++                            property_JobStatusType = (axis2_char_t *)axutil_strdup(Environment::getEnv(), "COMPLETED");
++                          break;
++                     
++                       case JobStatusType_HELD :
++                            property_JobStatusType = (axis2_char_t *)axutil_strdup(Environment::getEnv(), "HELD");
++                          break;
++                     
++                     
++                       default:
++                          isValidJobStatusType = false;
++                          property_JobStatusType = "";
++                          WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Error setting JobStatusType: undefined enum value");
++                          return false;
++                   }
++                
++                   if(property_JobStatusType.empty())
++                   {
++                       return AXIS2_FAILURE;
++                   }
++                     isValidJobStatusType = true;
++                        
++                
++                return true;
++             }
++             
++
++           /**
++            * resetter for JobStatusType
++            */
++           bool WSF_CALL
++           AviaryCommon::JobStatusType::resetJobStatusType()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidJobStatusType = false; 
++               return true;
++           }
++
++           /**
++            * Check whether JobStatusType is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::JobStatusType::isJobStatusTypeNil()
++           {
++               return !isValidJobStatusType;
++           }
++
++           /**
++            * Set JobStatusType to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::JobStatusType::setJobStatusTypeNil()
++           {
++               return resetJobStatusType();
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_JobSummary.cpp b/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_JobSummary.cpp
+new file mode 100644
+index 0000000..9fe45ed
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_JobSummary.cpp
+@@ -0,0 +1,3241 @@
++
++
++        /**
++         * JobSummary.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryCommon_JobSummary.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryCommon;
++        
++                /*
++                 * This type was generated from the piece of schema that had
++                 * name = JobSummary
++                 * Namespace URI = http://common.aviary.grid.redhat.com
++                 * Namespace Prefix = ns1
++                 */
++           AviaryCommon::JobSummary::JobSummary()
++        {
++
++        
++                property_Id  = NULL;
++              
++            isValidId  = false;
++        
++                property_Status  = NULL;
++              
++            isValidStatus  = false;
++        
++                property_Queued  = NULL;
++              
++            isValidQueued  = false;
++        
++                property_Last_update  = NULL;
++              
++            isValidLast_update  = false;
++        
++                property_Job_status  = NULL;
++              
++            isValidJob_status  = false;
++        
++                    property_Cmd;
++                
++            isValidCmd  = false;
++        
++                    property_Args1;
++                
++            isValidArgs1  = false;
++        
++                    property_Args2;
++                
++            isValidArgs2  = false;
++        
++                    property_Held;
++                
++            isValidHeld  = false;
++        
++                    property_Released;
++                
++            isValidReleased  = false;
++        
++                    property_Removed;
++                
++            isValidRemoved  = false;
++        
++        }
++
++       AviaryCommon::JobSummary::JobSummary(AviaryCommon::JobID* arg_Id,AviaryCommon::Status* arg_Status,axutil_date_time_t* arg_Queued,axutil_date_time_t* arg_Last_update,AviaryCommon::JobStatusType* arg_Job_status,std::string arg_Cmd,std::string arg_Args1,std::string arg_Args2,std::string arg_Held,std::string arg_Released,std::string arg_Removed)
++        {
++             
++               property_Id  = NULL;
++             
++            isValidId  = true;
++            
++               property_Status  = NULL;
++             
++            isValidStatus  = true;
++            
++               property_Queued  = NULL;
++             
++            isValidQueued  = true;
++            
++               property_Last_update  = NULL;
++             
++            isValidLast_update  = true;
++            
++               property_Job_status  = NULL;
++             
++            isValidJob_status  = true;
++            
++                 property_Cmd;
++             
++            isValidCmd  = true;
++            
++                 property_Args1;
++             
++            isValidArgs1  = true;
++            
++                 property_Args2;
++             
++            isValidArgs2  = true;
++            
++                 property_Held;
++             
++            isValidHeld  = true;
++            
++                 property_Released;
++             
++            isValidReleased  = true;
++            
++                 property_Removed;
++             
++            isValidRemoved  = true;
++            
++                    property_Id = arg_Id;
++            
++                    property_Status = arg_Status;
++            
++                    property_Queued = arg_Queued;
++            
++                    property_Last_update = arg_Last_update;
++            
++                    property_Job_status = arg_Job_status;
++            
++                    property_Cmd = arg_Cmd;
++            
++                    property_Args1 = arg_Args1;
++            
++                    property_Args2 = arg_Args2;
++            
++                    property_Held = arg_Held;
++            
++                    property_Released = arg_Released;
++            
++                    property_Removed = arg_Removed;
++            
++        }
++        AviaryCommon::JobSummary::~JobSummary()
++        {
++
++        }
++
++        
++
++        bool WSF_CALL
++        AviaryCommon::JobSummary::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++            axutil_qname_t *element_qname = NULL; 
++            
++               axiom_node_t *first_node = NULL;
++               bool is_early_node_valid = true;
++               axiom_node_t *current_node = NULL;
++               axiom_element_t *current_element = NULL;
++            
++              
++              while(parent && axiom_node_get_node_type(parent, Environment::getEnv()) != AXIOM_ELEMENT)
++              {
++                  parent = axiom_node_get_next_sibling(parent, Environment::getEnv());
++              }
++              if (NULL == parent)
++              {   
++                return AXIS2_FAILURE;
++              }
++              
++                      
++                      first_node = axiom_node_get_first_child(parent, Environment::getEnv());
++                      
++                    
++
++                     
++                     /*
++                      * building id element
++                      */
++                     
++                     
++                     
++                                   current_node = first_node;
++                                   is_early_node_valid = false;
++                                   
++                                   
++                                    while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                    {
++                                        current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                    }
++                                    if(current_node != NULL)
++                                    {
++                                        current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                        mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                    }
++                                   
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "id", NULL, NULL);
++                                 
++
++                           if (isParticle() ||  
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("id", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("id", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 AviaryCommon::JobID* element = new AviaryCommon::JobID();
++
++                                      status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                      if(AXIS2_FAILURE == status)
++                                      {
++                                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in building adb object for element id");
++                                      }
++                                      else
++                                      {
++                                          status = setId(element);
++                                      }
++                                    
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for id ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element id missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building status element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "status", NULL, NULL);
++                                 
++
++                           if (isParticle() ||  
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("status", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("status", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 AviaryCommon::Status* element = new AviaryCommon::Status();
++
++                                      status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                      if(AXIS2_FAILURE == status)
++                                      {
++                                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in building adb object for element status");
++                                      }
++                                      else
++                                      {
++                                          status = setStatus(element);
++                                      }
++                                    
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for status ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element status missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building queued element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "queued", NULL, NULL);
++                                 
++
++                           if ( 
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("queued", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("queued", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 
++                                      text_value = axiom_element_get_text(current_element, Environment::getEnv(), current_node);
++                                      if(text_value != NULL)
++                                      {
++                                          axutil_date_time_t* element = axutil_date_time_create(Environment::getEnv());
++                                          status = axutil_date_time_deserialize_date_time((axutil_date_time_t*)element, Environment::getEnv(),
++                                                                          text_value);
++                                          if(AXIS2_FAILURE ==  status)
++                                          {
++                                              if(element != NULL)
++                                              {
++                                                  axutil_date_time_free(element, Environment::getEnv());
++                                              }
++					                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI ,"failed in building element queued ");
++                                          }
++                                          else
++                                          {
++                                            status = setQueued(element);
++                                          }
++                                      }
++                                      
++                                      else
++                                      {
++				                            WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "NULL value is set to a non nillable element queued");
++                                            status = AXIS2_FAILURE;
++                                      }
++                                      
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for queued ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element queued missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building last_update element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "last_update", NULL, NULL);
++                                 
++
++                           if ( 
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("last_update", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("last_update", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 
++                                      text_value = axiom_element_get_text(current_element, Environment::getEnv(), current_node);
++                                      if(text_value != NULL)
++                                      {
++                                          axutil_date_time_t* element = axutil_date_time_create(Environment::getEnv());
++                                          status = axutil_date_time_deserialize_date_time((axutil_date_time_t*)element, Environment::getEnv(),
++                                                                          text_value);
++                                          if(AXIS2_FAILURE ==  status)
++                                          {
++                                              if(element != NULL)
++                                              {
++                                                  axutil_date_time_free(element, Environment::getEnv());
++                                              }
++					                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI ,"failed in building element last_update ");
++                                          }
++                                          else
++                                          {
++                                            status = setLast_update(element);
++                                          }
++                                      }
++                                      
++                                      else
++                                      {
++				                            WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "NULL value is set to a non nillable element last_update");
++                                            status = AXIS2_FAILURE;
++                                      }
++                                      
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for last_update ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element last_update missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building job_status element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "job_status", NULL, NULL);
++                                 
++
++                           if (isParticle() ||  
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("job_status", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("job_status", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 AviaryCommon::JobStatusType* element = new AviaryCommon::JobStatusType();
++
++                                      status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                      if(AXIS2_FAILURE == status)
++                                      {
++                                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in building adb object for element job_status");
++                                      }
++                                      else
++                                      {
++                                          status = setJob_status(element);
++                                      }
++                                    
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for job_status ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element job_status missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building cmd element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "cmd", NULL, NULL);
++                                 
++
++                           if ( 
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("cmd", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("cmd", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 
++                                      text_value = axiom_element_get_text(current_element, Environment::getEnv(), current_node);
++                                      if(text_value != NULL)
++                                      {
++                                            status = setCmd(text_value);
++                                      }
++                                      
++                                      else
++                                      {
++                                            /*
++                                             * axis2_qname_t *qname = NULL;
++                                             * axiom_attribute_t *the_attri = NULL;
++                                             * 
++                                             * qname = axutil_qname_create(Environment::getEnv(), "nil", "http://www.w3.org/2001/XMLSchema-instance", "xsi");
++                                             * the_attri = axiom_element_get_attribute(current_element, Environment::getEnv(), qname);
++                                             */
++                                            /* currently thereis a bug in the axiom_element_get_attribute, so we have to go to this bad method */
++
++                                            axiom_attribute_t *the_attri = NULL;
++                                            axis2_char_t *attrib_text = NULL;
++                                            axutil_hash_t *attribute_hash = NULL;
++
++                                            attribute_hash = axiom_element_get_all_attributes(current_element, Environment::getEnv());
++
++                                            attrib_text = NULL;
++                                            if(attribute_hash)
++                                            {
++                                                 axutil_hash_index_t *hi;
++                                                 void *val;
++                                                 const void *key;
++                                        
++                                                 for (hi = axutil_hash_first(attribute_hash, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                                                 {
++                                                     axutil_hash_this(hi, &key, NULL, &val);
++                                                     
++                                                     if(strstr((axis2_char_t*)key, "nil|http://www.w3.org/2001/XMLSchema-instance"))
++                                                     {
++                                                         the_attri = (axiom_attribute_t*)val;
++                                                         break;
++                                                     }
++                                                 }
++                                            }
++
++                                            if(the_attri)
++                                            {
++                                                attrib_text = axiom_attribute_get_value(the_attri, Environment::getEnv());
++                                            }
++                                            else
++                                            {
++                                                /* this is hoping that attribute is stored in "http://www.w3.org/2001/XMLSchema-instance", this happnes when name is in default namespace */
++                                                attrib_text = axiom_element_get_attribute_value_by_name(current_element, Environment::getEnv(), "nil");
++                                            }
++
++                                            if(attrib_text && 0 == axutil_strcmp(attrib_text, "1"))
++                                            {
++                                                WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "NULL value is set to a non nillable element cmd");
++                                                status = AXIS2_FAILURE;
++                                            }
++                                            else
++                                            {
++                                                /* after all, we found this is a empty string */
++                                                status = setCmd("");
++                                            }
++                                      }
++                                      
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for cmd ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element cmd missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building args1 element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "args1", NULL, NULL);
++                                 
++
++                           if ( 
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("args1", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("args1", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 
++                                      text_value = axiom_element_get_text(current_element, Environment::getEnv(), current_node);
++                                      if(text_value != NULL)
++                                      {
++                                            status = setArgs1(text_value);
++                                      }
++                                      
++                                      else
++                                      {
++                                            /*
++                                             * axis2_qname_t *qname = NULL;
++                                             * axiom_attribute_t *the_attri = NULL;
++                                             * 
++                                             * qname = axutil_qname_create(Environment::getEnv(), "nil", "http://www.w3.org/2001/XMLSchema-instance", "xsi");
++                                             * the_attri = axiom_element_get_attribute(current_element, Environment::getEnv(), qname);
++                                             */
++                                            /* currently thereis a bug in the axiom_element_get_attribute, so we have to go to this bad method */
++
++                                            axiom_attribute_t *the_attri = NULL;
++                                            axis2_char_t *attrib_text = NULL;
++                                            axutil_hash_t *attribute_hash = NULL;
++
++                                            attribute_hash = axiom_element_get_all_attributes(current_element, Environment::getEnv());
++
++                                            attrib_text = NULL;
++                                            if(attribute_hash)
++                                            {
++                                                 axutil_hash_index_t *hi;
++                                                 void *val;
++                                                 const void *key;
++                                        
++                                                 for (hi = axutil_hash_first(attribute_hash, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                                                 {
++                                                     axutil_hash_this(hi, &key, NULL, &val);
++                                                     
++                                                     if(strstr((axis2_char_t*)key, "nil|http://www.w3.org/2001/XMLSchema-instance"))
++                                                     {
++                                                         the_attri = (axiom_attribute_t*)val;
++                                                         break;
++                                                     }
++                                                 }
++                                            }
++
++                                            if(the_attri)
++                                            {
++                                                attrib_text = axiom_attribute_get_value(the_attri, Environment::getEnv());
++                                            }
++                                            else
++                                            {
++                                                /* this is hoping that attribute is stored in "http://www.w3.org/2001/XMLSchema-instance", this happnes when name is in default namespace */
++                                                attrib_text = axiom_element_get_attribute_value_by_name(current_element, Environment::getEnv(), "nil");
++                                            }
++
++                                            if(attrib_text && 0 == axutil_strcmp(attrib_text, "1"))
++                                            {
++                                                WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "NULL value is set to a non nillable element args1");
++                                                status = AXIS2_FAILURE;
++                                            }
++                                            else
++                                            {
++                                                /* after all, we found this is a empty string */
++                                                status = setArgs1("");
++                                            }
++                                      }
++                                      
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for args1 ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building args2 element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "args2", NULL, NULL);
++                                 
++
++                           if ( 
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("args2", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("args2", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 
++                                      text_value = axiom_element_get_text(current_element, Environment::getEnv(), current_node);
++                                      if(text_value != NULL)
++                                      {
++                                            status = setArgs2(text_value);
++                                      }
++                                      
++                                      else
++                                      {
++                                            /*
++                                             * axis2_qname_t *qname = NULL;
++                                             * axiom_attribute_t *the_attri = NULL;
++                                             * 
++                                             * qname = axutil_qname_create(Environment::getEnv(), "nil", "http://www.w3.org/2001/XMLSchema-instance", "xsi");
++                                             * the_attri = axiom_element_get_attribute(current_element, Environment::getEnv(), qname);
++                                             */
++                                            /* currently thereis a bug in the axiom_element_get_attribute, so we have to go to this bad method */
++
++                                            axiom_attribute_t *the_attri = NULL;
++                                            axis2_char_t *attrib_text = NULL;
++                                            axutil_hash_t *attribute_hash = NULL;
++
++                                            attribute_hash = axiom_element_get_all_attributes(current_element, Environment::getEnv());
++
++                                            attrib_text = NULL;
++                                            if(attribute_hash)
++                                            {
++                                                 axutil_hash_index_t *hi;
++                                                 void *val;
++                                                 const void *key;
++                                        
++                                                 for (hi = axutil_hash_first(attribute_hash, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                                                 {
++                                                     axutil_hash_this(hi, &key, NULL, &val);
++                                                     
++                                                     if(strstr((axis2_char_t*)key, "nil|http://www.w3.org/2001/XMLSchema-instance"))
++                                                     {
++                                                         the_attri = (axiom_attribute_t*)val;
++                                                         break;
++                                                     }
++                                                 }
++                                            }
++
++                                            if(the_attri)
++                                            {
++                                                attrib_text = axiom_attribute_get_value(the_attri, Environment::getEnv());
++                                            }
++                                            else
++                                            {
++                                                /* this is hoping that attribute is stored in "http://www.w3.org/2001/XMLSchema-instance", this happnes when name is in default namespace */
++                                                attrib_text = axiom_element_get_attribute_value_by_name(current_element, Environment::getEnv(), "nil");
++                                            }
++
++                                            if(attrib_text && 0 == axutil_strcmp(attrib_text, "1"))
++                                            {
++                                                WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "NULL value is set to a non nillable element args2");
++                                                status = AXIS2_FAILURE;
++                                            }
++                                            else
++                                            {
++                                                /* after all, we found this is a empty string */
++                                                status = setArgs2("");
++                                            }
++                                      }
++                                      
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for args2 ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building held element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "held", NULL, NULL);
++                                 
++
++                           if ( 
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("held", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("held", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 
++                                      text_value = axiom_element_get_text(current_element, Environment::getEnv(), current_node);
++                                      if(text_value != NULL)
++                                      {
++                                            status = setHeld(text_value);
++                                      }
++                                      
++                                      else
++                                      {
++                                            /*
++                                             * axis2_qname_t *qname = NULL;
++                                             * axiom_attribute_t *the_attri = NULL;
++                                             * 
++                                             * qname = axutil_qname_create(Environment::getEnv(), "nil", "http://www.w3.org/2001/XMLSchema-instance", "xsi");
++                                             * the_attri = axiom_element_get_attribute(current_element, Environment::getEnv(), qname);
++                                             */
++                                            /* currently thereis a bug in the axiom_element_get_attribute, so we have to go to this bad method */
++
++                                            axiom_attribute_t *the_attri = NULL;
++                                            axis2_char_t *attrib_text = NULL;
++                                            axutil_hash_t *attribute_hash = NULL;
++
++                                            attribute_hash = axiom_element_get_all_attributes(current_element, Environment::getEnv());
++
++                                            attrib_text = NULL;
++                                            if(attribute_hash)
++                                            {
++                                                 axutil_hash_index_t *hi;
++                                                 void *val;
++                                                 const void *key;
++                                        
++                                                 for (hi = axutil_hash_first(attribute_hash, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                                                 {
++                                                     axutil_hash_this(hi, &key, NULL, &val);
++                                                     
++                                                     if(strstr((axis2_char_t*)key, "nil|http://www.w3.org/2001/XMLSchema-instance"))
++                                                     {
++                                                         the_attri = (axiom_attribute_t*)val;
++                                                         break;
++                                                     }
++                                                 }
++                                            }
++
++                                            if(the_attri)
++                                            {
++                                                attrib_text = axiom_attribute_get_value(the_attri, Environment::getEnv());
++                                            }
++                                            else
++                                            {
++                                                /* this is hoping that attribute is stored in "http://www.w3.org/2001/XMLSchema-instance", this happnes when name is in default namespace */
++                                                attrib_text = axiom_element_get_attribute_value_by_name(current_element, Environment::getEnv(), "nil");
++                                            }
++
++                                            if(attrib_text && 0 == axutil_strcmp(attrib_text, "1"))
++                                            {
++                                                WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "NULL value is set to a non nillable element held");
++                                                status = AXIS2_FAILURE;
++                                            }
++                                            else
++                                            {
++                                                /* after all, we found this is a empty string */
++                                                status = setHeld("");
++                                            }
++                                      }
++                                      
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for held ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building released element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "released", NULL, NULL);
++                                 
++
++                           if ( 
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("released", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("released", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 
++                                      text_value = axiom_element_get_text(current_element, Environment::getEnv(), current_node);
++                                      if(text_value != NULL)
++                                      {
++                                            status = setReleased(text_value);
++                                      }
++                                      
++                                      else
++                                      {
++                                            /*
++                                             * axis2_qname_t *qname = NULL;
++                                             * axiom_attribute_t *the_attri = NULL;
++                                             * 
++                                             * qname = axutil_qname_create(Environment::getEnv(), "nil", "http://www.w3.org/2001/XMLSchema-instance", "xsi");
++                                             * the_attri = axiom_element_get_attribute(current_element, Environment::getEnv(), qname);
++                                             */
++                                            /* currently thereis a bug in the axiom_element_get_attribute, so we have to go to this bad method */
++
++                                            axiom_attribute_t *the_attri = NULL;
++                                            axis2_char_t *attrib_text = NULL;
++                                            axutil_hash_t *attribute_hash = NULL;
++
++                                            attribute_hash = axiom_element_get_all_attributes(current_element, Environment::getEnv());
++
++                                            attrib_text = NULL;
++                                            if(attribute_hash)
++                                            {
++                                                 axutil_hash_index_t *hi;
++                                                 void *val;
++                                                 const void *key;
++                                        
++                                                 for (hi = axutil_hash_first(attribute_hash, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                                                 {
++                                                     axutil_hash_this(hi, &key, NULL, &val);
++                                                     
++                                                     if(strstr((axis2_char_t*)key, "nil|http://www.w3.org/2001/XMLSchema-instance"))
++                                                     {
++                                                         the_attri = (axiom_attribute_t*)val;
++                                                         break;
++                                                     }
++                                                 }
++                                            }
++
++                                            if(the_attri)
++                                            {
++                                                attrib_text = axiom_attribute_get_value(the_attri, Environment::getEnv());
++                                            }
++                                            else
++                                            {
++                                                /* this is hoping that attribute is stored in "http://www.w3.org/2001/XMLSchema-instance", this happnes when name is in default namespace */
++                                                attrib_text = axiom_element_get_attribute_value_by_name(current_element, Environment::getEnv(), "nil");
++                                            }
++
++                                            if(attrib_text && 0 == axutil_strcmp(attrib_text, "1"))
++                                            {
++                                                WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "NULL value is set to a non nillable element released");
++                                                status = AXIS2_FAILURE;
++                                            }
++                                            else
++                                            {
++                                                /* after all, we found this is a empty string */
++                                                status = setReleased("");
++                                            }
++                                      }
++                                      
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for released ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building removed element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "removed", NULL, NULL);
++                                 
++
++                           if ( 
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("removed", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("removed", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 
++                                      text_value = axiom_element_get_text(current_element, Environment::getEnv(), current_node);
++                                      if(text_value != NULL)
++                                      {
++                                            status = setRemoved(text_value);
++                                      }
++                                      
++                                      else
++                                      {
++                                            /*
++                                             * axis2_qname_t *qname = NULL;
++                                             * axiom_attribute_t *the_attri = NULL;
++                                             * 
++                                             * qname = axutil_qname_create(Environment::getEnv(), "nil", "http://www.w3.org/2001/XMLSchema-instance", "xsi");
++                                             * the_attri = axiom_element_get_attribute(current_element, Environment::getEnv(), qname);
++                                             */
++                                            /* currently thereis a bug in the axiom_element_get_attribute, so we have to go to this bad method */
++
++                                            axiom_attribute_t *the_attri = NULL;
++                                            axis2_char_t *attrib_text = NULL;
++                                            axutil_hash_t *attribute_hash = NULL;
++
++                                            attribute_hash = axiom_element_get_all_attributes(current_element, Environment::getEnv());
++
++                                            attrib_text = NULL;
++                                            if(attribute_hash)
++                                            {
++                                                 axutil_hash_index_t *hi;
++                                                 void *val;
++                                                 const void *key;
++                                        
++                                                 for (hi = axutil_hash_first(attribute_hash, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                                                 {
++                                                     axutil_hash_this(hi, &key, NULL, &val);
++                                                     
++                                                     if(strstr((axis2_char_t*)key, "nil|http://www.w3.org/2001/XMLSchema-instance"))
++                                                     {
++                                                         the_attri = (axiom_attribute_t*)val;
++                                                         break;
++                                                     }
++                                                 }
++                                            }
++
++                                            if(the_attri)
++                                            {
++                                                attrib_text = axiom_attribute_get_value(the_attri, Environment::getEnv());
++                                            }
++                                            else
++                                            {
++                                                /* this is hoping that attribute is stored in "http://www.w3.org/2001/XMLSchema-instance", this happnes when name is in default namespace */
++                                                attrib_text = axiom_element_get_attribute_value_by_name(current_element, Environment::getEnv(), "nil");
++                                            }
++
++                                            if(attrib_text && 0 == axutil_strcmp(attrib_text, "1"))
++                                            {
++                                                WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "NULL value is set to a non nillable element removed");
++                                                status = AXIS2_FAILURE;
++                                            }
++                                            else
++                                            {
++                                                /* after all, we found this is a empty string */
++                                                status = setRemoved("");
++                                            }
++                                      }
++                                      
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for removed ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryCommon::JobSummary::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryCommon::JobSummary::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryCommon::JobSummary::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++             axis2_char_t *string_to_stream;
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++                axiom_namespace_t *ns1 = NULL;
++
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                axis2_char_t *p_prefix = NULL;
++            
++                    axis2_char_t text_value_1[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++                    axis2_char_t text_value_2[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++                    axis2_char_t *text_value_3;
++                    axis2_char_t *text_value_3_temp;
++                    
++                    axis2_char_t *text_value_4;
++                    axis2_char_t *text_value_4_temp;
++                    
++                    axis2_char_t text_value_5[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++                    axis2_char_t *text_value_6;
++                    axis2_char_t *text_value_6_temp;
++                    
++                    axis2_char_t *text_value_7;
++                    axis2_char_t *text_value_7_temp;
++                    
++                    axis2_char_t *text_value_8;
++                    axis2_char_t *text_value_8_temp;
++                    
++                    axis2_char_t *text_value_9;
++                    axis2_char_t *text_value_9_temp;
++                    
++                    axis2_char_t *text_value_10;
++                    axis2_char_t *text_value_10_temp;
++                    
++                    axis2_char_t *text_value_11;
++                    axis2_char_t *text_value_11_temp;
++                    
++               axis2_char_t *start_input_str = NULL;
++               axis2_char_t *end_input_str = NULL;
++               unsigned int start_input_str_len = 0;
++               unsigned int end_input_str_len = 0;
++            
++            
++               axiom_data_source_t *data_source = NULL;
++               axutil_stream_t *stream = NULL;
++
++            
++                    current_node = parent;
++                    data_source = (axiom_data_source_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                    if (!data_source)
++                        return NULL;
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv()); /* assume parent is of type data source */
++                    if (!stream)
++                        return NULL;
++                  
++            if(!parent_tag_closed)
++            {
++            
++              string_to_stream = ">"; 
++              axutil_stream_write(stream, Environment::getEnv(), string_to_stream, axutil_strlen(string_to_stream));
++              tag_closed = 1;
++            
++            }
++            
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidId)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property id");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("id"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("id")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing id element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sid",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":""); 
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sid>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                     
++                            if(!property_Id->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                            }
++                            property_Id->serialize(current_node, parent_element,
++                                                                                 property_Id->isParticle() || false, namespaces, next_ns_index);
++                            
++                            if(!property_Id->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                            }
++                            
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidStatus)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property status");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("status"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("status")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing status element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sstatus",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":""); 
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sstatus>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                     
++                            if(!property_Status->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                            }
++                            property_Status->serialize(current_node, parent_element,
++                                                                                 property_Status->isParticle() || false, namespaces, next_ns_index);
++                            
++                            if(!property_Status->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                            }
++                            
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidQueued)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property queued");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("queued"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("queued")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing queued element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%squeued>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%squeued>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                    
++                          text_value_3 = axutil_date_time_serialize_date_time(property_Queued, Environment::getEnv());
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), text_value_3, axutil_strlen(text_value_3));
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                           
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidLast_update)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property last_update");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("last_update"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("last_update")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing last_update element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%slast_update>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%slast_update>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                    
++                          text_value_4 = axutil_date_time_serialize_date_time(property_Last_update, Environment::getEnv());
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), text_value_4, axutil_strlen(text_value_4));
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                           
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidJob_status)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property job_status");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("job_status"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("job_status")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing job_status element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sjob_status",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":""); 
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sjob_status>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                     
++                            if(!property_Job_status->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                            }
++                            property_Job_status->serialize(current_node, parent_element,
++                                                                                 property_Job_status->isParticle() || false, namespaces, next_ns_index);
++                            
++                            if(!property_Job_status->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                            }
++                            
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidCmd)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property cmd");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("cmd"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("cmd")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing cmd element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%scmd>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%scmd>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                    
++                           text_value_6 = (axis2_char_t*)property_Cmd.c_str();
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                           
++                            
++                           text_value_6_temp = axutil_xml_quote_string(Environment::getEnv(), text_value_6, true);
++                           if (text_value_6_temp)
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_6_temp, axutil_strlen(text_value_6_temp));
++                               AXIS2_FREE(Environment::getEnv()->allocator, text_value_6_temp);
++                           }
++                           else
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_6, axutil_strlen(text_value_6));
++                           }
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                           
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidArgs1)
++                   {
++                      
++                           /* no need to complain for minoccurs=0 element */
++                            
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("args1"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("args1")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing args1 element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sargs1>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sargs1>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                    
++                           text_value_7 = (axis2_char_t*)property_Args1.c_str();
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                           
++                            
++                           text_value_7_temp = axutil_xml_quote_string(Environment::getEnv(), text_value_7, true);
++                           if (text_value_7_temp)
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_7_temp, axutil_strlen(text_value_7_temp));
++                               AXIS2_FREE(Environment::getEnv()->allocator, text_value_7_temp);
++                           }
++                           else
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_7, axutil_strlen(text_value_7));
++                           }
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                           
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidArgs2)
++                   {
++                      
++                           /* no need to complain for minoccurs=0 element */
++                            
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("args2"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("args2")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing args2 element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sargs2>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sargs2>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                    
++                           text_value_8 = (axis2_char_t*)property_Args2.c_str();
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                           
++                            
++                           text_value_8_temp = axutil_xml_quote_string(Environment::getEnv(), text_value_8, true);
++                           if (text_value_8_temp)
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_8_temp, axutil_strlen(text_value_8_temp));
++                               AXIS2_FREE(Environment::getEnv()->allocator, text_value_8_temp);
++                           }
++                           else
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_8, axutil_strlen(text_value_8));
++                           }
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                           
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidHeld)
++                   {
++                      
++                           /* no need to complain for minoccurs=0 element */
++                            
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("held"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("held")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing held element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sheld>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sheld>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                    
++                           text_value_9 = (axis2_char_t*)property_Held.c_str();
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                           
++                            
++                           text_value_9_temp = axutil_xml_quote_string(Environment::getEnv(), text_value_9, true);
++                           if (text_value_9_temp)
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_9_temp, axutil_strlen(text_value_9_temp));
++                               AXIS2_FREE(Environment::getEnv()->allocator, text_value_9_temp);
++                           }
++                           else
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_9, axutil_strlen(text_value_9));
++                           }
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                           
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidReleased)
++                   {
++                      
++                           /* no need to complain for minoccurs=0 element */
++                            
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("released"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("released")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing released element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sreleased>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sreleased>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                    
++                           text_value_10 = (axis2_char_t*)property_Released.c_str();
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                           
++                            
++                           text_value_10_temp = axutil_xml_quote_string(Environment::getEnv(), text_value_10, true);
++                           if (text_value_10_temp)
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_10_temp, axutil_strlen(text_value_10_temp));
++                               AXIS2_FREE(Environment::getEnv()->allocator, text_value_10_temp);
++                           }
++                           else
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_10, axutil_strlen(text_value_10));
++                           }
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                           
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidRemoved)
++                   {
++                      
++                           /* no need to complain for minoccurs=0 element */
++                            
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("removed"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("removed")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing removed element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sremoved>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sremoved>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                    
++                           text_value_11 = (axis2_char_t*)property_Removed.c_str();
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                           
++                            
++                           text_value_11_temp = axutil_xml_quote_string(Environment::getEnv(), text_value_11, true);
++                           if (text_value_11_temp)
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_11_temp, axutil_strlen(text_value_11_temp));
++                               AXIS2_FREE(Environment::getEnv()->allocator, text_value_11_temp);
++                           }
++                           else
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_11, axutil_strlen(text_value_11));
++                           }
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                           
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for id by  Property Number 1
++             */
++            AviaryCommon::JobID* WSF_CALL
++            AviaryCommon::JobSummary::getProperty1()
++            {
++                return getId();
++            }
++
++            /**
++             * getter for id.
++             */
++            AviaryCommon::JobID* WSF_CALL
++            AviaryCommon::JobSummary::getId()
++             {
++                return property_Id;
++             }
++
++            /**
++             * setter for id
++             */
++            bool WSF_CALL
++            AviaryCommon::JobSummary::setId(
++                    AviaryCommon::JobID*  arg_Id)
++             {
++                
++
++                if(isValidId &&
++                        arg_Id == property_Id)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(NULL == arg_Id)
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"id is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetId();
++
++                
++                    if(NULL == arg_Id)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_Id = arg_Id;
++                        isValidId = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for id
++            */
++           bool WSF_CALL
++           AviaryCommon::JobSummary::resetId()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++            
++                
++
++                if(property_Id != NULL)
++                {
++                   
++                   
++                         delete  property_Id;
++                     
++
++                   }
++
++                
++                
++                
++               isValidId = false; 
++               return true;
++           }
++
++           /**
++            * Check whether id is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::JobSummary::isIdNil()
++           {
++               return !isValidId;
++           }
++
++           /**
++            * Set id to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::JobSummary::setIdNil()
++           {
++               return resetId();
++           }
++
++           
++
++            /**
++             * Getter for status by  Property Number 2
++             */
++            AviaryCommon::Status* WSF_CALL
++            AviaryCommon::JobSummary::getProperty2()
++            {
++                return getStatus();
++            }
++
++            /**
++             * getter for status.
++             */
++            AviaryCommon::Status* WSF_CALL
++            AviaryCommon::JobSummary::getStatus()
++             {
++                return property_Status;
++             }
++
++            /**
++             * setter for status
++             */
++            bool WSF_CALL
++            AviaryCommon::JobSummary::setStatus(
++                    AviaryCommon::Status*  arg_Status)
++             {
++                
++
++                if(isValidStatus &&
++                        arg_Status == property_Status)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(NULL == arg_Status)
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"status is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetStatus();
++
++                
++                    if(NULL == arg_Status)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_Status = arg_Status;
++                        isValidStatus = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for status
++            */
++           bool WSF_CALL
++           AviaryCommon::JobSummary::resetStatus()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++            
++                
++
++                if(property_Status != NULL)
++                {
++                   
++                   
++                         delete  property_Status;
++                     
++
++                   }
++
++                
++                
++                
++               isValidStatus = false; 
++               return true;
++           }
++
++           /**
++            * Check whether status is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::JobSummary::isStatusNil()
++           {
++               return !isValidStatus;
++           }
++
++           /**
++            * Set status to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::JobSummary::setStatusNil()
++           {
++               return resetStatus();
++           }
++
++           
++
++            /**
++             * Getter for queued by  Property Number 3
++             */
++            axutil_date_time_t* WSF_CALL
++            AviaryCommon::JobSummary::getProperty3()
++            {
++                return getQueued();
++            }
++
++            /**
++             * getter for queued.
++             */
++            axutil_date_time_t* WSF_CALL
++            AviaryCommon::JobSummary::getQueued()
++             {
++                return property_Queued;
++             }
++
++            /**
++             * setter for queued
++             */
++            bool WSF_CALL
++            AviaryCommon::JobSummary::setQueued(
++                    axutil_date_time_t*  arg_Queued)
++             {
++                
++
++                if(isValidQueued &&
++                        arg_Queued == property_Queued)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(NULL == arg_Queued)
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"queued is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetQueued();
++
++                
++                    if(NULL == arg_Queued)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_Queued = arg_Queued;
++                        isValidQueued = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for queued
++            */
++           bool WSF_CALL
++           AviaryCommon::JobSummary::resetQueued()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++            
++                
++
++                if(property_Queued != NULL)
++                {
++                   
++                   
++                      axutil_date_time_free(property_Queued, Environment::getEnv());
++                         property_Queued = NULL;
++                     
++
++                   }
++
++                
++                
++                
++               isValidQueued = false; 
++               return true;
++           }
++
++           /**
++            * Check whether queued is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::JobSummary::isQueuedNil()
++           {
++               return !isValidQueued;
++           }
++
++           /**
++            * Set queued to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::JobSummary::setQueuedNil()
++           {
++               return resetQueued();
++           }
++
++           
++
++            /**
++             * Getter for last_update by  Property Number 4
++             */
++            axutil_date_time_t* WSF_CALL
++            AviaryCommon::JobSummary::getProperty4()
++            {
++                return getLast_update();
++            }
++
++            /**
++             * getter for last_update.
++             */
++            axutil_date_time_t* WSF_CALL
++            AviaryCommon::JobSummary::getLast_update()
++             {
++                return property_Last_update;
++             }
++
++            /**
++             * setter for last_update
++             */
++            bool WSF_CALL
++            AviaryCommon::JobSummary::setLast_update(
++                    axutil_date_time_t*  arg_Last_update)
++             {
++                
++
++                if(isValidLast_update &&
++                        arg_Last_update == property_Last_update)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(NULL == arg_Last_update)
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"last_update is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetLast_update();
++
++                
++                    if(NULL == arg_Last_update)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_Last_update = arg_Last_update;
++                        isValidLast_update = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for last_update
++            */
++           bool WSF_CALL
++           AviaryCommon::JobSummary::resetLast_update()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++            
++                
++
++                if(property_Last_update != NULL)
++                {
++                   
++                   
++                      axutil_date_time_free(property_Last_update, Environment::getEnv());
++                         property_Last_update = NULL;
++                     
++
++                   }
++
++                
++                
++                
++               isValidLast_update = false; 
++               return true;
++           }
++
++           /**
++            * Check whether last_update is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::JobSummary::isLast_updateNil()
++           {
++               return !isValidLast_update;
++           }
++
++           /**
++            * Set last_update to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::JobSummary::setLast_updateNil()
++           {
++               return resetLast_update();
++           }
++
++           
++
++            /**
++             * Getter for job_status by  Property Number 5
++             */
++            AviaryCommon::JobStatusType* WSF_CALL
++            AviaryCommon::JobSummary::getProperty5()
++            {
++                return getJob_status();
++            }
++
++            /**
++             * getter for job_status.
++             */
++            AviaryCommon::JobStatusType* WSF_CALL
++            AviaryCommon::JobSummary::getJob_status()
++             {
++                return property_Job_status;
++             }
++
++            /**
++             * setter for job_status
++             */
++            bool WSF_CALL
++            AviaryCommon::JobSummary::setJob_status(
++                    AviaryCommon::JobStatusType*  arg_Job_status)
++             {
++                
++
++                if(isValidJob_status &&
++                        arg_Job_status == property_Job_status)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(NULL == arg_Job_status)
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"job_status is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetJob_status();
++
++                
++                    if(NULL == arg_Job_status)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_Job_status = arg_Job_status;
++                        isValidJob_status = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for job_status
++            */
++           bool WSF_CALL
++           AviaryCommon::JobSummary::resetJob_status()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++            
++                
++
++                if(property_Job_status != NULL)
++                {
++                   
++                   
++                         delete  property_Job_status;
++                     
++
++                   }
++
++                
++                
++                
++               isValidJob_status = false; 
++               return true;
++           }
++
++           /**
++            * Check whether job_status is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::JobSummary::isJob_statusNil()
++           {
++               return !isValidJob_status;
++           }
++
++           /**
++            * Set job_status to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::JobSummary::setJob_statusNil()
++           {
++               return resetJob_status();
++           }
++
++           
++
++            /**
++             * Getter for cmd by  Property Number 6
++             */
++            std::string WSF_CALL
++            AviaryCommon::JobSummary::getProperty6()
++            {
++                return getCmd();
++            }
++
++            /**
++             * getter for cmd.
++             */
++            std::string WSF_CALL
++            AviaryCommon::JobSummary::getCmd()
++             {
++                return property_Cmd;
++             }
++
++            /**
++             * setter for cmd
++             */
++            bool WSF_CALL
++            AviaryCommon::JobSummary::setCmd(
++                    const std::string  arg_Cmd)
++             {
++                
++
++                if(isValidCmd &&
++                        arg_Cmd == property_Cmd)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(arg_Cmd.empty())
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"cmd is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetCmd();
++
++                
++                        property_Cmd = std::string(arg_Cmd.c_str());
++                        isValidCmd = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for cmd
++            */
++           bool WSF_CALL
++           AviaryCommon::JobSummary::resetCmd()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidCmd = false; 
++               return true;
++           }
++
++           /**
++            * Check whether cmd is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::JobSummary::isCmdNil()
++           {
++               return !isValidCmd;
++           }
++
++           /**
++            * Set cmd to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::JobSummary::setCmdNil()
++           {
++               return resetCmd();
++           }
++
++           
++
++            /**
++             * Getter for args1 by  Property Number 7
++             */
++            std::string WSF_CALL
++            AviaryCommon::JobSummary::getProperty7()
++            {
++                return getArgs1();
++            }
++
++            /**
++             * getter for args1.
++             */
++            std::string WSF_CALL
++            AviaryCommon::JobSummary::getArgs1()
++             {
++                return property_Args1;
++             }
++
++            /**
++             * setter for args1
++             */
++            bool WSF_CALL
++            AviaryCommon::JobSummary::setArgs1(
++                    const std::string  arg_Args1)
++             {
++                
++
++                if(isValidArgs1 &&
++                        arg_Args1 == property_Args1)
++                {
++                    
++                    return true;
++                }
++
++                
++
++                
++                resetArgs1();
++
++                
++                        property_Args1 = std::string(arg_Args1.c_str());
++                        isValidArgs1 = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for args1
++            */
++           bool WSF_CALL
++           AviaryCommon::JobSummary::resetArgs1()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidArgs1 = false; 
++               return true;
++           }
++
++           /**
++            * Check whether args1 is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::JobSummary::isArgs1Nil()
++           {
++               return !isValidArgs1;
++           }
++
++           /**
++            * Set args1 to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::JobSummary::setArgs1Nil()
++           {
++               return resetArgs1();
++           }
++
++           
++
++            /**
++             * Getter for args2 by  Property Number 8
++             */
++            std::string WSF_CALL
++            AviaryCommon::JobSummary::getProperty8()
++            {
++                return getArgs2();
++            }
++
++            /**
++             * getter for args2.
++             */
++            std::string WSF_CALL
++            AviaryCommon::JobSummary::getArgs2()
++             {
++                return property_Args2;
++             }
++
++            /**
++             * setter for args2
++             */
++            bool WSF_CALL
++            AviaryCommon::JobSummary::setArgs2(
++                    const std::string  arg_Args2)
++             {
++                
++
++                if(isValidArgs2 &&
++                        arg_Args2 == property_Args2)
++                {
++                    
++                    return true;
++                }
++
++                
++
++                
++                resetArgs2();
++
++                
++                        property_Args2 = std::string(arg_Args2.c_str());
++                        isValidArgs2 = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for args2
++            */
++           bool WSF_CALL
++           AviaryCommon::JobSummary::resetArgs2()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidArgs2 = false; 
++               return true;
++           }
++
++           /**
++            * Check whether args2 is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::JobSummary::isArgs2Nil()
++           {
++               return !isValidArgs2;
++           }
++
++           /**
++            * Set args2 to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::JobSummary::setArgs2Nil()
++           {
++               return resetArgs2();
++           }
++
++           
++
++            /**
++             * Getter for held by  Property Number 9
++             */
++            std::string WSF_CALL
++            AviaryCommon::JobSummary::getProperty9()
++            {
++                return getHeld();
++            }
++
++            /**
++             * getter for held.
++             */
++            std::string WSF_CALL
++            AviaryCommon::JobSummary::getHeld()
++             {
++                return property_Held;
++             }
++
++            /**
++             * setter for held
++             */
++            bool WSF_CALL
++            AviaryCommon::JobSummary::setHeld(
++                    const std::string  arg_Held)
++             {
++                
++
++                if(isValidHeld &&
++                        arg_Held == property_Held)
++                {
++                    
++                    return true;
++                }
++
++                
++
++                
++                resetHeld();
++
++                
++                        property_Held = std::string(arg_Held.c_str());
++                        isValidHeld = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for held
++            */
++           bool WSF_CALL
++           AviaryCommon::JobSummary::resetHeld()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidHeld = false; 
++               return true;
++           }
++
++           /**
++            * Check whether held is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::JobSummary::isHeldNil()
++           {
++               return !isValidHeld;
++           }
++
++           /**
++            * Set held to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::JobSummary::setHeldNil()
++           {
++               return resetHeld();
++           }
++
++           
++
++            /**
++             * Getter for released by  Property Number 10
++             */
++            std::string WSF_CALL
++            AviaryCommon::JobSummary::getProperty10()
++            {
++                return getReleased();
++            }
++
++            /**
++             * getter for released.
++             */
++            std::string WSF_CALL
++            AviaryCommon::JobSummary::getReleased()
++             {
++                return property_Released;
++             }
++
++            /**
++             * setter for released
++             */
++            bool WSF_CALL
++            AviaryCommon::JobSummary::setReleased(
++                    const std::string  arg_Released)
++             {
++                
++
++                if(isValidReleased &&
++                        arg_Released == property_Released)
++                {
++                    
++                    return true;
++                }
++
++                
++
++                
++                resetReleased();
++
++                
++                        property_Released = std::string(arg_Released.c_str());
++                        isValidReleased = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for released
++            */
++           bool WSF_CALL
++           AviaryCommon::JobSummary::resetReleased()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidReleased = false; 
++               return true;
++           }
++
++           /**
++            * Check whether released is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::JobSummary::isReleasedNil()
++           {
++               return !isValidReleased;
++           }
++
++           /**
++            * Set released to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::JobSummary::setReleasedNil()
++           {
++               return resetReleased();
++           }
++
++           
++
++            /**
++             * Getter for removed by  Property Number 11
++             */
++            std::string WSF_CALL
++            AviaryCommon::JobSummary::getProperty11()
++            {
++                return getRemoved();
++            }
++
++            /**
++             * getter for removed.
++             */
++            std::string WSF_CALL
++            AviaryCommon::JobSummary::getRemoved()
++             {
++                return property_Removed;
++             }
++
++            /**
++             * setter for removed
++             */
++            bool WSF_CALL
++            AviaryCommon::JobSummary::setRemoved(
++                    const std::string  arg_Removed)
++             {
++                
++
++                if(isValidRemoved &&
++                        arg_Removed == property_Removed)
++                {
++                    
++                    return true;
++                }
++
++                
++
++                
++                resetRemoved();
++
++                
++                        property_Removed = std::string(arg_Removed.c_str());
++                        isValidRemoved = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for removed
++            */
++           bool WSF_CALL
++           AviaryCommon::JobSummary::resetRemoved()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidRemoved = false; 
++               return true;
++           }
++
++           /**
++            * Check whether removed is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::JobSummary::isRemovedNil()
++           {
++               return !isValidRemoved;
++           }
++
++           /**
++            * Set removed to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::JobSummary::setRemovedNil()
++           {
++               return resetRemoved();
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_OSType.cpp b/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_OSType.cpp
+new file mode 100644
+index 0000000..75c1fe0
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_OSType.cpp
+@@ -0,0 +1,354 @@
++
++
++        /**
++         * OSType.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryCommon_OSType.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryCommon;
++        
++               /*
++                * Implementation of the OSType|http://common.aviary.grid.redhat.com Element
++                */
++           AviaryCommon::OSType::OSType()
++        {
++
++        
++            qname = NULL;
++        
++                    property_OSType;
++                
++            isValidOSType  = false;
++        
++                  qname =  axutil_qname_create (Environment::getEnv(),
++                        "OSType",
++                        "http://common.aviary.grid.redhat.com",
++                        NULL);
++                
++        }
++
++       AviaryCommon::OSType::OSType(std::string arg_OSType)
++        {
++             
++                   qname = NULL;
++             
++                 property_OSType;
++             
++            isValidOSType  = true;
++            
++                 qname =  axutil_qname_create (Environment::getEnv(),
++                       "OSType",
++                       "http://common.aviary.grid.redhat.com",
++                       NULL);
++               
++                    property_OSType = arg_OSType;
++            
++        }
++        AviaryCommon::OSType::~OSType()
++        {
++
++        }
++
++        
++            bool WSF_CALL
++            OSType::deserializeFromString(
++                                            const axis2_char_t *node_value,
++                                            axiom_node_t *parent)
++            {
++              bool status = true;
++            
++                        setOSType(node_value);
++                    
++              return status;
++            }
++        
++
++        bool WSF_CALL
++        AviaryCommon::OSType::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++            
++        status = AXIS2_FAILURE;
++        if(parent)
++        {
++            axis2_char_t *attrib_text = NULL;
++            attrib_text = axiom_element_get_attribute_value_by_name((axiom_element_t*)axiom_node_get_data_element(parent, Environment::getEnv()), Environment::getEnv(), "nil");
++            if (attrib_text != NULL && !axutil_strcasecmp(attrib_text, "true"))
++            {
++              
++               /* but the wsdl says that, this is non nillable */
++                WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "NULL value is set to a non nillable element OSType");
++                status = AXIS2_FAILURE;
++               
++            }
++            else
++            {
++                axiom_node_t *text_node = NULL;
++                text_node = axiom_node_get_first_child(parent, Environment::getEnv());
++                axiom_text_t *text_element = NULL;
++                if (text_node &&
++                        axiom_node_get_node_type(text_node, Environment::getEnv()) == AXIOM_TEXT)
++                    text_element = (axiom_text_t*)axiom_node_get_data_element(text_node, Environment::getEnv());
++                text_value = "";
++                if(text_element && axiom_text_get_value(text_element, Environment::getEnv()))
++                {
++                    text_value = (axis2_char_t*)axiom_text_get_value(text_element, Environment::getEnv());
++                }
++                status = deserializeFromString(text_value, parent);
++                }
++            }
++            
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryCommon::OSType::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryCommon::OSType::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++            char* WSF_CALL
++            AviaryCommon::OSType::serializeToString(axutil_hash_t *namespaces)
++            {
++                axis2_char_t *text_value = NULL;
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                
++                         text_value = (axis2_char_t*)axutil_xml_quote_string(Environment::getEnv(), (axis2_char_t*)property_OSType.c_str(), false);
++                         if (!text_value)
++                         {
++                             text_value = (axis2_char_t*)axutil_strdup(Environment::getEnv(), property_OSType.c_str());
++                         }
++                      
++                return text_value;
++            }
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryCommon::OSType::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++            axiom_data_source_t *data_source = NULL;
++            axutil_stream_t *stream = NULL;
++            axis2_char_t *text_value;
++             
++                    current_node = parent;
++                    data_source = (axiom_data_source_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                    if (!data_source)
++                        return NULL;
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv()); /* assume parent is of type data source */
++                    if (!stream)
++                        return NULL;
++                  
++               if(!parent_tag_closed && !tag_closed)
++               {
++                  text_value = ">"; 
++                  axutil_stream_write(stream, Environment::getEnv(), text_value, axutil_strlen(text_value));
++               }
++               
++               text_value = serializeToString(namespaces);
++               if(text_value)
++               {
++                    axutil_stream_write(stream, Environment::getEnv(), text_value, axutil_strlen(text_value));
++                    AXIS2_FREE(Environment::getEnv()->allocator, text_value);
++               }
++            
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for OSType by  Property Number 1
++             */
++            std::string WSF_CALL
++            AviaryCommon::OSType::getProperty1()
++            {
++                return getOSType();
++            }
++
++            /**
++             * getter for OSType.
++             */
++            std::string WSF_CALL
++            AviaryCommon::OSType::getOSType()
++             {
++                return property_OSType;
++             }
++
++            /**
++             * setter for OSType
++             */
++            bool WSF_CALL
++            AviaryCommon::OSType::setOSType(
++                    const std::string  arg_OSType)
++             {
++                
++
++                if(isValidOSType &&
++                        arg_OSType == property_OSType)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(arg_OSType.empty())
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"OSType is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetOSType();
++
++                
++                        property_OSType = std::string(arg_OSType.c_str());
++                        isValidOSType = true;
++                    
++                return true;
++             }
++
++            
++             /**
++             * specialized enum getter for OSType.
++             */
++             ADBOSTypeEnum WSF_CALL
++             AviaryCommon::OSType::getOSTypeEnum()
++             {
++
++                
++                 if (axutil_strcmp(property_OSType.c_str(), "LINUX") == 0)
++                    return OSType_LINUX;
++             
++                 if (axutil_strcmp(property_OSType.c_str(), "WINDOWS") == 0)
++                    return OSType_WINDOWS;
++             
++             
++                 /* Error: none of the strings matched; invalid enum value */
++                 return (ADBOSTypeEnum)-1;
++             }
++             
++             
++             /**
++             * specialized enum setter for OSType.
++             */
++             bool WSF_CALL
++            AviaryCommon::OSType::setOSTypeEnum(const ADBOSTypeEnum  arg_OSType)
++             {
++                
++
++                
++                resetOSType();
++
++                   
++                   switch (arg_OSType)
++                   {
++                     
++                       case OSType_LINUX :
++                            property_OSType = (axis2_char_t *)axutil_strdup(Environment::getEnv(), "LINUX");
++                          break;
++                     
++                       case OSType_WINDOWS :
++                            property_OSType = (axis2_char_t *)axutil_strdup(Environment::getEnv(), "WINDOWS");
++                          break;
++                     
++                     
++                       default:
++                          isValidOSType = false;
++                          property_OSType = "";
++                          WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Error setting OSType: undefined enum value");
++                          return false;
++                   }
++                
++                   if(property_OSType.empty())
++                   {
++                       return AXIS2_FAILURE;
++                   }
++                     isValidOSType = true;
++                        
++                
++                return true;
++             }
++             
++
++           /**
++            * resetter for OSType
++            */
++           bool WSF_CALL
++           AviaryCommon::OSType::resetOSType()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidOSType = false; 
++               return true;
++           }
++
++           /**
++            * Check whether OSType is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::OSType::isOSTypeNil()
++           {
++               return !isValidOSType;
++           }
++
++           /**
++            * Set OSType to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::OSType::setOSTypeNil()
++           {
++               return resetOSType();
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_ResourceConstraint.cpp b/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_ResourceConstraint.cpp
+new file mode 100644
+index 0000000..ed3dd61
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_ResourceConstraint.cpp
+@@ -0,0 +1,717 @@
++
++
++        /**
++         * ResourceConstraint.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryCommon_ResourceConstraint.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryCommon;
++        
++                /*
++                 * This type was generated from the piece of schema that had
++                 * name = ResourceConstraint
++                 * Namespace URI = http://common.aviary.grid.redhat.com
++                 * Namespace Prefix = ns1
++                 */
++           AviaryCommon::ResourceConstraint::ResourceConstraint()
++        {
++
++        
++                property_Type  = NULL;
++              
++            isValidType  = false;
++        
++                    property_Value;
++                
++            isValidValue  = false;
++        
++        }
++
++       AviaryCommon::ResourceConstraint::ResourceConstraint(AviaryCommon::ResourceConstraintType* arg_Type,std::string arg_Value)
++        {
++             
++               property_Type  = NULL;
++             
++            isValidType  = true;
++            
++                 property_Value;
++             
++            isValidValue  = true;
++            
++                    property_Type = arg_Type;
++            
++                    property_Value = arg_Value;
++            
++        }
++        AviaryCommon::ResourceConstraint::~ResourceConstraint()
++        {
++
++        }
++
++        
++
++        bool WSF_CALL
++        AviaryCommon::ResourceConstraint::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++            axutil_qname_t *element_qname = NULL; 
++            
++               axiom_node_t *first_node = NULL;
++               bool is_early_node_valid = true;
++               axiom_node_t *current_node = NULL;
++               axiom_element_t *current_element = NULL;
++            
++              
++              while(parent && axiom_node_get_node_type(parent, Environment::getEnv()) != AXIOM_ELEMENT)
++              {
++                  parent = axiom_node_get_next_sibling(parent, Environment::getEnv());
++              }
++              if (NULL == parent)
++              {   
++                return AXIS2_FAILURE;
++              }
++              
++                      
++                      first_node = axiom_node_get_first_child(parent, Environment::getEnv());
++                      
++                    
++
++                     
++                     /*
++                      * building type element
++                      */
++                     
++                     
++                     
++                                   current_node = first_node;
++                                   is_early_node_valid = false;
++                                   
++                                   
++                                    while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                    {
++                                        current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                    }
++                                    if(current_node != NULL)
++                                    {
++                                        current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                        mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                    }
++                                   
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "type", NULL, NULL);
++                                 
++
++                           if (isParticle() ||  
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("type", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("type", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 AviaryCommon::ResourceConstraintType* element = new AviaryCommon::ResourceConstraintType();
++
++                                      status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                      if(AXIS2_FAILURE == status)
++                                      {
++                                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in building adb object for element type");
++                                      }
++                                      else
++                                      {
++                                          status = setType(element);
++                                      }
++                                    
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for type ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element type missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building value element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "value", NULL, NULL);
++                                 
++
++                           if ( 
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("value", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("value", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 
++                                      text_value = axiom_element_get_text(current_element, Environment::getEnv(), current_node);
++                                      if(text_value != NULL)
++                                      {
++                                            status = setValue(text_value);
++                                      }
++                                      
++                                      else
++                                      {
++                                            /*
++                                             * axis2_qname_t *qname = NULL;
++                                             * axiom_attribute_t *the_attri = NULL;
++                                             * 
++                                             * qname = axutil_qname_create(Environment::getEnv(), "nil", "http://www.w3.org/2001/XMLSchema-instance", "xsi");
++                                             * the_attri = axiom_element_get_attribute(current_element, Environment::getEnv(), qname);
++                                             */
++                                            /* currently thereis a bug in the axiom_element_get_attribute, so we have to go to this bad method */
++
++                                            axiom_attribute_t *the_attri = NULL;
++                                            axis2_char_t *attrib_text = NULL;
++                                            axutil_hash_t *attribute_hash = NULL;
++
++                                            attribute_hash = axiom_element_get_all_attributes(current_element, Environment::getEnv());
++
++                                            attrib_text = NULL;
++                                            if(attribute_hash)
++                                            {
++                                                 axutil_hash_index_t *hi;
++                                                 void *val;
++                                                 const void *key;
++                                        
++                                                 for (hi = axutil_hash_first(attribute_hash, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                                                 {
++                                                     axutil_hash_this(hi, &key, NULL, &val);
++                                                     
++                                                     if(strstr((axis2_char_t*)key, "nil|http://www.w3.org/2001/XMLSchema-instance"))
++                                                     {
++                                                         the_attri = (axiom_attribute_t*)val;
++                                                         break;
++                                                     }
++                                                 }
++                                            }
++
++                                            if(the_attri)
++                                            {
++                                                attrib_text = axiom_attribute_get_value(the_attri, Environment::getEnv());
++                                            }
++                                            else
++                                            {
++                                                /* this is hoping that attribute is stored in "http://www.w3.org/2001/XMLSchema-instance", this happnes when name is in default namespace */
++                                                attrib_text = axiom_element_get_attribute_value_by_name(current_element, Environment::getEnv(), "nil");
++                                            }
++
++                                            if(attrib_text && 0 == axutil_strcmp(attrib_text, "1"))
++                                            {
++                                                WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "NULL value is set to a non nillable element value");
++                                                status = AXIS2_FAILURE;
++                                            }
++                                            else
++                                            {
++                                                /* after all, we found this is a empty string */
++                                                status = setValue("");
++                                            }
++                                      }
++                                      
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for value ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element value missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryCommon::ResourceConstraint::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryCommon::ResourceConstraint::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryCommon::ResourceConstraint::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++             axis2_char_t *string_to_stream;
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++                axiom_namespace_t *ns1 = NULL;
++
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                axis2_char_t *p_prefix = NULL;
++            
++                    axis2_char_t text_value_1[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++                    axis2_char_t *text_value_2;
++                    axis2_char_t *text_value_2_temp;
++                    
++               axis2_char_t *start_input_str = NULL;
++               axis2_char_t *end_input_str = NULL;
++               unsigned int start_input_str_len = 0;
++               unsigned int end_input_str_len = 0;
++            
++            
++               axiom_data_source_t *data_source = NULL;
++               axutil_stream_t *stream = NULL;
++
++            
++                    current_node = parent;
++                    data_source = (axiom_data_source_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                    if (!data_source)
++                        return NULL;
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv()); /* assume parent is of type data source */
++                    if (!stream)
++                        return NULL;
++                  
++            if(!parent_tag_closed)
++            {
++            
++              string_to_stream = ">"; 
++              axutil_stream_write(stream, Environment::getEnv(), string_to_stream, axutil_strlen(string_to_stream));
++              tag_closed = 1;
++            
++            }
++            
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidType)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property type");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("type"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("type")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing type element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%stype",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":""); 
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%stype>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                     
++                            if(!property_Type->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                            }
++                            property_Type->serialize(current_node, parent_element,
++                                                                                 property_Type->isParticle() || false, namespaces, next_ns_index);
++                            
++                            if(!property_Type->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                            }
++                            
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidValue)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property value");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("value"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("value")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing value element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%svalue>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%svalue>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                    
++                           text_value_2 = (axis2_char_t*)property_Value.c_str();
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                           
++                            
++                           text_value_2_temp = axutil_xml_quote_string(Environment::getEnv(), text_value_2, true);
++                           if (text_value_2_temp)
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_2_temp, axutil_strlen(text_value_2_temp));
++                               AXIS2_FREE(Environment::getEnv()->allocator, text_value_2_temp);
++                           }
++                           else
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_2, axutil_strlen(text_value_2));
++                           }
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                           
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for type by  Property Number 1
++             */
++            AviaryCommon::ResourceConstraintType* WSF_CALL
++            AviaryCommon::ResourceConstraint::getProperty1()
++            {
++                return getType();
++            }
++
++            /**
++             * getter for type.
++             */
++            AviaryCommon::ResourceConstraintType* WSF_CALL
++            AviaryCommon::ResourceConstraint::getType()
++             {
++                return property_Type;
++             }
++
++            /**
++             * setter for type
++             */
++            bool WSF_CALL
++            AviaryCommon::ResourceConstraint::setType(
++                    AviaryCommon::ResourceConstraintType*  arg_Type)
++             {
++                
++
++                if(isValidType &&
++                        arg_Type == property_Type)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(NULL == arg_Type)
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"type is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetType();
++
++                
++                    if(NULL == arg_Type)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_Type = arg_Type;
++                        isValidType = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for type
++            */
++           bool WSF_CALL
++           AviaryCommon::ResourceConstraint::resetType()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++            
++                
++
++                if(property_Type != NULL)
++                {
++                   
++                   
++                         delete  property_Type;
++                     
++
++                   }
++
++                
++                
++                
++               isValidType = false; 
++               return true;
++           }
++
++           /**
++            * Check whether type is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::ResourceConstraint::isTypeNil()
++           {
++               return !isValidType;
++           }
++
++           /**
++            * Set type to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::ResourceConstraint::setTypeNil()
++           {
++               return resetType();
++           }
++
++           
++
++            /**
++             * Getter for value by  Property Number 2
++             */
++            std::string WSF_CALL
++            AviaryCommon::ResourceConstraint::getProperty2()
++            {
++                return getValue();
++            }
++
++            /**
++             * getter for value.
++             */
++            std::string WSF_CALL
++            AviaryCommon::ResourceConstraint::getValue()
++             {
++                return property_Value;
++             }
++
++            /**
++             * setter for value
++             */
++            bool WSF_CALL
++            AviaryCommon::ResourceConstraint::setValue(
++                    const std::string  arg_Value)
++             {
++                
++
++                if(isValidValue &&
++                        arg_Value == property_Value)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(arg_Value.empty())
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"value is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetValue();
++
++                
++                        property_Value = std::string(arg_Value.c_str());
++                        isValidValue = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for value
++            */
++           bool WSF_CALL
++           AviaryCommon::ResourceConstraint::resetValue()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidValue = false; 
++               return true;
++           }
++
++           /**
++            * Check whether value is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::ResourceConstraint::isValueNil()
++           {
++               return !isValidValue;
++           }
++
++           /**
++            * Set value to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::ResourceConstraint::setValueNil()
++           {
++               return resetValue();
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_ResourceConstraintType.cpp b/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_ResourceConstraintType.cpp
+new file mode 100644
+index 0000000..a216860
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_ResourceConstraintType.cpp
+@@ -0,0 +1,375 @@
++
++
++        /**
++         * ResourceConstraintType.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryCommon_ResourceConstraintType.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryCommon;
++        
++               /*
++                * Implementation of the ResourceConstraintType|http://common.aviary.grid.redhat.com Element
++                */
++           AviaryCommon::ResourceConstraintType::ResourceConstraintType()
++        {
++
++        
++            qname = NULL;
++        
++                    property_ResourceConstraintType;
++                
++            isValidResourceConstraintType  = false;
++        
++                  qname =  axutil_qname_create (Environment::getEnv(),
++                        "ResourceConstraintType",
++                        "http://common.aviary.grid.redhat.com",
++                        NULL);
++                
++        }
++
++       AviaryCommon::ResourceConstraintType::ResourceConstraintType(std::string arg_ResourceConstraintType)
++        {
++             
++                   qname = NULL;
++             
++                 property_ResourceConstraintType;
++             
++            isValidResourceConstraintType  = true;
++            
++                 qname =  axutil_qname_create (Environment::getEnv(),
++                       "ResourceConstraintType",
++                       "http://common.aviary.grid.redhat.com",
++                       NULL);
++               
++                    property_ResourceConstraintType = arg_ResourceConstraintType;
++            
++        }
++        AviaryCommon::ResourceConstraintType::~ResourceConstraintType()
++        {
++
++        }
++
++        
++            bool WSF_CALL
++            ResourceConstraintType::deserializeFromString(
++                                            const axis2_char_t *node_value,
++                                            axiom_node_t *parent)
++            {
++              bool status = true;
++            
++                        setResourceConstraintType(node_value);
++                    
++              return status;
++            }
++        
++
++        bool WSF_CALL
++        AviaryCommon::ResourceConstraintType::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++            
++        status = AXIS2_FAILURE;
++        if(parent)
++        {
++            axis2_char_t *attrib_text = NULL;
++            attrib_text = axiom_element_get_attribute_value_by_name((axiom_element_t*)axiom_node_get_data_element(parent, Environment::getEnv()), Environment::getEnv(), "nil");
++            if (attrib_text != NULL && !axutil_strcasecmp(attrib_text, "true"))
++            {
++              
++               /* but the wsdl says that, this is non nillable */
++                WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "NULL value is set to a non nillable element ResourceConstraintType");
++                status = AXIS2_FAILURE;
++               
++            }
++            else
++            {
++                axiom_node_t *text_node = NULL;
++                text_node = axiom_node_get_first_child(parent, Environment::getEnv());
++                axiom_text_t *text_element = NULL;
++                if (text_node &&
++                        axiom_node_get_node_type(text_node, Environment::getEnv()) == AXIOM_TEXT)
++                    text_element = (axiom_text_t*)axiom_node_get_data_element(text_node, Environment::getEnv());
++                text_value = "";
++                if(text_element && axiom_text_get_value(text_element, Environment::getEnv()))
++                {
++                    text_value = (axis2_char_t*)axiom_text_get_value(text_element, Environment::getEnv());
++                }
++                status = deserializeFromString(text_value, parent);
++                }
++            }
++            
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryCommon::ResourceConstraintType::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryCommon::ResourceConstraintType::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++            char* WSF_CALL
++            AviaryCommon::ResourceConstraintType::serializeToString(axutil_hash_t *namespaces)
++            {
++                axis2_char_t *text_value = NULL;
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                
++                         text_value = (axis2_char_t*)axutil_xml_quote_string(Environment::getEnv(), (axis2_char_t*)property_ResourceConstraintType.c_str(), false);
++                         if (!text_value)
++                         {
++                             text_value = (axis2_char_t*)axutil_strdup(Environment::getEnv(), property_ResourceConstraintType.c_str());
++                         }
++                      
++                return text_value;
++            }
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryCommon::ResourceConstraintType::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++            axiom_data_source_t *data_source = NULL;
++            axutil_stream_t *stream = NULL;
++            axis2_char_t *text_value;
++             
++                    current_node = parent;
++                    data_source = (axiom_data_source_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                    if (!data_source)
++                        return NULL;
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv()); /* assume parent is of type data source */
++                    if (!stream)
++                        return NULL;
++                  
++               if(!parent_tag_closed && !tag_closed)
++               {
++                  text_value = ">"; 
++                  axutil_stream_write(stream, Environment::getEnv(), text_value, axutil_strlen(text_value));
++               }
++               
++               text_value = serializeToString(namespaces);
++               if(text_value)
++               {
++                    axutil_stream_write(stream, Environment::getEnv(), text_value, axutil_strlen(text_value));
++                    AXIS2_FREE(Environment::getEnv()->allocator, text_value);
++               }
++            
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for ResourceConstraintType by  Property Number 1
++             */
++            std::string WSF_CALL
++            AviaryCommon::ResourceConstraintType::getProperty1()
++            {
++                return getResourceConstraintType();
++            }
++
++            /**
++             * getter for ResourceConstraintType.
++             */
++            std::string WSF_CALL
++            AviaryCommon::ResourceConstraintType::getResourceConstraintType()
++             {
++                return property_ResourceConstraintType;
++             }
++
++            /**
++             * setter for ResourceConstraintType
++             */
++            bool WSF_CALL
++            AviaryCommon::ResourceConstraintType::setResourceConstraintType(
++                    const std::string  arg_ResourceConstraintType)
++             {
++                
++
++                if(isValidResourceConstraintType &&
++                        arg_ResourceConstraintType == property_ResourceConstraintType)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(arg_ResourceConstraintType.empty())
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"ResourceConstraintType is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetResourceConstraintType();
++
++                
++                        property_ResourceConstraintType = std::string(arg_ResourceConstraintType.c_str());
++                        isValidResourceConstraintType = true;
++                    
++                return true;
++             }
++
++            
++             /**
++             * specialized enum getter for ResourceConstraintType.
++             */
++             ADBResourceConstraintTypeEnum WSF_CALL
++             AviaryCommon::ResourceConstraintType::getResourceConstraintTypeEnum()
++             {
++
++                
++                 if (axutil_strcmp(property_ResourceConstraintType.c_str(), "OS") == 0)
++                    return ResourceConstraintType_OS;
++             
++                 if (axutil_strcmp(property_ResourceConstraintType.c_str(), "ARCH") == 0)
++                    return ResourceConstraintType_ARCH;
++             
++                 if (axutil_strcmp(property_ResourceConstraintType.c_str(), "MEMORY") == 0)
++                    return ResourceConstraintType_MEMORY;
++             
++                 if (axutil_strcmp(property_ResourceConstraintType.c_str(), "DISK") == 0)
++                    return ResourceConstraintType_DISK;
++             
++                 if (axutil_strcmp(property_ResourceConstraintType.c_str(), "FILESYSTEM") == 0)
++                    return ResourceConstraintType_FILESYSTEM;
++             
++             
++                 /* Error: none of the strings matched; invalid enum value */
++                 return (ADBResourceConstraintTypeEnum)-1;
++             }
++             
++             
++             /**
++             * specialized enum setter for ResourceConstraintType.
++             */
++             bool WSF_CALL
++            AviaryCommon::ResourceConstraintType::setResourceConstraintTypeEnum(const ADBResourceConstraintTypeEnum  arg_ResourceConstraintType)
++             {
++                
++
++                
++                resetResourceConstraintType();
++
++                   
++                   switch (arg_ResourceConstraintType)
++                   {
++                     
++                       case ResourceConstraintType_OS :
++                            property_ResourceConstraintType = (axis2_char_t *)axutil_strdup(Environment::getEnv(), "OS");
++                          break;
++                     
++                       case ResourceConstraintType_ARCH :
++                            property_ResourceConstraintType = (axis2_char_t *)axutil_strdup(Environment::getEnv(), "ARCH");
++                          break;
++                     
++                       case ResourceConstraintType_MEMORY :
++                            property_ResourceConstraintType = (axis2_char_t *)axutil_strdup(Environment::getEnv(), "MEMORY");
++                          break;
++                     
++                       case ResourceConstraintType_DISK :
++                            property_ResourceConstraintType = (axis2_char_t *)axutil_strdup(Environment::getEnv(), "DISK");
++                          break;
++                     
++                       case ResourceConstraintType_FILESYSTEM :
++                            property_ResourceConstraintType = (axis2_char_t *)axutil_strdup(Environment::getEnv(), "FILESYSTEM");
++                          break;
++                     
++                     
++                       default:
++                          isValidResourceConstraintType = false;
++                          property_ResourceConstraintType = "";
++                          WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Error setting ResourceConstraintType: undefined enum value");
++                          return false;
++                   }
++                
++                   if(property_ResourceConstraintType.empty())
++                   {
++                       return AXIS2_FAILURE;
++                   }
++                     isValidResourceConstraintType = true;
++                        
++                
++                return true;
++             }
++             
++
++           /**
++            * resetter for ResourceConstraintType
++            */
++           bool WSF_CALL
++           AviaryCommon::ResourceConstraintType::resetResourceConstraintType()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidResourceConstraintType = false; 
++               return true;
++           }
++
++           /**
++            * Check whether ResourceConstraintType is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::ResourceConstraintType::isResourceConstraintTypeNil()
++           {
++               return !isValidResourceConstraintType;
++           }
++
++           /**
++            * Set ResourceConstraintType to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::ResourceConstraintType::setResourceConstraintTypeNil()
++           {
++               return resetResourceConstraintType();
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_ResourceID.cpp b/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_ResourceID.cpp
+new file mode 100644
+index 0000000..e38ce4f
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_ResourceID.cpp
+@@ -0,0 +1,1308 @@
++
++
++        /**
++         * ResourceID.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryCommon_ResourceID.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryCommon;
++        
++                /*
++                 * This type was generated from the piece of schema that had
++                 * name = ResourceID
++                 * Namespace URI = http://common.aviary.grid.redhat.com
++                 * Namespace Prefix = ns1
++                 */
++           AviaryCommon::ResourceID::ResourceID()
++        {
++
++        
++                property_Subsystem_type  = NULL;
++              
++            isValidSubsystem_type  = false;
++        
++                    property_Pool;
++                
++            isValidPool  = false;
++        
++                    property_Name;
++                
++            isValidName  = false;
++        
++                    property_Custom_name;
++                
++            isValidCustom_name  = false;
++        
++        }
++
++       AviaryCommon::ResourceID::ResourceID(AviaryCommon::ResourceType* arg_Subsystem_type,std::string arg_Pool,std::string arg_Name,std::string arg_Custom_name)
++        {
++             
++               property_Subsystem_type  = NULL;
++             
++            isValidSubsystem_type  = true;
++            
++                 property_Pool;
++             
++            isValidPool  = true;
++            
++                 property_Name;
++             
++            isValidName  = true;
++            
++                 property_Custom_name;
++             
++            isValidCustom_name  = true;
++            
++                    property_Subsystem_type = arg_Subsystem_type;
++            
++                    property_Pool = arg_Pool;
++            
++                    property_Name = arg_Name;
++            
++                    property_Custom_name = arg_Custom_name;
++            
++        }
++        AviaryCommon::ResourceID::~ResourceID()
++        {
++
++        }
++
++        
++
++        bool WSF_CALL
++        AviaryCommon::ResourceID::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++            axutil_qname_t *element_qname = NULL; 
++            
++               axiom_node_t *first_node = NULL;
++               bool is_early_node_valid = true;
++               axiom_node_t *current_node = NULL;
++               axiom_element_t *current_element = NULL;
++            
++              
++              while(parent && axiom_node_get_node_type(parent, Environment::getEnv()) != AXIOM_ELEMENT)
++              {
++                  parent = axiom_node_get_next_sibling(parent, Environment::getEnv());
++              }
++              if (NULL == parent)
++              {   
++                return AXIS2_FAILURE;
++              }
++              
++                      
++                      first_node = axiom_node_get_first_child(parent, Environment::getEnv());
++                      
++                    
++
++                     
++                     /*
++                      * building subsystem_type element
++                      */
++                     
++                     
++                     
++                                   current_node = first_node;
++                                   is_early_node_valid = false;
++                                   
++                                   
++                                    while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                    {
++                                        current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                    }
++                                    if(current_node != NULL)
++                                    {
++                                        current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                        mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                    }
++                                   
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "subsystem_type", NULL, NULL);
++                                 
++
++                           if (isParticle() ||  
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("subsystem_type", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("subsystem_type", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 AviaryCommon::ResourceType* element = new AviaryCommon::ResourceType();
++
++                                      status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                      if(AXIS2_FAILURE == status)
++                                      {
++                                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in building adb object for element subsystem_type");
++                                      }
++                                      else
++                                      {
++                                          status = setSubsystem_type(element);
++                                      }
++                                    
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for subsystem_type ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element subsystem_type missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building pool element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "pool", NULL, NULL);
++                                 
++
++                           if ( 
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("pool", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("pool", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 
++                                      text_value = axiom_element_get_text(current_element, Environment::getEnv(), current_node);
++                                      if(text_value != NULL)
++                                      {
++                                            status = setPool(text_value);
++                                      }
++                                      
++                                      else
++                                      {
++                                            /*
++                                             * axis2_qname_t *qname = NULL;
++                                             * axiom_attribute_t *the_attri = NULL;
++                                             * 
++                                             * qname = axutil_qname_create(Environment::getEnv(), "nil", "http://www.w3.org/2001/XMLSchema-instance", "xsi");
++                                             * the_attri = axiom_element_get_attribute(current_element, Environment::getEnv(), qname);
++                                             */
++                                            /* currently thereis a bug in the axiom_element_get_attribute, so we have to go to this bad method */
++
++                                            axiom_attribute_t *the_attri = NULL;
++                                            axis2_char_t *attrib_text = NULL;
++                                            axutil_hash_t *attribute_hash = NULL;
++
++                                            attribute_hash = axiom_element_get_all_attributes(current_element, Environment::getEnv());
++
++                                            attrib_text = NULL;
++                                            if(attribute_hash)
++                                            {
++                                                 axutil_hash_index_t *hi;
++                                                 void *val;
++                                                 const void *key;
++                                        
++                                                 for (hi = axutil_hash_first(attribute_hash, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                                                 {
++                                                     axutil_hash_this(hi, &key, NULL, &val);
++                                                     
++                                                     if(strstr((axis2_char_t*)key, "nil|http://www.w3.org/2001/XMLSchema-instance"))
++                                                     {
++                                                         the_attri = (axiom_attribute_t*)val;
++                                                         break;
++                                                     }
++                                                 }
++                                            }
++
++                                            if(the_attri)
++                                            {
++                                                attrib_text = axiom_attribute_get_value(the_attri, Environment::getEnv());
++                                            }
++                                            else
++                                            {
++                                                /* this is hoping that attribute is stored in "http://www.w3.org/2001/XMLSchema-instance", this happnes when name is in default namespace */
++                                                attrib_text = axiom_element_get_attribute_value_by_name(current_element, Environment::getEnv(), "nil");
++                                            }
++
++                                            if(attrib_text && 0 == axutil_strcmp(attrib_text, "1"))
++                                            {
++                                                WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "NULL value is set to a non nillable element pool");
++                                                status = AXIS2_FAILURE;
++                                            }
++                                            else
++                                            {
++                                                /* after all, we found this is a empty string */
++                                                status = setPool("");
++                                            }
++                                      }
++                                      
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for pool ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element pool missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building name element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "name", NULL, NULL);
++                                 
++
++                           if ( 
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("name", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("name", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 
++                                      text_value = axiom_element_get_text(current_element, Environment::getEnv(), current_node);
++                                      if(text_value != NULL)
++                                      {
++                                            status = setName(text_value);
++                                      }
++                                      
++                                      else
++                                      {
++                                            /*
++                                             * axis2_qname_t *qname = NULL;
++                                             * axiom_attribute_t *the_attri = NULL;
++                                             * 
++                                             * qname = axutil_qname_create(Environment::getEnv(), "nil", "http://www.w3.org/2001/XMLSchema-instance", "xsi");
++                                             * the_attri = axiom_element_get_attribute(current_element, Environment::getEnv(), qname);
++                                             */
++                                            /* currently thereis a bug in the axiom_element_get_attribute, so we have to go to this bad method */
++
++                                            axiom_attribute_t *the_attri = NULL;
++                                            axis2_char_t *attrib_text = NULL;
++                                            axutil_hash_t *attribute_hash = NULL;
++
++                                            attribute_hash = axiom_element_get_all_attributes(current_element, Environment::getEnv());
++
++                                            attrib_text = NULL;
++                                            if(attribute_hash)
++                                            {
++                                                 axutil_hash_index_t *hi;
++                                                 void *val;
++                                                 const void *key;
++                                        
++                                                 for (hi = axutil_hash_first(attribute_hash, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                                                 {
++                                                     axutil_hash_this(hi, &key, NULL, &val);
++                                                     
++                                                     if(strstr((axis2_char_t*)key, "nil|http://www.w3.org/2001/XMLSchema-instance"))
++                                                     {
++                                                         the_attri = (axiom_attribute_t*)val;
++                                                         break;
++                                                     }
++                                                 }
++                                            }
++
++                                            if(the_attri)
++                                            {
++                                                attrib_text = axiom_attribute_get_value(the_attri, Environment::getEnv());
++                                            }
++                                            else
++                                            {
++                                                /* this is hoping that attribute is stored in "http://www.w3.org/2001/XMLSchema-instance", this happnes when name is in default namespace */
++                                                attrib_text = axiom_element_get_attribute_value_by_name(current_element, Environment::getEnv(), "nil");
++                                            }
++
++                                            if(attrib_text && 0 == axutil_strcmp(attrib_text, "1"))
++                                            {
++                                                WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "NULL value is set to a non nillable element name");
++                                                status = AXIS2_FAILURE;
++                                            }
++                                            else
++                                            {
++                                                /* after all, we found this is a empty string */
++                                                status = setName("");
++                                            }
++                                      }
++                                      
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for name ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element name missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building custom_name element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "custom_name", NULL, NULL);
++                                 
++
++                           if ( 
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("custom_name", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("custom_name", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 
++                                      text_value = axiom_element_get_text(current_element, Environment::getEnv(), current_node);
++                                      if(text_value != NULL)
++                                      {
++                                            status = setCustom_name(text_value);
++                                      }
++                                      
++                                      else
++                                      {
++                                            /*
++                                             * axis2_qname_t *qname = NULL;
++                                             * axiom_attribute_t *the_attri = NULL;
++                                             * 
++                                             * qname = axutil_qname_create(Environment::getEnv(), "nil", "http://www.w3.org/2001/XMLSchema-instance", "xsi");
++                                             * the_attri = axiom_element_get_attribute(current_element, Environment::getEnv(), qname);
++                                             */
++                                            /* currently thereis a bug in the axiom_element_get_attribute, so we have to go to this bad method */
++
++                                            axiom_attribute_t *the_attri = NULL;
++                                            axis2_char_t *attrib_text = NULL;
++                                            axutil_hash_t *attribute_hash = NULL;
++
++                                            attribute_hash = axiom_element_get_all_attributes(current_element, Environment::getEnv());
++
++                                            attrib_text = NULL;
++                                            if(attribute_hash)
++                                            {
++                                                 axutil_hash_index_t *hi;
++                                                 void *val;
++                                                 const void *key;
++                                        
++                                                 for (hi = axutil_hash_first(attribute_hash, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                                                 {
++                                                     axutil_hash_this(hi, &key, NULL, &val);
++                                                     
++                                                     if(strstr((axis2_char_t*)key, "nil|http://www.w3.org/2001/XMLSchema-instance"))
++                                                     {
++                                                         the_attri = (axiom_attribute_t*)val;
++                                                         break;
++                                                     }
++                                                 }
++                                            }
++
++                                            if(the_attri)
++                                            {
++                                                attrib_text = axiom_attribute_get_value(the_attri, Environment::getEnv());
++                                            }
++                                            else
++                                            {
++                                                /* this is hoping that attribute is stored in "http://www.w3.org/2001/XMLSchema-instance", this happnes when name is in default namespace */
++                                                attrib_text = axiom_element_get_attribute_value_by_name(current_element, Environment::getEnv(), "nil");
++                                            }
++
++                                            if(attrib_text && 0 == axutil_strcmp(attrib_text, "1"))
++                                            {
++                                                WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "NULL value is set to a non nillable element custom_name");
++                                                status = AXIS2_FAILURE;
++                                            }
++                                            else
++                                            {
++                                                /* after all, we found this is a empty string */
++                                                status = setCustom_name("");
++                                            }
++                                      }
++                                      
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for custom_name ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryCommon::ResourceID::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryCommon::ResourceID::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryCommon::ResourceID::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++             axis2_char_t *string_to_stream;
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++                axiom_namespace_t *ns1 = NULL;
++
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                axis2_char_t *p_prefix = NULL;
++            
++                    axis2_char_t text_value_1[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++                    axis2_char_t *text_value_2;
++                    axis2_char_t *text_value_2_temp;
++                    
++                    axis2_char_t *text_value_3;
++                    axis2_char_t *text_value_3_temp;
++                    
++                    axis2_char_t *text_value_4;
++                    axis2_char_t *text_value_4_temp;
++                    
++               axis2_char_t *start_input_str = NULL;
++               axis2_char_t *end_input_str = NULL;
++               unsigned int start_input_str_len = 0;
++               unsigned int end_input_str_len = 0;
++            
++            
++               axiom_data_source_t *data_source = NULL;
++               axutil_stream_t *stream = NULL;
++
++            
++                    current_node = parent;
++                    data_source = (axiom_data_source_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                    if (!data_source)
++                        return NULL;
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv()); /* assume parent is of type data source */
++                    if (!stream)
++                        return NULL;
++                  
++            if(!parent_tag_closed)
++            {
++            
++              string_to_stream = ">"; 
++              axutil_stream_write(stream, Environment::getEnv(), string_to_stream, axutil_strlen(string_to_stream));
++              tag_closed = 1;
++            
++            }
++            
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidSubsystem_type)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property subsystem_type");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("subsystem_type"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("subsystem_type")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing subsystem_type element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%ssubsystem_type",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":""); 
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%ssubsystem_type>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                     
++                            if(!property_Subsystem_type->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                            }
++                            property_Subsystem_type->serialize(current_node, parent_element,
++                                                                                 property_Subsystem_type->isParticle() || false, namespaces, next_ns_index);
++                            
++                            if(!property_Subsystem_type->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                            }
++                            
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidPool)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property pool");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("pool"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("pool")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing pool element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%spool>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%spool>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                    
++                           text_value_2 = (axis2_char_t*)property_Pool.c_str();
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                           
++                            
++                           text_value_2_temp = axutil_xml_quote_string(Environment::getEnv(), text_value_2, true);
++                           if (text_value_2_temp)
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_2_temp, axutil_strlen(text_value_2_temp));
++                               AXIS2_FREE(Environment::getEnv()->allocator, text_value_2_temp);
++                           }
++                           else
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_2, axutil_strlen(text_value_2));
++                           }
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                           
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidName)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property name");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("name"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("name")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing name element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sname>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sname>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                    
++                           text_value_3 = (axis2_char_t*)property_Name.c_str();
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                           
++                            
++                           text_value_3_temp = axutil_xml_quote_string(Environment::getEnv(), text_value_3, true);
++                           if (text_value_3_temp)
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_3_temp, axutil_strlen(text_value_3_temp));
++                               AXIS2_FREE(Environment::getEnv()->allocator, text_value_3_temp);
++                           }
++                           else
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_3, axutil_strlen(text_value_3));
++                           }
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                           
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidCustom_name)
++                   {
++                      
++                           /* no need to complain for minoccurs=0 element */
++                            
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("custom_name"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("custom_name")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing custom_name element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%scustom_name>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%scustom_name>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                    
++                           text_value_4 = (axis2_char_t*)property_Custom_name.c_str();
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                           
++                            
++                           text_value_4_temp = axutil_xml_quote_string(Environment::getEnv(), text_value_4, true);
++                           if (text_value_4_temp)
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_4_temp, axutil_strlen(text_value_4_temp));
++                               AXIS2_FREE(Environment::getEnv()->allocator, text_value_4_temp);
++                           }
++                           else
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_4, axutil_strlen(text_value_4));
++                           }
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                           
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for subsystem_type by  Property Number 1
++             */
++            AviaryCommon::ResourceType* WSF_CALL
++            AviaryCommon::ResourceID::getProperty1()
++            {
++                return getSubsystem_type();
++            }
++
++            /**
++             * getter for subsystem_type.
++             */
++            AviaryCommon::ResourceType* WSF_CALL
++            AviaryCommon::ResourceID::getSubsystem_type()
++             {
++                return property_Subsystem_type;
++             }
++
++            /**
++             * setter for subsystem_type
++             */
++            bool WSF_CALL
++            AviaryCommon::ResourceID::setSubsystem_type(
++                    AviaryCommon::ResourceType*  arg_Subsystem_type)
++             {
++                
++
++                if(isValidSubsystem_type &&
++                        arg_Subsystem_type == property_Subsystem_type)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(NULL == arg_Subsystem_type)
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"subsystem_type is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetSubsystem_type();
++
++                
++                    if(NULL == arg_Subsystem_type)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_Subsystem_type = arg_Subsystem_type;
++                        isValidSubsystem_type = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for subsystem_type
++            */
++           bool WSF_CALL
++           AviaryCommon::ResourceID::resetSubsystem_type()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++            
++                
++
++                if(property_Subsystem_type != NULL)
++                {
++                   
++                   
++                         delete  property_Subsystem_type;
++                     
++
++                   }
++
++                
++                
++                
++               isValidSubsystem_type = false; 
++               return true;
++           }
++
++           /**
++            * Check whether subsystem_type is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::ResourceID::isSubsystem_typeNil()
++           {
++               return !isValidSubsystem_type;
++           }
++
++           /**
++            * Set subsystem_type to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::ResourceID::setSubsystem_typeNil()
++           {
++               return resetSubsystem_type();
++           }
++
++           
++
++            /**
++             * Getter for pool by  Property Number 2
++             */
++            std::string WSF_CALL
++            AviaryCommon::ResourceID::getProperty2()
++            {
++                return getPool();
++            }
++
++            /**
++             * getter for pool.
++             */
++            std::string WSF_CALL
++            AviaryCommon::ResourceID::getPool()
++             {
++                return property_Pool;
++             }
++
++            /**
++             * setter for pool
++             */
++            bool WSF_CALL
++            AviaryCommon::ResourceID::setPool(
++                    const std::string  arg_Pool)
++             {
++                
++
++                if(isValidPool &&
++                        arg_Pool == property_Pool)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(arg_Pool.empty())
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"pool is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetPool();
++
++                
++                        property_Pool = std::string(arg_Pool.c_str());
++                        isValidPool = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for pool
++            */
++           bool WSF_CALL
++           AviaryCommon::ResourceID::resetPool()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidPool = false; 
++               return true;
++           }
++
++           /**
++            * Check whether pool is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::ResourceID::isPoolNil()
++           {
++               return !isValidPool;
++           }
++
++           /**
++            * Set pool to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::ResourceID::setPoolNil()
++           {
++               return resetPool();
++           }
++
++           
++
++            /**
++             * Getter for name by  Property Number 3
++             */
++            std::string WSF_CALL
++            AviaryCommon::ResourceID::getProperty3()
++            {
++                return getName();
++            }
++
++            /**
++             * getter for name.
++             */
++            std::string WSF_CALL
++            AviaryCommon::ResourceID::getName()
++             {
++                return property_Name;
++             }
++
++            /**
++             * setter for name
++             */
++            bool WSF_CALL
++            AviaryCommon::ResourceID::setName(
++                    const std::string  arg_Name)
++             {
++                
++
++                if(isValidName &&
++                        arg_Name == property_Name)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(arg_Name.empty())
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"name is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetName();
++
++                
++                        property_Name = std::string(arg_Name.c_str());
++                        isValidName = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for name
++            */
++           bool WSF_CALL
++           AviaryCommon::ResourceID::resetName()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidName = false; 
++               return true;
++           }
++
++           /**
++            * Check whether name is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::ResourceID::isNameNil()
++           {
++               return !isValidName;
++           }
++
++           /**
++            * Set name to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::ResourceID::setNameNil()
++           {
++               return resetName();
++           }
++
++           
++
++            /**
++             * Getter for custom_name by  Property Number 4
++             */
++            std::string WSF_CALL
++            AviaryCommon::ResourceID::getProperty4()
++            {
++                return getCustom_name();
++            }
++
++            /**
++             * getter for custom_name.
++             */
++            std::string WSF_CALL
++            AviaryCommon::ResourceID::getCustom_name()
++             {
++                return property_Custom_name;
++             }
++
++            /**
++             * setter for custom_name
++             */
++            bool WSF_CALL
++            AviaryCommon::ResourceID::setCustom_name(
++                    const std::string  arg_Custom_name)
++             {
++                
++
++                if(isValidCustom_name &&
++                        arg_Custom_name == property_Custom_name)
++                {
++                    
++                    return true;
++                }
++
++                
++
++                
++                resetCustom_name();
++
++                
++                        property_Custom_name = std::string(arg_Custom_name.c_str());
++                        isValidCustom_name = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for custom_name
++            */
++           bool WSF_CALL
++           AviaryCommon::ResourceID::resetCustom_name()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidCustom_name = false; 
++               return true;
++           }
++
++           /**
++            * Check whether custom_name is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::ResourceID::isCustom_nameNil()
++           {
++               return !isValidCustom_name;
++           }
++
++           /**
++            * Set custom_name to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::ResourceID::setCustom_nameNil()
++           {
++               return resetCustom_name();
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_ResourceType.cpp b/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_ResourceType.cpp
+new file mode 100644
+index 0000000..04c6865
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_ResourceType.cpp
+@@ -0,0 +1,403 @@
++
++
++        /**
++         * ResourceType.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryCommon_ResourceType.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryCommon;
++        
++               /*
++                * Implementation of the ResourceType|http://common.aviary.grid.redhat.com Element
++                */
++           AviaryCommon::ResourceType::ResourceType()
++        {
++
++        
++            qname = NULL;
++        
++                    property_ResourceType;
++                
++            isValidResourceType  = false;
++        
++                  qname =  axutil_qname_create (Environment::getEnv(),
++                        "ResourceType",
++                        "http://common.aviary.grid.redhat.com",
++                        NULL);
++                
++        }
++
++       AviaryCommon::ResourceType::ResourceType(std::string arg_ResourceType)
++        {
++             
++                   qname = NULL;
++             
++                 property_ResourceType;
++             
++            isValidResourceType  = true;
++            
++                 qname =  axutil_qname_create (Environment::getEnv(),
++                       "ResourceType",
++                       "http://common.aviary.grid.redhat.com",
++                       NULL);
++               
++                    property_ResourceType = arg_ResourceType;
++            
++        }
++        AviaryCommon::ResourceType::~ResourceType()
++        {
++
++        }
++
++        
++            bool WSF_CALL
++            ResourceType::deserializeFromString(
++                                            const axis2_char_t *node_value,
++                                            axiom_node_t *parent)
++            {
++              bool status = true;
++            
++                        setResourceType(node_value);
++                    
++              return status;
++            }
++        
++
++        bool WSF_CALL
++        AviaryCommon::ResourceType::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++            
++        status = AXIS2_FAILURE;
++        if(parent)
++        {
++            axis2_char_t *attrib_text = NULL;
++            attrib_text = axiom_element_get_attribute_value_by_name((axiom_element_t*)axiom_node_get_data_element(parent, Environment::getEnv()), Environment::getEnv(), "nil");
++            if (attrib_text != NULL && !axutil_strcasecmp(attrib_text, "true"))
++            {
++              
++               /* but the wsdl says that, this is non nillable */
++                WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "NULL value is set to a non nillable element ResourceType");
++                status = AXIS2_FAILURE;
++               
++            }
++            else
++            {
++                axiom_node_t *text_node = NULL;
++                text_node = axiom_node_get_first_child(parent, Environment::getEnv());
++                axiom_text_t *text_element = NULL;
++                if (text_node &&
++                        axiom_node_get_node_type(text_node, Environment::getEnv()) == AXIOM_TEXT)
++                    text_element = (axiom_text_t*)axiom_node_get_data_element(text_node, Environment::getEnv());
++                text_value = "";
++                if(text_element && axiom_text_get_value(text_element, Environment::getEnv()))
++                {
++                    text_value = (axis2_char_t*)axiom_text_get_value(text_element, Environment::getEnv());
++                }
++                status = deserializeFromString(text_value, parent);
++                }
++            }
++            
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryCommon::ResourceType::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryCommon::ResourceType::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++            char* WSF_CALL
++            AviaryCommon::ResourceType::serializeToString(axutil_hash_t *namespaces)
++            {
++                axis2_char_t *text_value = NULL;
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                
++                         text_value = (axis2_char_t*)axutil_xml_quote_string(Environment::getEnv(), (axis2_char_t*)property_ResourceType.c_str(), false);
++                         if (!text_value)
++                         {
++                             text_value = (axis2_char_t*)axutil_strdup(Environment::getEnv(), property_ResourceType.c_str());
++                         }
++                      
++                return text_value;
++            }
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryCommon::ResourceType::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++            axiom_data_source_t *data_source = NULL;
++            axutil_stream_t *stream = NULL;
++            axis2_char_t *text_value;
++             
++                    current_node = parent;
++                    data_source = (axiom_data_source_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                    if (!data_source)
++                        return NULL;
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv()); /* assume parent is of type data source */
++                    if (!stream)
++                        return NULL;
++                  
++               if(!parent_tag_closed && !tag_closed)
++               {
++                  text_value = ">"; 
++                  axutil_stream_write(stream, Environment::getEnv(), text_value, axutil_strlen(text_value));
++               }
++               
++               text_value = serializeToString(namespaces);
++               if(text_value)
++               {
++                    axutil_stream_write(stream, Environment::getEnv(), text_value, axutil_strlen(text_value));
++                    AXIS2_FREE(Environment::getEnv()->allocator, text_value);
++               }
++            
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for ResourceType by  Property Number 1
++             */
++            std::string WSF_CALL
++            AviaryCommon::ResourceType::getProperty1()
++            {
++                return getResourceType();
++            }
++
++            /**
++             * getter for ResourceType.
++             */
++            std::string WSF_CALL
++            AviaryCommon::ResourceType::getResourceType()
++             {
++                return property_ResourceType;
++             }
++
++            /**
++             * setter for ResourceType
++             */
++            bool WSF_CALL
++            AviaryCommon::ResourceType::setResourceType(
++                    const std::string  arg_ResourceType)
++             {
++                
++
++                if(isValidResourceType &&
++                        arg_ResourceType == property_ResourceType)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(arg_ResourceType.empty())
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"ResourceType is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetResourceType();
++
++                
++                        property_ResourceType = std::string(arg_ResourceType.c_str());
++                        isValidResourceType = true;
++                    
++                return true;
++             }
++
++            
++             /**
++             * specialized enum getter for ResourceType.
++             */
++             ADBResourceTypeEnum WSF_CALL
++             AviaryCommon::ResourceType::getResourceTypeEnum()
++             {
++
++                
++                 if (axutil_strcmp(property_ResourceType.c_str(), "COLLECTOR") == 0)
++                    return ResourceType_COLLECTOR;
++             
++                 if (axutil_strcmp(property_ResourceType.c_str(), "EXECUTOR") == 0)
++                    return ResourceType_EXECUTOR;
++             
++                 if (axutil_strcmp(property_ResourceType.c_str(), "EVENT_SERVER") == 0)
++                    return ResourceType_EVENT_SERVER;
++             
++                 if (axutil_strcmp(property_ResourceType.c_str(), "JOB_SERVER") == 0)
++                    return ResourceType_JOB_SERVER;
++             
++                 if (axutil_strcmp(property_ResourceType.c_str(), "LOW_LATENCY") == 0)
++                    return ResourceType_LOW_LATENCY;
++             
++                 if (axutil_strcmp(property_ResourceType.c_str(), "MASTER") == 0)
++                    return ResourceType_MASTER;
++             
++                 if (axutil_strcmp(property_ResourceType.c_str(), "NEGOTIATOR") == 0)
++                    return ResourceType_NEGOTIATOR;
++             
++                 if (axutil_strcmp(property_ResourceType.c_str(), "SCHEDULER") == 0)
++                    return ResourceType_SCHEDULER;
++             
++                 if (axutil_strcmp(property_ResourceType.c_str(), "CUSTOM") == 0)
++                    return ResourceType_CUSTOM;
++             
++             
++                 /* Error: none of the strings matched; invalid enum value */
++                 return (ADBResourceTypeEnum)-1;
++             }
++             
++             
++             /**
++             * specialized enum setter for ResourceType.
++             */
++             bool WSF_CALL
++            AviaryCommon::ResourceType::setResourceTypeEnum(const ADBResourceTypeEnum  arg_ResourceType)
++             {
++                
++
++                
++                resetResourceType();
++
++                   
++                   switch (arg_ResourceType)
++                   {
++                     
++                       case ResourceType_COLLECTOR :
++                            property_ResourceType = (axis2_char_t *)axutil_strdup(Environment::getEnv(), "COLLECTOR");
++                          break;
++                     
++                       case ResourceType_EXECUTOR :
++                            property_ResourceType = (axis2_char_t *)axutil_strdup(Environment::getEnv(), "EXECUTOR");
++                          break;
++                     
++                       case ResourceType_EVENT_SERVER :
++                            property_ResourceType = (axis2_char_t *)axutil_strdup(Environment::getEnv(), "EVENT_SERVER");
++                          break;
++                     
++                       case ResourceType_JOB_SERVER :
++                            property_ResourceType = (axis2_char_t *)axutil_strdup(Environment::getEnv(), "JOB_SERVER");
++                          break;
++                     
++                       case ResourceType_LOW_LATENCY :
++                            property_ResourceType = (axis2_char_t *)axutil_strdup(Environment::getEnv(), "LOW_LATENCY");
++                          break;
++                     
++                       case ResourceType_MASTER :
++                            property_ResourceType = (axis2_char_t *)axutil_strdup(Environment::getEnv(), "MASTER");
++                          break;
++                     
++                       case ResourceType_NEGOTIATOR :
++                            property_ResourceType = (axis2_char_t *)axutil_strdup(Environment::getEnv(), "NEGOTIATOR");
++                          break;
++                     
++                       case ResourceType_SCHEDULER :
++                            property_ResourceType = (axis2_char_t *)axutil_strdup(Environment::getEnv(), "SCHEDULER");
++                          break;
++                     
++                       case ResourceType_CUSTOM :
++                            property_ResourceType = (axis2_char_t *)axutil_strdup(Environment::getEnv(), "CUSTOM");
++                          break;
++                     
++                     
++                       default:
++                          isValidResourceType = false;
++                          property_ResourceType = "";
++                          WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Error setting ResourceType: undefined enum value");
++                          return false;
++                   }
++                
++                   if(property_ResourceType.empty())
++                   {
++                       return AXIS2_FAILURE;
++                   }
++                     isValidResourceType = true;
++                        
++                
++                return true;
++             }
++             
++
++           /**
++            * resetter for ResourceType
++            */
++           bool WSF_CALL
++           AviaryCommon::ResourceType::resetResourceType()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidResourceType = false; 
++               return true;
++           }
++
++           /**
++            * Check whether ResourceType is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::ResourceType::isResourceTypeNil()
++           {
++               return !isValidResourceType;
++           }
++
++           /**
++            * Set ResourceType to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::ResourceType::setResourceTypeNil()
++           {
++               return resetResourceType();
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_Status.cpp b/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_Status.cpp
+new file mode 100644
+index 0000000..d959dff
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_Status.cpp
+@@ -0,0 +1,698 @@
++
++
++        /**
++         * Status.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryCommon_Status.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryCommon;
++        
++                /*
++                 * This type was generated from the piece of schema that had
++                 * name = Status
++                 * Namespace URI = http://common.aviary.grid.redhat.com
++                 * Namespace Prefix = ns1
++                 */
++           AviaryCommon::Status::Status()
++        {
++
++        
++                property_Code  = NULL;
++              
++            isValidCode  = false;
++        
++                    property_Text;
++                
++            isValidText  = false;
++        
++        }
++
++       AviaryCommon::Status::Status(AviaryCommon::StatusCodeType* arg_Code,std::string arg_Text)
++        {
++             
++               property_Code  = NULL;
++             
++            isValidCode  = true;
++            
++                 property_Text;
++             
++            isValidText  = true;
++            
++                    property_Code = arg_Code;
++            
++                    property_Text = arg_Text;
++            
++        }
++        AviaryCommon::Status::~Status()
++        {
++
++        }
++
++        
++
++        bool WSF_CALL
++        AviaryCommon::Status::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++            axutil_qname_t *element_qname = NULL; 
++            
++               axiom_node_t *first_node = NULL;
++               bool is_early_node_valid = true;
++               axiom_node_t *current_node = NULL;
++               axiom_element_t *current_element = NULL;
++            
++              
++              while(parent && axiom_node_get_node_type(parent, Environment::getEnv()) != AXIOM_ELEMENT)
++              {
++                  parent = axiom_node_get_next_sibling(parent, Environment::getEnv());
++              }
++              if (NULL == parent)
++              {   
++                return AXIS2_FAILURE;
++              }
++              
++                      
++                      first_node = axiom_node_get_first_child(parent, Environment::getEnv());
++                      
++                    
++
++                     
++                     /*
++                      * building code element
++                      */
++                     
++                     
++                     
++                                   current_node = first_node;
++                                   is_early_node_valid = false;
++                                   
++                                   
++                                    while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                    {
++                                        current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                    }
++                                    if(current_node != NULL)
++                                    {
++                                        current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                        mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                    }
++                                   
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "code", NULL, NULL);
++                                 
++
++                           if (isParticle() ||  
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("code", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("code", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 AviaryCommon::StatusCodeType* element = new AviaryCommon::StatusCodeType();
++
++                                      status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                      if(AXIS2_FAILURE == status)
++                                      {
++                                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in building adb object for element code");
++                                      }
++                                      else
++                                      {
++                                          status = setCode(element);
++                                      }
++                                    
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for code ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element code missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building text element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "text", NULL, NULL);
++                                 
++
++                           if ( 
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("text", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("text", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 
++                                      text_value = axiom_element_get_text(current_element, Environment::getEnv(), current_node);
++                                      if(text_value != NULL)
++                                      {
++                                            status = setText(text_value);
++                                      }
++                                      
++                                      else
++                                      {
++                                            /*
++                                             * axis2_qname_t *qname = NULL;
++                                             * axiom_attribute_t *the_attri = NULL;
++                                             * 
++                                             * qname = axutil_qname_create(Environment::getEnv(), "nil", "http://www.w3.org/2001/XMLSchema-instance", "xsi");
++                                             * the_attri = axiom_element_get_attribute(current_element, Environment::getEnv(), qname);
++                                             */
++                                            /* currently thereis a bug in the axiom_element_get_attribute, so we have to go to this bad method */
++
++                                            axiom_attribute_t *the_attri = NULL;
++                                            axis2_char_t *attrib_text = NULL;
++                                            axutil_hash_t *attribute_hash = NULL;
++
++                                            attribute_hash = axiom_element_get_all_attributes(current_element, Environment::getEnv());
++
++                                            attrib_text = NULL;
++                                            if(attribute_hash)
++                                            {
++                                                 axutil_hash_index_t *hi;
++                                                 void *val;
++                                                 const void *key;
++                                        
++                                                 for (hi = axutil_hash_first(attribute_hash, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                                                 {
++                                                     axutil_hash_this(hi, &key, NULL, &val);
++                                                     
++                                                     if(strstr((axis2_char_t*)key, "nil|http://www.w3.org/2001/XMLSchema-instance"))
++                                                     {
++                                                         the_attri = (axiom_attribute_t*)val;
++                                                         break;
++                                                     }
++                                                 }
++                                            }
++
++                                            if(the_attri)
++                                            {
++                                                attrib_text = axiom_attribute_get_value(the_attri, Environment::getEnv());
++                                            }
++                                            else
++                                            {
++                                                /* this is hoping that attribute is stored in "http://www.w3.org/2001/XMLSchema-instance", this happnes when name is in default namespace */
++                                                attrib_text = axiom_element_get_attribute_value_by_name(current_element, Environment::getEnv(), "nil");
++                                            }
++
++                                            if(attrib_text && 0 == axutil_strcmp(attrib_text, "1"))
++                                            {
++                                                WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "NULL value is set to a non nillable element text");
++                                                status = AXIS2_FAILURE;
++                                            }
++                                            else
++                                            {
++                                                /* after all, we found this is a empty string */
++                                                status = setText("");
++                                            }
++                                      }
++                                      
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for text ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryCommon::Status::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryCommon::Status::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryCommon::Status::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++             axis2_char_t *string_to_stream;
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++                axiom_namespace_t *ns1 = NULL;
++
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                axis2_char_t *p_prefix = NULL;
++            
++                    axis2_char_t text_value_1[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++                    axis2_char_t *text_value_2;
++                    axis2_char_t *text_value_2_temp;
++                    
++               axis2_char_t *start_input_str = NULL;
++               axis2_char_t *end_input_str = NULL;
++               unsigned int start_input_str_len = 0;
++               unsigned int end_input_str_len = 0;
++            
++            
++               axiom_data_source_t *data_source = NULL;
++               axutil_stream_t *stream = NULL;
++
++            
++                    current_node = parent;
++                    data_source = (axiom_data_source_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                    if (!data_source)
++                        return NULL;
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv()); /* assume parent is of type data source */
++                    if (!stream)
++                        return NULL;
++                  
++            if(!parent_tag_closed)
++            {
++            
++              string_to_stream = ">"; 
++              axutil_stream_write(stream, Environment::getEnv(), string_to_stream, axutil_strlen(string_to_stream));
++              tag_closed = 1;
++            
++            }
++            
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidCode)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property code");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("code"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("code")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing code element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%scode",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":""); 
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%scode>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                     
++                            if(!property_Code->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                            }
++                            property_Code->serialize(current_node, parent_element,
++                                                                                 property_Code->isParticle() || false, namespaces, next_ns_index);
++                            
++                            if(!property_Code->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                            }
++                            
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidText)
++                   {
++                      
++                           /* no need to complain for minoccurs=0 element */
++                            
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("text"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("text")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing text element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%stext>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%stext>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                    
++                           text_value_2 = (axis2_char_t*)property_Text.c_str();
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                           
++                            
++                           text_value_2_temp = axutil_xml_quote_string(Environment::getEnv(), text_value_2, true);
++                           if (text_value_2_temp)
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_2_temp, axutil_strlen(text_value_2_temp));
++                               AXIS2_FREE(Environment::getEnv()->allocator, text_value_2_temp);
++                           }
++                           else
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_2, axutil_strlen(text_value_2));
++                           }
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                           
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for code by  Property Number 1
++             */
++            AviaryCommon::StatusCodeType* WSF_CALL
++            AviaryCommon::Status::getProperty1()
++            {
++                return getCode();
++            }
++
++            /**
++             * getter for code.
++             */
++            AviaryCommon::StatusCodeType* WSF_CALL
++            AviaryCommon::Status::getCode()
++             {
++                return property_Code;
++             }
++
++            /**
++             * setter for code
++             */
++            bool WSF_CALL
++            AviaryCommon::Status::setCode(
++                    AviaryCommon::StatusCodeType*  arg_Code)
++             {
++                
++
++                if(isValidCode &&
++                        arg_Code == property_Code)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(NULL == arg_Code)
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"code is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetCode();
++
++                
++                    if(NULL == arg_Code)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_Code = arg_Code;
++                        isValidCode = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for code
++            */
++           bool WSF_CALL
++           AviaryCommon::Status::resetCode()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++            
++                
++
++                if(property_Code != NULL)
++                {
++                   
++                   
++                         delete  property_Code;
++                     
++
++                   }
++
++                
++                
++                
++               isValidCode = false; 
++               return true;
++           }
++
++           /**
++            * Check whether code is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::Status::isCodeNil()
++           {
++               return !isValidCode;
++           }
++
++           /**
++            * Set code to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::Status::setCodeNil()
++           {
++               return resetCode();
++           }
++
++           
++
++            /**
++             * Getter for text by  Property Number 2
++             */
++            std::string WSF_CALL
++            AviaryCommon::Status::getProperty2()
++            {
++                return getText();
++            }
++
++            /**
++             * getter for text.
++             */
++            std::string WSF_CALL
++            AviaryCommon::Status::getText()
++             {
++                return property_Text;
++             }
++
++            /**
++             * setter for text
++             */
++            bool WSF_CALL
++            AviaryCommon::Status::setText(
++                    const std::string  arg_Text)
++             {
++                
++
++                if(isValidText &&
++                        arg_Text == property_Text)
++                {
++                    
++                    return true;
++                }
++
++                
++
++                
++                resetText();
++
++                
++                        property_Text = std::string(arg_Text.c_str());
++                        isValidText = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for text
++            */
++           bool WSF_CALL
++           AviaryCommon::Status::resetText()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidText = false; 
++               return true;
++           }
++
++           /**
++            * Check whether text is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::Status::isTextNil()
++           {
++               return !isValidText;
++           }
++
++           /**
++            * Set text to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::Status::setTextNil()
++           {
++               return resetText();
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_StatusCodeType.cpp b/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_StatusCodeType.cpp
+new file mode 100644
+index 0000000..470823a
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_StatusCodeType.cpp
+@@ -0,0 +1,382 @@
++
++
++        /**
++         * StatusCodeType.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryCommon_StatusCodeType.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryCommon;
++        
++               /*
++                * Implementation of the StatusCodeType|http://common.aviary.grid.redhat.com Element
++                */
++           AviaryCommon::StatusCodeType::StatusCodeType()
++        {
++
++        
++            qname = NULL;
++        
++                    property_StatusCodeType;
++                
++            isValidStatusCodeType  = false;
++        
++                  qname =  axutil_qname_create (Environment::getEnv(),
++                        "StatusCodeType",
++                        "http://common.aviary.grid.redhat.com",
++                        NULL);
++                
++        }
++
++       AviaryCommon::StatusCodeType::StatusCodeType(std::string arg_StatusCodeType)
++        {
++             
++                   qname = NULL;
++             
++                 property_StatusCodeType;
++             
++            isValidStatusCodeType  = true;
++            
++                 qname =  axutil_qname_create (Environment::getEnv(),
++                       "StatusCodeType",
++                       "http://common.aviary.grid.redhat.com",
++                       NULL);
++               
++                    property_StatusCodeType = arg_StatusCodeType;
++            
++        }
++        AviaryCommon::StatusCodeType::~StatusCodeType()
++        {
++
++        }
++
++        
++            bool WSF_CALL
++            StatusCodeType::deserializeFromString(
++                                            const axis2_char_t *node_value,
++                                            axiom_node_t *parent)
++            {
++              bool status = true;
++            
++                        setStatusCodeType(node_value);
++                    
++              return status;
++            }
++        
++
++        bool WSF_CALL
++        AviaryCommon::StatusCodeType::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++            
++        status = AXIS2_FAILURE;
++        if(parent)
++        {
++            axis2_char_t *attrib_text = NULL;
++            attrib_text = axiom_element_get_attribute_value_by_name((axiom_element_t*)axiom_node_get_data_element(parent, Environment::getEnv()), Environment::getEnv(), "nil");
++            if (attrib_text != NULL && !axutil_strcasecmp(attrib_text, "true"))
++            {
++              
++               /* but the wsdl says that, this is non nillable */
++                WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "NULL value is set to a non nillable element StatusCodeType");
++                status = AXIS2_FAILURE;
++               
++            }
++            else
++            {
++                axiom_node_t *text_node = NULL;
++                text_node = axiom_node_get_first_child(parent, Environment::getEnv());
++                axiom_text_t *text_element = NULL;
++                if (text_node &&
++                        axiom_node_get_node_type(text_node, Environment::getEnv()) == AXIOM_TEXT)
++                    text_element = (axiom_text_t*)axiom_node_get_data_element(text_node, Environment::getEnv());
++                text_value = "";
++                if(text_element && axiom_text_get_value(text_element, Environment::getEnv()))
++                {
++                    text_value = (axis2_char_t*)axiom_text_get_value(text_element, Environment::getEnv());
++                }
++                status = deserializeFromString(text_value, parent);
++                }
++            }
++            
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryCommon::StatusCodeType::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryCommon::StatusCodeType::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++            char* WSF_CALL
++            AviaryCommon::StatusCodeType::serializeToString(axutil_hash_t *namespaces)
++            {
++                axis2_char_t *text_value = NULL;
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                
++                         text_value = (axis2_char_t*)axutil_xml_quote_string(Environment::getEnv(), (axis2_char_t*)property_StatusCodeType.c_str(), false);
++                         if (!text_value)
++                         {
++                             text_value = (axis2_char_t*)axutil_strdup(Environment::getEnv(), property_StatusCodeType.c_str());
++                         }
++                      
++                return text_value;
++            }
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryCommon::StatusCodeType::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++            axiom_data_source_t *data_source = NULL;
++            axutil_stream_t *stream = NULL;
++            axis2_char_t *text_value;
++             
++                    current_node = parent;
++                    data_source = (axiom_data_source_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                    if (!data_source)
++                        return NULL;
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv()); /* assume parent is of type data source */
++                    if (!stream)
++                        return NULL;
++                  
++               if(!parent_tag_closed && !tag_closed)
++               {
++                  text_value = ">"; 
++                  axutil_stream_write(stream, Environment::getEnv(), text_value, axutil_strlen(text_value));
++               }
++               
++               text_value = serializeToString(namespaces);
++               if(text_value)
++               {
++                    axutil_stream_write(stream, Environment::getEnv(), text_value, axutil_strlen(text_value));
++                    AXIS2_FREE(Environment::getEnv()->allocator, text_value);
++               }
++            
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for StatusCodeType by  Property Number 1
++             */
++            std::string WSF_CALL
++            AviaryCommon::StatusCodeType::getProperty1()
++            {
++                return getStatusCodeType();
++            }
++
++            /**
++             * getter for StatusCodeType.
++             */
++            std::string WSF_CALL
++            AviaryCommon::StatusCodeType::getStatusCodeType()
++             {
++                return property_StatusCodeType;
++             }
++
++            /**
++             * setter for StatusCodeType
++             */
++            bool WSF_CALL
++            AviaryCommon::StatusCodeType::setStatusCodeType(
++                    const std::string  arg_StatusCodeType)
++             {
++                
++
++                if(isValidStatusCodeType &&
++                        arg_StatusCodeType == property_StatusCodeType)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(arg_StatusCodeType.empty())
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"StatusCodeType is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetStatusCodeType();
++
++                
++                        property_StatusCodeType = std::string(arg_StatusCodeType.c_str());
++                        isValidStatusCodeType = true;
++                    
++                return true;
++             }
++
++            
++             /**
++             * specialized enum getter for StatusCodeType.
++             */
++             ADBStatusCodeTypeEnum WSF_CALL
++             AviaryCommon::StatusCodeType::getStatusCodeTypeEnum()
++             {
++
++                
++                 if (axutil_strcmp(property_StatusCodeType.c_str(), "OK") == 0)
++                    return StatusCodeType_OK;
++             
++                 if (axutil_strcmp(property_StatusCodeType.c_str(), "FAIL") == 0)
++                    return StatusCodeType_FAIL;
++             
++                 if (axutil_strcmp(property_StatusCodeType.c_str(), "NO_MATCH") == 0)
++                    return StatusCodeType_NO_MATCH;
++             
++                 if (axutil_strcmp(property_StatusCodeType.c_str(), "INVALID_OFFSET") == 0)
++                    return StatusCodeType_INVALID_OFFSET;
++             
++                 if (axutil_strcmp(property_StatusCodeType.c_str(), "UNIMPLEMENTED") == 0)
++                    return StatusCodeType_UNIMPLEMENTED;
++             
++                 if (axutil_strcmp(property_StatusCodeType.c_str(), "UNAVAILABLE") == 0)
++                    return StatusCodeType_UNAVAILABLE;
++             
++             
++                 /* Error: none of the strings matched; invalid enum value */
++                 return (ADBStatusCodeTypeEnum)-1;
++             }
++             
++             
++             /**
++             * specialized enum setter for StatusCodeType.
++             */
++             bool WSF_CALL
++            AviaryCommon::StatusCodeType::setStatusCodeTypeEnum(const ADBStatusCodeTypeEnum  arg_StatusCodeType)
++             {
++                
++
++                
++                resetStatusCodeType();
++
++                   
++                   switch (arg_StatusCodeType)
++                   {
++                     
++                       case StatusCodeType_OK :
++                            property_StatusCodeType = (axis2_char_t *)axutil_strdup(Environment::getEnv(), "OK");
++                          break;
++                     
++                       case StatusCodeType_FAIL :
++                            property_StatusCodeType = (axis2_char_t *)axutil_strdup(Environment::getEnv(), "FAIL");
++                          break;
++                     
++                       case StatusCodeType_NO_MATCH :
++                            property_StatusCodeType = (axis2_char_t *)axutil_strdup(Environment::getEnv(), "NO_MATCH");
++                          break;
++                     
++                       case StatusCodeType_INVALID_OFFSET :
++                            property_StatusCodeType = (axis2_char_t *)axutil_strdup(Environment::getEnv(), "INVALID_OFFSET");
++                          break;
++                     
++                       case StatusCodeType_UNIMPLEMENTED :
++                            property_StatusCodeType = (axis2_char_t *)axutil_strdup(Environment::getEnv(), "UNIMPLEMENTED");
++                          break;
++                     
++                       case StatusCodeType_UNAVAILABLE :
++                            property_StatusCodeType = (axis2_char_t *)axutil_strdup(Environment::getEnv(), "UNAVAILABLE");
++                          break;
++                     
++                     
++                       default:
++                          isValidStatusCodeType = false;
++                          property_StatusCodeType = "";
++                          WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Error setting StatusCodeType: undefined enum value");
++                          return false;
++                   }
++                
++                   if(property_StatusCodeType.empty())
++                   {
++                       return AXIS2_FAILURE;
++                   }
++                     isValidStatusCodeType = true;
++                        
++                
++                return true;
++             }
++             
++
++           /**
++            * resetter for StatusCodeType
++            */
++           bool WSF_CALL
++           AviaryCommon::StatusCodeType::resetStatusCodeType()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidStatusCodeType = false; 
++               return true;
++           }
++
++           /**
++            * Check whether StatusCodeType is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::StatusCodeType::isStatusCodeTypeNil()
++           {
++               return !isValidStatusCodeType;
++           }
++
++           /**
++            * Set StatusCodeType to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::StatusCodeType::setStatusCodeTypeNil()
++           {
++               return resetStatusCodeType();
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_SubmissionID.cpp b/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_SubmissionID.cpp
+new file mode 100644
+index 0000000..0d23b22
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_SubmissionID.cpp
+@@ -0,0 +1,717 @@
++
++
++        /**
++         * SubmissionID.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryCommon_SubmissionID.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryCommon;
++        
++                /*
++                 * This type was generated from the piece of schema that had
++                 * name = SubmissionID
++                 * Namespace URI = http://common.aviary.grid.redhat.com
++                 * Namespace Prefix = ns1
++                 */
++           AviaryCommon::SubmissionID::SubmissionID()
++        {
++
++        
++                    property_Name;
++                
++            isValidName  = false;
++        
++                    property_Owner;
++                
++            isValidOwner  = false;
++        
++        }
++
++       AviaryCommon::SubmissionID::SubmissionID(std::string arg_Name,std::string arg_Owner)
++        {
++             
++                 property_Name;
++             
++            isValidName  = true;
++            
++                 property_Owner;
++             
++            isValidOwner  = true;
++            
++                    property_Name = arg_Name;
++            
++                    property_Owner = arg_Owner;
++            
++        }
++        AviaryCommon::SubmissionID::~SubmissionID()
++        {
++
++        }
++
++        
++
++        bool WSF_CALL
++        AviaryCommon::SubmissionID::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++            axutil_qname_t *element_qname = NULL; 
++            
++               axiom_node_t *first_node = NULL;
++               bool is_early_node_valid = true;
++               axiom_node_t *current_node = NULL;
++               axiom_element_t *current_element = NULL;
++            
++              
++              while(parent && axiom_node_get_node_type(parent, Environment::getEnv()) != AXIOM_ELEMENT)
++              {
++                  parent = axiom_node_get_next_sibling(parent, Environment::getEnv());
++              }
++              if (NULL == parent)
++              {   
++                return AXIS2_FAILURE;
++              }
++              
++                      
++                      first_node = axiom_node_get_first_child(parent, Environment::getEnv());
++                      
++                    
++
++                     
++                     /*
++                      * building name element
++                      */
++                     
++                     
++                     
++                                   current_node = first_node;
++                                   is_early_node_valid = false;
++                                   
++                                   
++                                    while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                    {
++                                        current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                    }
++                                    if(current_node != NULL)
++                                    {
++                                        current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                        mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                    }
++                                   
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "name", NULL, NULL);
++                                 
++
++                           if ( 
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("name", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("name", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 
++                                      text_value = axiom_element_get_text(current_element, Environment::getEnv(), current_node);
++                                      if(text_value != NULL)
++                                      {
++                                            status = setName(text_value);
++                                      }
++                                      
++                                      else
++                                      {
++                                            /*
++                                             * axis2_qname_t *qname = NULL;
++                                             * axiom_attribute_t *the_attri = NULL;
++                                             * 
++                                             * qname = axutil_qname_create(Environment::getEnv(), "nil", "http://www.w3.org/2001/XMLSchema-instance", "xsi");
++                                             * the_attri = axiom_element_get_attribute(current_element, Environment::getEnv(), qname);
++                                             */
++                                            /* currently thereis a bug in the axiom_element_get_attribute, so we have to go to this bad method */
++
++                                            axiom_attribute_t *the_attri = NULL;
++                                            axis2_char_t *attrib_text = NULL;
++                                            axutil_hash_t *attribute_hash = NULL;
++
++                                            attribute_hash = axiom_element_get_all_attributes(current_element, Environment::getEnv());
++
++                                            attrib_text = NULL;
++                                            if(attribute_hash)
++                                            {
++                                                 axutil_hash_index_t *hi;
++                                                 void *val;
++                                                 const void *key;
++                                        
++                                                 for (hi = axutil_hash_first(attribute_hash, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                                                 {
++                                                     axutil_hash_this(hi, &key, NULL, &val);
++                                                     
++                                                     if(strstr((axis2_char_t*)key, "nil|http://www.w3.org/2001/XMLSchema-instance"))
++                                                     {
++                                                         the_attri = (axiom_attribute_t*)val;
++                                                         break;
++                                                     }
++                                                 }
++                                            }
++
++                                            if(the_attri)
++                                            {
++                                                attrib_text = axiom_attribute_get_value(the_attri, Environment::getEnv());
++                                            }
++                                            else
++                                            {
++                                                /* this is hoping that attribute is stored in "http://www.w3.org/2001/XMLSchema-instance", this happnes when name is in default namespace */
++                                                attrib_text = axiom_element_get_attribute_value_by_name(current_element, Environment::getEnv(), "nil");
++                                            }
++
++                                            if(attrib_text && 0 == axutil_strcmp(attrib_text, "1"))
++                                            {
++                                                WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "NULL value is set to a non nillable element name");
++                                                status = AXIS2_FAILURE;
++                                            }
++                                            else
++                                            {
++                                                /* after all, we found this is a empty string */
++                                                status = setName("");
++                                            }
++                                      }
++                                      
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for name ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building owner element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "owner", NULL, NULL);
++                                 
++
++                           if ( 
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("owner", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("owner", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 
++                                      text_value = axiom_element_get_text(current_element, Environment::getEnv(), current_node);
++                                      if(text_value != NULL)
++                                      {
++                                            status = setOwner(text_value);
++                                      }
++                                      
++                                      else
++                                      {
++                                            /*
++                                             * axis2_qname_t *qname = NULL;
++                                             * axiom_attribute_t *the_attri = NULL;
++                                             * 
++                                             * qname = axutil_qname_create(Environment::getEnv(), "nil", "http://www.w3.org/2001/XMLSchema-instance", "xsi");
++                                             * the_attri = axiom_element_get_attribute(current_element, Environment::getEnv(), qname);
++                                             */
++                                            /* currently thereis a bug in the axiom_element_get_attribute, so we have to go to this bad method */
++
++                                            axiom_attribute_t *the_attri = NULL;
++                                            axis2_char_t *attrib_text = NULL;
++                                            axutil_hash_t *attribute_hash = NULL;
++
++                                            attribute_hash = axiom_element_get_all_attributes(current_element, Environment::getEnv());
++
++                                            attrib_text = NULL;
++                                            if(attribute_hash)
++                                            {
++                                                 axutil_hash_index_t *hi;
++                                                 void *val;
++                                                 const void *key;
++                                        
++                                                 for (hi = axutil_hash_first(attribute_hash, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                                                 {
++                                                     axutil_hash_this(hi, &key, NULL, &val);
++                                                     
++                                                     if(strstr((axis2_char_t*)key, "nil|http://www.w3.org/2001/XMLSchema-instance"))
++                                                     {
++                                                         the_attri = (axiom_attribute_t*)val;
++                                                         break;
++                                                     }
++                                                 }
++                                            }
++
++                                            if(the_attri)
++                                            {
++                                                attrib_text = axiom_attribute_get_value(the_attri, Environment::getEnv());
++                                            }
++                                            else
++                                            {
++                                                /* this is hoping that attribute is stored in "http://www.w3.org/2001/XMLSchema-instance", this happnes when name is in default namespace */
++                                                attrib_text = axiom_element_get_attribute_value_by_name(current_element, Environment::getEnv(), "nil");
++                                            }
++
++                                            if(attrib_text && 0 == axutil_strcmp(attrib_text, "1"))
++                                            {
++                                                WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "NULL value is set to a non nillable element owner");
++                                                status = AXIS2_FAILURE;
++                                            }
++                                            else
++                                            {
++                                                /* after all, we found this is a empty string */
++                                                status = setOwner("");
++                                            }
++                                      }
++                                      
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for owner ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryCommon::SubmissionID::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryCommon::SubmissionID::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryCommon::SubmissionID::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++             axis2_char_t *string_to_stream;
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++                axiom_namespace_t *ns1 = NULL;
++
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                axis2_char_t *p_prefix = NULL;
++            
++                    axis2_char_t *text_value_1;
++                    axis2_char_t *text_value_1_temp;
++                    
++                    axis2_char_t *text_value_2;
++                    axis2_char_t *text_value_2_temp;
++                    
++               axis2_char_t *start_input_str = NULL;
++               axis2_char_t *end_input_str = NULL;
++               unsigned int start_input_str_len = 0;
++               unsigned int end_input_str_len = 0;
++            
++            
++               axiom_data_source_t *data_source = NULL;
++               axutil_stream_t *stream = NULL;
++
++            
++                    current_node = parent;
++                    data_source = (axiom_data_source_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                    if (!data_source)
++                        return NULL;
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv()); /* assume parent is of type data source */
++                    if (!stream)
++                        return NULL;
++                  
++            if(!parent_tag_closed)
++            {
++            
++              string_to_stream = ">"; 
++              axutil_stream_write(stream, Environment::getEnv(), string_to_stream, axutil_strlen(string_to_stream));
++              tag_closed = 1;
++            
++            }
++            
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidName)
++                   {
++                      
++                           /* no need to complain for minoccurs=0 element */
++                            
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("name"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("name")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing name element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sname>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sname>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                    
++                           text_value_1 = (axis2_char_t*)property_Name.c_str();
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                           
++                            
++                           text_value_1_temp = axutil_xml_quote_string(Environment::getEnv(), text_value_1, true);
++                           if (text_value_1_temp)
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_1_temp, axutil_strlen(text_value_1_temp));
++                               AXIS2_FREE(Environment::getEnv()->allocator, text_value_1_temp);
++                           }
++                           else
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_1, axutil_strlen(text_value_1));
++                           }
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                           
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidOwner)
++                   {
++                      
++                           /* no need to complain for minoccurs=0 element */
++                            
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("owner"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("owner")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing owner element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sowner>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sowner>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                    
++                           text_value_2 = (axis2_char_t*)property_Owner.c_str();
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                           
++                            
++                           text_value_2_temp = axutil_xml_quote_string(Environment::getEnv(), text_value_2, true);
++                           if (text_value_2_temp)
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_2_temp, axutil_strlen(text_value_2_temp));
++                               AXIS2_FREE(Environment::getEnv()->allocator, text_value_2_temp);
++                           }
++                           else
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_2, axutil_strlen(text_value_2));
++                           }
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                           
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for name by  Property Number 1
++             */
++            std::string WSF_CALL
++            AviaryCommon::SubmissionID::getProperty1()
++            {
++                return getName();
++            }
++
++            /**
++             * getter for name.
++             */
++            std::string WSF_CALL
++            AviaryCommon::SubmissionID::getName()
++             {
++                return property_Name;
++             }
++
++            /**
++             * setter for name
++             */
++            bool WSF_CALL
++            AviaryCommon::SubmissionID::setName(
++                    const std::string  arg_Name)
++             {
++                
++
++                if(isValidName &&
++                        arg_Name == property_Name)
++                {
++                    
++                    return true;
++                }
++
++                
++
++                
++                resetName();
++
++                
++                        property_Name = std::string(arg_Name.c_str());
++                        isValidName = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for name
++            */
++           bool WSF_CALL
++           AviaryCommon::SubmissionID::resetName()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidName = false; 
++               return true;
++           }
++
++           /**
++            * Check whether name is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::SubmissionID::isNameNil()
++           {
++               return !isValidName;
++           }
++
++           /**
++            * Set name to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::SubmissionID::setNameNil()
++           {
++               return resetName();
++           }
++
++           
++
++            /**
++             * Getter for owner by  Property Number 2
++             */
++            std::string WSF_CALL
++            AviaryCommon::SubmissionID::getProperty2()
++            {
++                return getOwner();
++            }
++
++            /**
++             * getter for owner.
++             */
++            std::string WSF_CALL
++            AviaryCommon::SubmissionID::getOwner()
++             {
++                return property_Owner;
++             }
++
++            /**
++             * setter for owner
++             */
++            bool WSF_CALL
++            AviaryCommon::SubmissionID::setOwner(
++                    const std::string  arg_Owner)
++             {
++                
++
++                if(isValidOwner &&
++                        arg_Owner == property_Owner)
++                {
++                    
++                    return true;
++                }
++
++                
++
++                
++                resetOwner();
++
++                
++                        property_Owner = std::string(arg_Owner.c_str());
++                        isValidOwner = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for owner
++            */
++           bool WSF_CALL
++           AviaryCommon::SubmissionID::resetOwner()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidOwner = false; 
++               return true;
++           }
++
++           /**
++            * Check whether owner is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::SubmissionID::isOwnerNil()
++           {
++               return !isValidOwner;
++           }
++
++           /**
++            * Set owner to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::SubmissionID::setOwnerNil()
++           {
++               return resetOwner();
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_SubmissionSummary.cpp b/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_SubmissionSummary.cpp
+new file mode 100644
+index 0000000..bf367ee
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/common/src/AviaryCommon_SubmissionSummary.cpp
+@@ -0,0 +1,2415 @@
++
++
++        /**
++         * SubmissionSummary.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryCommon_SubmissionSummary.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryCommon;
++        
++                /*
++                 * This type was generated from the piece of schema that had
++                 * name = SubmissionSummary
++                 * Namespace URI = http://common.aviary.grid.redhat.com
++                 * Namespace Prefix = ns1
++                 */
++           AviaryCommon::SubmissionSummary::SubmissionSummary()
++        {
++
++        
++                property_Id  = NULL;
++              
++            isValidId  = false;
++        
++                property_Status  = NULL;
++              
++            isValidStatus  = false;
++        
++            isValidCompleted  = false;
++        
++            isValidHeld  = false;
++        
++            isValidIdle  = false;
++        
++            isValidRemoved  = false;
++        
++            isValidRunning  = false;
++        
++                property_Jobs  = NULL;
++              
++            isValidJobs  = false;
++        
++        }
++
++       AviaryCommon::SubmissionSummary::SubmissionSummary(AviaryCommon::SubmissionID* arg_Id,AviaryCommon::Status* arg_Status,int arg_Completed,int arg_Held,int arg_Idle,int arg_Removed,int arg_Running,std::vector<AviaryCommon::JobSummary*>* arg_Jobs)
++        {
++             
++               property_Id  = NULL;
++             
++            isValidId  = true;
++            
++               property_Status  = NULL;
++             
++            isValidStatus  = true;
++            
++            isValidCompleted  = true;
++            
++            isValidHeld  = true;
++            
++            isValidIdle  = true;
++            
++            isValidRemoved  = true;
++            
++            isValidRunning  = true;
++            
++               property_Jobs  = NULL;
++             
++            isValidJobs  = true;
++            
++                    property_Id = arg_Id;
++            
++                    property_Status = arg_Status;
++            
++                    property_Completed = arg_Completed;
++            
++                    property_Held = arg_Held;
++            
++                    property_Idle = arg_Idle;
++            
++                    property_Removed = arg_Removed;
++            
++                    property_Running = arg_Running;
++            
++                    property_Jobs = arg_Jobs;
++            
++        }
++        AviaryCommon::SubmissionSummary::~SubmissionSummary()
++        {
++
++        }
++
++        
++
++        bool WSF_CALL
++        AviaryCommon::SubmissionSummary::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++               int i = 0;
++            
++               int sequence_broken = 0;
++               axiom_node_t *tmp_node = NULL;
++            
++            axutil_qname_t *element_qname = NULL; 
++            
++               axiom_node_t *first_node = NULL;
++               bool is_early_node_valid = true;
++               axiom_node_t *current_node = NULL;
++               axiom_element_t *current_element = NULL;
++            
++              
++              while(parent && axiom_node_get_node_type(parent, Environment::getEnv()) != AXIOM_ELEMENT)
++              {
++                  parent = axiom_node_get_next_sibling(parent, Environment::getEnv());
++              }
++              if (NULL == parent)
++              {   
++                return AXIS2_FAILURE;
++              }
++              
++                      
++                      first_node = axiom_node_get_first_child(parent, Environment::getEnv());
++                      
++                    
++
++                     
++                     /*
++                      * building id element
++                      */
++                     
++                     
++                     
++                                   current_node = first_node;
++                                   is_early_node_valid = false;
++                                   
++                                   
++                                    while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                    {
++                                        current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                    }
++                                    if(current_node != NULL)
++                                    {
++                                        current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                        mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                    }
++                                   
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "id", NULL, NULL);
++                                 
++
++                           if (isParticle() ||  
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("id", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("id", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 AviaryCommon::SubmissionID* element = new AviaryCommon::SubmissionID();
++
++                                      status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                      if(AXIS2_FAILURE == status)
++                                      {
++                                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in building adb object for element id");
++                                      }
++                                      else
++                                      {
++                                          status = setId(element);
++                                      }
++                                    
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for id ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element id missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building status element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "status", NULL, NULL);
++                                 
++
++                           if (isParticle() ||  
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("status", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("status", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 AviaryCommon::Status* element = new AviaryCommon::Status();
++
++                                      status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                      if(AXIS2_FAILURE == status)
++                                      {
++                                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in building adb object for element status");
++                                      }
++                                      else
++                                      {
++                                          status = setStatus(element);
++                                      }
++                                    
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for status ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element status missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building completed element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "completed", NULL, NULL);
++                                 
++
++                           if ( 
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("completed", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("completed", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 
++                                      text_value = axiom_element_get_text(current_element, Environment::getEnv(), current_node);
++                                      if(text_value != NULL)
++                                      {
++                                            status = setCompleted(atoi(text_value));
++                                      }
++                                      
++                                      else
++                                      {
++                                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "NULL value is set to a non nillable element completed");
++                                          status = AXIS2_FAILURE;
++                                      }
++                                      
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for completed ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element completed missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building held element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "held", NULL, NULL);
++                                 
++
++                           if ( 
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("held", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("held", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 
++                                      text_value = axiom_element_get_text(current_element, Environment::getEnv(), current_node);
++                                      if(text_value != NULL)
++                                      {
++                                            status = setHeld(atoi(text_value));
++                                      }
++                                      
++                                      else
++                                      {
++                                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "NULL value is set to a non nillable element held");
++                                          status = AXIS2_FAILURE;
++                                      }
++                                      
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for held ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element held missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building idle element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "idle", NULL, NULL);
++                                 
++
++                           if ( 
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("idle", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("idle", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 
++                                      text_value = axiom_element_get_text(current_element, Environment::getEnv(), current_node);
++                                      if(text_value != NULL)
++                                      {
++                                            status = setIdle(atoi(text_value));
++                                      }
++                                      
++                                      else
++                                      {
++                                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "NULL value is set to a non nillable element idle");
++                                          status = AXIS2_FAILURE;
++                                      }
++                                      
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for idle ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element idle missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building removed element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "removed", NULL, NULL);
++                                 
++
++                           if ( 
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("removed", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("removed", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 
++                                      text_value = axiom_element_get_text(current_element, Environment::getEnv(), current_node);
++                                      if(text_value != NULL)
++                                      {
++                                            status = setRemoved(atoi(text_value));
++                                      }
++                                      
++                                      else
++                                      {
++                                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "NULL value is set to a non nillable element removed");
++                                          status = AXIS2_FAILURE;
++                                      }
++                                      
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for removed ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element removed missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building running element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "running", NULL, NULL);
++                                 
++
++                           if ( 
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("running", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("running", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 
++                                      text_value = axiom_element_get_text(current_element, Environment::getEnv(), current_node);
++                                      if(text_value != NULL)
++                                      {
++                                            status = setRunning(atoi(text_value));
++                                      }
++                                      
++                                      else
++                                      {
++                                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "NULL value is set to a non nillable element running");
++                                          status = AXIS2_FAILURE;
++                                      }
++                                      
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for running ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element running missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++                       { 
++                    /*
++                     * building Jobs array
++                     */
++                       std::vector<AviaryCommon::JobSummary*>* arr_list =new std::vector<AviaryCommon::JobSummary*>();
++                   
++
++                     
++                     /*
++                      * building jobs element
++                      */
++                     
++                     
++                     
++                                    element_qname = axutil_qname_create(Environment::getEnv(), "jobs", NULL, NULL);
++                                  
++                               
++                               for (i = 0, sequence_broken = 0, current_node = (is_early_node_valid?axiom_node_get_next_sibling(current_node, Environment::getEnv()):current_node); !sequence_broken && current_node != NULL;)
++                                             
++                               {
++                                  if(axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                  {
++                                     current_node =axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                     is_early_node_valid = false;
++                                     continue;
++                                  }
++                                  
++                                  current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                  mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++
++                                  if (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("jobs", axiom_element_get_localname(current_element, Environment::getEnv())))
++                                  {
++                                  
++                                      is_early_node_valid = true;
++                                      
++                                     AviaryCommon::JobSummary* element = new AviaryCommon::JobSummary();
++                                          
++                                          status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                          
++                                          if(AXIS2_FAILURE ==  status)
++                                          {
++					  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "failed in building element jobs ");
++                                          }
++                                          else
++                                          {
++                                            arr_list->push_back(element);
++                                            
++                                          }
++                                        
++                                     if(AXIS2_FAILURE ==  status)
++                                     {
++                                         WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in setting the value for jobs ");
++                                         if(element_qname)
++                                         {
++                                            axutil_qname_free(element_qname, Environment::getEnv());
++                                         }
++                                         if(arr_list)
++                                         {
++                                            delete arr_list;
++                                         }
++                                         return false;
++                                     }
++
++                                     i++;
++                                    current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                  }
++                                  else
++                                  {
++                                      is_early_node_valid = false;
++                                      sequence_broken = 1;
++                                  }
++                                  
++                               }
++
++                               
++                                   if (i < 0)
++                                   {
++                                     /* found element out of order */
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"jobs (@minOccurs = '0') only have %d elements", i);
++                                     if(element_qname)
++                                     {
++                                        axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     if(arr_list)
++                                     {
++                                        delete arr_list;
++                                     }
++                                     return false;
++                                   }
++                               
++
++                               if(0 == arr_list->size())
++                               {
++                                    delete arr_list;
++                               }
++                               else
++                               {
++                                    status = setJobs(arr_list);
++                               }
++
++                              
++                            } 
++                        
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryCommon::SubmissionSummary::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryCommon::SubmissionSummary::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryCommon::SubmissionSummary::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++             axis2_char_t *string_to_stream;
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++                axiom_namespace_t *ns1 = NULL;
++
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                axis2_char_t *p_prefix = NULL;
++            
++               int i = 0;
++               int count = 0;
++               void *element = NULL;
++             
++                    axis2_char_t text_value_1[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++                    axis2_char_t text_value_2[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++                    axis2_char_t text_value_3[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++                    axis2_char_t text_value_4[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++                    axis2_char_t text_value_5[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++                    axis2_char_t text_value_6[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++                    axis2_char_t text_value_7[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++                    axis2_char_t text_value_8[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++               axis2_char_t *start_input_str = NULL;
++               axis2_char_t *end_input_str = NULL;
++               unsigned int start_input_str_len = 0;
++               unsigned int end_input_str_len = 0;
++            
++            
++               axiom_data_source_t *data_source = NULL;
++               axutil_stream_t *stream = NULL;
++
++            
++                    current_node = parent;
++                    data_source = (axiom_data_source_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                    if (!data_source)
++                        return NULL;
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv()); /* assume parent is of type data source */
++                    if (!stream)
++                        return NULL;
++                  
++            if(!parent_tag_closed)
++            {
++            
++              string_to_stream = ">"; 
++              axutil_stream_write(stream, Environment::getEnv(), string_to_stream, axutil_strlen(string_to_stream));
++              tag_closed = 1;
++            
++            }
++            
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidId)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property id");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("id"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("id")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing id element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sid",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":""); 
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sid>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                     
++                            if(!property_Id->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                            }
++                            property_Id->serialize(current_node, parent_element,
++                                                                                 property_Id->isParticle() || false, namespaces, next_ns_index);
++                            
++                            if(!property_Id->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                            }
++                            
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidStatus)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property status");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("status"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("status")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing status element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sstatus",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":""); 
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sstatus>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                     
++                            if(!property_Status->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                            }
++                            property_Status->serialize(current_node, parent_element,
++                                                                                 property_Status->isParticle() || false, namespaces, next_ns_index);
++                            
++                            if(!property_Status->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                            }
++                            
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidCompleted)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property completed");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("completed"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("completed")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing completed element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%scompleted>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%scompleted>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                    
++                               sprintf (text_value_3, AXIS2_PRINTF_INT32_FORMAT_SPECIFIER, property_Completed);
++                             
++                           axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), text_value_3, axutil_strlen(text_value_3));
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                           
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidHeld)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property held");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("held"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("held")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing held element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sheld>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sheld>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                    
++                               sprintf (text_value_4, AXIS2_PRINTF_INT32_FORMAT_SPECIFIER, property_Held);
++                             
++                           axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), text_value_4, axutil_strlen(text_value_4));
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                           
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidIdle)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property idle");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("idle"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("idle")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing idle element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sidle>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sidle>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                    
++                               sprintf (text_value_5, AXIS2_PRINTF_INT32_FORMAT_SPECIFIER, property_Idle);
++                             
++                           axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), text_value_5, axutil_strlen(text_value_5));
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                           
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidRemoved)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property removed");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("removed"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("removed")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing removed element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sremoved>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sremoved>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                    
++                               sprintf (text_value_6, AXIS2_PRINTF_INT32_FORMAT_SPECIFIER, property_Removed);
++                             
++                           axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), text_value_6, axutil_strlen(text_value_6));
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                           
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidRunning)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property running");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("running"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("running")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing running element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%srunning>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%srunning>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                    
++                               sprintf (text_value_7, AXIS2_PRINTF_INT32_FORMAT_SPECIFIER, property_Running);
++                             
++                           axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), text_value_7, axutil_strlen(text_value_7));
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                           
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidJobs)
++                   {
++                      
++                           /* no need to complain for minoccurs=0 element */
++                            
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("jobs"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("jobs")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     /*
++                      * Parsing Jobs array
++                      */
++                     if (property_Jobs != NULL)
++                     {
++                        
++
++                            sprintf(start_input_str, "<%s%sjobs",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                         start_input_str_len = axutil_strlen(start_input_str);
++
++                         sprintf(end_input_str, "</%s%sjobs>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                         end_input_str_len = axutil_strlen(end_input_str);
++
++                         count = property_Jobs->size();
++                         for(i = 0; i < count; i++)
++                         {
++                            AviaryCommon::JobSummary* element = (*property_Jobs)[i];
++
++                            if(NULL == element) 
++                            {
++                                continue;
++                            }
++
++                    
++                     
++                     /*
++                      * parsing jobs element
++                      */
++
++                    
++                     
++                            if(!element->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                            }
++                            element->serialize(current_node, parent_element,
++                                                                                 element->isParticle() || false, namespaces, next_ns_index);
++                            
++                            if(!element->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                            }
++                            
++                         }
++                     }
++                   
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for id by  Property Number 1
++             */
++            AviaryCommon::SubmissionID* WSF_CALL
++            AviaryCommon::SubmissionSummary::getProperty1()
++            {
++                return getId();
++            }
++
++            /**
++             * getter for id.
++             */
++            AviaryCommon::SubmissionID* WSF_CALL
++            AviaryCommon::SubmissionSummary::getId()
++             {
++                return property_Id;
++             }
++
++            /**
++             * setter for id
++             */
++            bool WSF_CALL
++            AviaryCommon::SubmissionSummary::setId(
++                    AviaryCommon::SubmissionID*  arg_Id)
++             {
++                
++
++                if(isValidId &&
++                        arg_Id == property_Id)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(NULL == arg_Id)
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"id is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetId();
++
++                
++                    if(NULL == arg_Id)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_Id = arg_Id;
++                        isValidId = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for id
++            */
++           bool WSF_CALL
++           AviaryCommon::SubmissionSummary::resetId()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++            
++                
++
++                if(property_Id != NULL)
++                {
++                   
++                   
++                         delete  property_Id;
++                     
++
++                   }
++
++                
++                
++                
++               isValidId = false; 
++               return true;
++           }
++
++           /**
++            * Check whether id is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::SubmissionSummary::isIdNil()
++           {
++               return !isValidId;
++           }
++
++           /**
++            * Set id to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::SubmissionSummary::setIdNil()
++           {
++               return resetId();
++           }
++
++           
++
++            /**
++             * Getter for status by  Property Number 2
++             */
++            AviaryCommon::Status* WSF_CALL
++            AviaryCommon::SubmissionSummary::getProperty2()
++            {
++                return getStatus();
++            }
++
++            /**
++             * getter for status.
++             */
++            AviaryCommon::Status* WSF_CALL
++            AviaryCommon::SubmissionSummary::getStatus()
++             {
++                return property_Status;
++             }
++
++            /**
++             * setter for status
++             */
++            bool WSF_CALL
++            AviaryCommon::SubmissionSummary::setStatus(
++                    AviaryCommon::Status*  arg_Status)
++             {
++                
++
++                if(isValidStatus &&
++                        arg_Status == property_Status)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(NULL == arg_Status)
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"status is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetStatus();
++
++                
++                    if(NULL == arg_Status)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_Status = arg_Status;
++                        isValidStatus = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for status
++            */
++           bool WSF_CALL
++           AviaryCommon::SubmissionSummary::resetStatus()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++            
++                
++
++                if(property_Status != NULL)
++                {
++                   
++                   
++                         delete  property_Status;
++                     
++
++                   }
++
++                
++                
++                
++               isValidStatus = false; 
++               return true;
++           }
++
++           /**
++            * Check whether status is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::SubmissionSummary::isStatusNil()
++           {
++               return !isValidStatus;
++           }
++
++           /**
++            * Set status to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::SubmissionSummary::setStatusNil()
++           {
++               return resetStatus();
++           }
++
++           
++
++            /**
++             * Getter for completed by  Property Number 3
++             */
++            int WSF_CALL
++            AviaryCommon::SubmissionSummary::getProperty3()
++            {
++                return getCompleted();
++            }
++
++            /**
++             * getter for completed.
++             */
++            int WSF_CALL
++            AviaryCommon::SubmissionSummary::getCompleted()
++             {
++                return property_Completed;
++             }
++
++            /**
++             * setter for completed
++             */
++            bool WSF_CALL
++            AviaryCommon::SubmissionSummary::setCompleted(
++                    const int  arg_Completed)
++             {
++                
++
++                if(isValidCompleted &&
++                        arg_Completed == property_Completed)
++                {
++                    
++                    return true;
++                }
++
++                
++
++                
++                resetCompleted();
++
++                
++                        property_Completed = arg_Completed;
++                        isValidCompleted = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for completed
++            */
++           bool WSF_CALL
++           AviaryCommon::SubmissionSummary::resetCompleted()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidCompleted = false; 
++               return true;
++           }
++
++           /**
++            * Check whether completed is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::SubmissionSummary::isCompletedNil()
++           {
++               return !isValidCompleted;
++           }
++
++           /**
++            * Set completed to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::SubmissionSummary::setCompletedNil()
++           {
++               return resetCompleted();
++           }
++
++           
++
++            /**
++             * Getter for held by  Property Number 4
++             */
++            int WSF_CALL
++            AviaryCommon::SubmissionSummary::getProperty4()
++            {
++                return getHeld();
++            }
++
++            /**
++             * getter for held.
++             */
++            int WSF_CALL
++            AviaryCommon::SubmissionSummary::getHeld()
++             {
++                return property_Held;
++             }
++
++            /**
++             * setter for held
++             */
++            bool WSF_CALL
++            AviaryCommon::SubmissionSummary::setHeld(
++                    const int  arg_Held)
++             {
++                
++
++                if(isValidHeld &&
++                        arg_Held == property_Held)
++                {
++                    
++                    return true;
++                }
++
++                
++
++                
++                resetHeld();
++
++                
++                        property_Held = arg_Held;
++                        isValidHeld = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for held
++            */
++           bool WSF_CALL
++           AviaryCommon::SubmissionSummary::resetHeld()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidHeld = false; 
++               return true;
++           }
++
++           /**
++            * Check whether held is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::SubmissionSummary::isHeldNil()
++           {
++               return !isValidHeld;
++           }
++
++           /**
++            * Set held to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::SubmissionSummary::setHeldNil()
++           {
++               return resetHeld();
++           }
++
++           
++
++            /**
++             * Getter for idle by  Property Number 5
++             */
++            int WSF_CALL
++            AviaryCommon::SubmissionSummary::getProperty5()
++            {
++                return getIdle();
++            }
++
++            /**
++             * getter for idle.
++             */
++            int WSF_CALL
++            AviaryCommon::SubmissionSummary::getIdle()
++             {
++                return property_Idle;
++             }
++
++            /**
++             * setter for idle
++             */
++            bool WSF_CALL
++            AviaryCommon::SubmissionSummary::setIdle(
++                    const int  arg_Idle)
++             {
++                
++
++                if(isValidIdle &&
++                        arg_Idle == property_Idle)
++                {
++                    
++                    return true;
++                }
++
++                
++
++                
++                resetIdle();
++
++                
++                        property_Idle = arg_Idle;
++                        isValidIdle = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for idle
++            */
++           bool WSF_CALL
++           AviaryCommon::SubmissionSummary::resetIdle()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidIdle = false; 
++               return true;
++           }
++
++           /**
++            * Check whether idle is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::SubmissionSummary::isIdleNil()
++           {
++               return !isValidIdle;
++           }
++
++           /**
++            * Set idle to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::SubmissionSummary::setIdleNil()
++           {
++               return resetIdle();
++           }
++
++           
++
++            /**
++             * Getter for removed by  Property Number 6
++             */
++            int WSF_CALL
++            AviaryCommon::SubmissionSummary::getProperty6()
++            {
++                return getRemoved();
++            }
++
++            /**
++             * getter for removed.
++             */
++            int WSF_CALL
++            AviaryCommon::SubmissionSummary::getRemoved()
++             {
++                return property_Removed;
++             }
++
++            /**
++             * setter for removed
++             */
++            bool WSF_CALL
++            AviaryCommon::SubmissionSummary::setRemoved(
++                    const int  arg_Removed)
++             {
++                
++
++                if(isValidRemoved &&
++                        arg_Removed == property_Removed)
++                {
++                    
++                    return true;
++                }
++
++                
++
++                
++                resetRemoved();
++
++                
++                        property_Removed = arg_Removed;
++                        isValidRemoved = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for removed
++            */
++           bool WSF_CALL
++           AviaryCommon::SubmissionSummary::resetRemoved()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidRemoved = false; 
++               return true;
++           }
++
++           /**
++            * Check whether removed is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::SubmissionSummary::isRemovedNil()
++           {
++               return !isValidRemoved;
++           }
++
++           /**
++            * Set removed to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::SubmissionSummary::setRemovedNil()
++           {
++               return resetRemoved();
++           }
++
++           
++
++            /**
++             * Getter for running by  Property Number 7
++             */
++            int WSF_CALL
++            AviaryCommon::SubmissionSummary::getProperty7()
++            {
++                return getRunning();
++            }
++
++            /**
++             * getter for running.
++             */
++            int WSF_CALL
++            AviaryCommon::SubmissionSummary::getRunning()
++             {
++                return property_Running;
++             }
++
++            /**
++             * setter for running
++             */
++            bool WSF_CALL
++            AviaryCommon::SubmissionSummary::setRunning(
++                    const int  arg_Running)
++             {
++                
++
++                if(isValidRunning &&
++                        arg_Running == property_Running)
++                {
++                    
++                    return true;
++                }
++
++                
++
++                
++                resetRunning();
++
++                
++                        property_Running = arg_Running;
++                        isValidRunning = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for running
++            */
++           bool WSF_CALL
++           AviaryCommon::SubmissionSummary::resetRunning()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidRunning = false; 
++               return true;
++           }
++
++           /**
++            * Check whether running is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::SubmissionSummary::isRunningNil()
++           {
++               return !isValidRunning;
++           }
++
++           /**
++            * Set running to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::SubmissionSummary::setRunningNil()
++           {
++               return resetRunning();
++           }
++
++           
++
++            /**
++             * Getter for jobs by  Property Number 8
++             */
++            std::vector<AviaryCommon::JobSummary*>* WSF_CALL
++            AviaryCommon::SubmissionSummary::getProperty8()
++            {
++                return getJobs();
++            }
++
++            /**
++             * getter for jobs.
++             */
++            std::vector<AviaryCommon::JobSummary*>* WSF_CALL
++            AviaryCommon::SubmissionSummary::getJobs()
++             {
++                return property_Jobs;
++             }
++
++            /**
++             * setter for jobs
++             */
++            bool WSF_CALL
++            AviaryCommon::SubmissionSummary::setJobs(
++                    std::vector<AviaryCommon::JobSummary*>*  arg_Jobs)
++             {
++                
++                 int size = 0;
++                 int i = 0;
++                 bool non_nil_exists = false;
++                
++
++                if(isValidJobs &&
++                        arg_Jobs == property_Jobs)
++                {
++                    
++                    return true;
++                }
++
++                
++                 size = arg_Jobs->size();
++                 
++                 if (size < 0)
++                 {
++                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"jobs has less than minOccurs(0)");
++                     return false;
++                 }
++                 for(i = 0; i < size; i ++ )
++                 {
++                     if(NULL != (*arg_Jobs)[i])
++                     {
++                         non_nil_exists = true;
++                         break;
++                     }
++                 }
++
++                 
++
++                
++                resetJobs();
++
++                
++                    if(NULL == arg_Jobs)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_Jobs = arg_Jobs;
++                        if(non_nil_exists)
++                        {
++                            isValidJobs = true;
++                        }
++                        
++                    
++                return true;
++             }
++
++            
++            /**
++             * Get ith element of jobs.
++             */
++            AviaryCommon::JobSummary* WSF_CALL
++            AviaryCommon::SubmissionSummary::getJobsAt(int i)
++            {
++                AviaryCommon::JobSummary* ret_val;
++                if(property_Jobs == NULL)
++                {
++                    return (AviaryCommon::JobSummary*)0;
++                }
++                ret_val =   (*property_Jobs)[i];
++                
++                    return ret_val;
++                  
++            }
++
++            /**
++             * Set the ith element of jobs.
++             */
++           bool WSF_CALL
++            AviaryCommon::SubmissionSummary::setJobsAt(int i,
++                    AviaryCommon::JobSummary* arg_Jobs)
++            {
++                 AviaryCommon::JobSummary* element;
++                int size = 0;
++
++                int non_nil_count;
++                bool non_nil_exists = false;
++
++                 
++
++                if( isValidJobs &&
++                    property_Jobs &&
++                  
++                    arg_Jobs == (*property_Jobs)[i])
++                  
++                 {
++                    
++                    return AXIS2_SUCCESS; 
++                }
++
++                   
++                     non_nil_exists = true;
++                  
++
++                if(property_Jobs == NULL)
++                {
++                    property_Jobs = new std::vector<AviaryCommon::JobSummary*>();
++                }
++                else{
++                /* check whether there already exist an element */
++                element = (*property_Jobs)[i];
++                }
++
++                
++                        if(NULL != element)
++                        {
++                          
++                          
++                          
++                                delete element;
++                             
++                        }
++                        
++                    
++                    if(!non_nil_exists)
++                    {
++                        
++                        isValidJobs = true;
++                        (*property_Jobs)[i]= NULL;
++                        
++                        return AXIS2_SUCCESS;
++                    }
++                
++                    (*property_Jobs)[i] = arg_Jobs;
++                  
++
++               isValidJobs = true;
++                
++                return AXIS2_SUCCESS;
++            }
++
++            /**
++             * Add to jobs.
++             */
++            bool WSF_CALL
++            AviaryCommon::SubmissionSummary::addJobs(
++                    AviaryCommon::JobSummary* arg_Jobs)
++             {
++
++                
++                    if( NULL == arg_Jobs
++                     )
++                    {
++                      
++                           return true; 
++                        
++                    }
++                  
++
++                if(property_Jobs == NULL)
++                {
++                    property_Jobs = new std::vector<AviaryCommon::JobSummary*>();
++                }
++              
++               property_Jobs->push_back(arg_Jobs);
++              
++                isValidJobs = true;
++                return true;
++             }
++
++            /**
++             * Get the size of the jobs array.
++             */
++            int WSF_CALL
++            AviaryCommon::SubmissionSummary::sizeofJobs()
++            {
++
++                if(property_Jobs == NULL)
++                {
++                    return 0;
++                }
++                return property_Jobs->size();
++            }
++
++            /**
++             * remove the ith element, same as set_nil_at.
++             */
++            bool WSF_CALL
++            AviaryCommon::SubmissionSummary::removeJobsAt(int i)
++            {
++                return setJobsNilAt(i);
++            }
++
++            
++
++           /**
++            * resetter for jobs
++            */
++           bool WSF_CALL
++           AviaryCommon::SubmissionSummary::resetJobs()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++                if (property_Jobs != NULL)
++                {
++                  std::vector<AviaryCommon::JobSummary*>::iterator it =  property_Jobs->begin();
++                  for( ; it <  property_Jobs->end() ; ++it)
++                  {
++                     AviaryCommon::JobSummary* element = *it;
++                
++            
++                
++
++                if(element != NULL)
++                {
++                   
++                   
++                         delete  element;
++                     
++
++                   }
++
++                
++                
++                
++               }
++
++             }
++                
++                    if(NULL != property_Jobs)
++                 delete property_Jobs;
++                
++               isValidJobs = false; 
++               return true;
++           }
++
++           /**
++            * Check whether jobs is nill
++            */
++           bool WSF_CALL
++           AviaryCommon::SubmissionSummary::isJobsNil()
++           {
++               return !isValidJobs;
++           }
++
++           /**
++            * Set jobs to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryCommon::SubmissionSummary::setJobsNil()
++           {
++               return resetJobs();
++           }
++
++           
++           /**
++            * Check whether jobs is nill at i
++            */
++           bool WSF_CALL
++           AviaryCommon::SubmissionSummary::isJobsNilAt(int i)
++           {
++               return (isValidJobs == false ||
++                       NULL == property_Jobs ||
++                     NULL == (*property_Jobs)[i]);
++            }
++
++           /**
++            * Set jobs to nil at i
++            */
++           bool WSF_CALL
++           AviaryCommon::SubmissionSummary::setJobsNilAt(int i)
++           {
++                int size = 0;
++                int j;
++                bool non_nil_exists = false;
++
++                int k = 0;
++
++                if(property_Jobs == NULL ||
++                            isValidJobs == false)
++                {
++                    
++                    non_nil_exists = false;
++                }
++                else
++                {
++                    size = property_Jobs->size();
++                    for(j = 0, k = 0; j < size; j ++ )
++                    {
++                        if(i == j) continue; 
++                        if(NULL != (*property_Jobs)[i])
++                        {
++                            k++;
++                            non_nil_exists = true;
++                            if( k >= 0)
++                            {
++                                break;
++                            }
++                        }
++                    }
++                }
++                
++
++                if( k < 0)
++                {
++                       WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "Size of the array of jobs is beinng set to be smaller than the specificed number of minOccurs(0)");
++                       return AXIS2_FAILURE;
++                }
++ 
++                if(property_Jobs == NULL)
++                {
++                    isValidJobs = false;
++                    
++                    return true;
++                }
++                 
++                 /* check whether there already exist an element */
++                 AviaryCommon::JobSummary* element = (*property_Jobs)[i];
++                if(NULL != element)
++                {
++                  
++                  
++                  
++                        delete element;
++                     
++                 }
++                 
++                    if(!non_nil_exists)
++                    {
++                        
++                        isValidJobs = false;
++                        (*property_Jobs)[i] = NULL;
++                        return AXIS2_SUCCESS;
++                    }
++                
++
++                
++                (*property_Jobs)[i] = NULL;
++                
++                return AXIS2_SUCCESS;
++
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/codegen/job/src/AviaryJob_ControlJob.cpp b/src/condor_contrib/aviary/codegen/job/src/AviaryJob_ControlJob.cpp
+new file mode 100644
+index 0000000..dc4a46a
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/job/src/AviaryJob_ControlJob.cpp
+@@ -0,0 +1,717 @@
++
++
++        /**
++         * ControlJob.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryJob_ControlJob.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryJob;
++        
++                /*
++                 * This type was generated from the piece of schema that had
++                 * name = ControlJob
++                 * Namespace URI = http://job.aviary.grid.redhat.com
++                 * Namespace Prefix = ns2
++                 */
++           AviaryJob::ControlJob::ControlJob()
++        {
++
++        
++                property_Id  = NULL;
++              
++            isValidId  = false;
++        
++                    property_Reason;
++                
++            isValidReason  = false;
++        
++        }
++
++       AviaryJob::ControlJob::ControlJob(AviaryCommon::JobID* arg_Id,std::string arg_Reason)
++        {
++             
++               property_Id  = NULL;
++             
++            isValidId  = true;
++            
++                 property_Reason;
++             
++            isValidReason  = true;
++            
++                    property_Id = arg_Id;
++            
++                    property_Reason = arg_Reason;
++            
++        }
++        AviaryJob::ControlJob::~ControlJob()
++        {
++
++        }
++
++        
++
++        bool WSF_CALL
++        AviaryJob::ControlJob::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++            axutil_qname_t *element_qname = NULL; 
++            
++               axiom_node_t *first_node = NULL;
++               bool is_early_node_valid = true;
++               axiom_node_t *current_node = NULL;
++               axiom_element_t *current_element = NULL;
++            
++              
++              while(parent && axiom_node_get_node_type(parent, Environment::getEnv()) != AXIOM_ELEMENT)
++              {
++                  parent = axiom_node_get_next_sibling(parent, Environment::getEnv());
++              }
++              if (NULL == parent)
++              {   
++                return AXIS2_FAILURE;
++              }
++              
++                      
++                      first_node = axiom_node_get_first_child(parent, Environment::getEnv());
++                      
++                    
++
++                     
++                     /*
++                      * building id element
++                      */
++                     
++                     
++                     
++                                   current_node = first_node;
++                                   is_early_node_valid = false;
++                                   
++                                   
++                                    while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                    {
++                                        current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                    }
++                                    if(current_node != NULL)
++                                    {
++                                        current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                        mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                    }
++                                   
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "id", NULL, NULL);
++                                 
++
++                           if (isParticle() ||  
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("id", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("id", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 AviaryCommon::JobID* element = new AviaryCommon::JobID();
++
++                                      status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                      if(AXIS2_FAILURE == status)
++                                      {
++                                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in building adb object for element id");
++                                      }
++                                      else
++                                      {
++                                          status = setId(element);
++                                      }
++                                    
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for id ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element id missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building reason element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "reason", NULL, NULL);
++                                 
++
++                           if ( 
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("reason", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("reason", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 
++                                      text_value = axiom_element_get_text(current_element, Environment::getEnv(), current_node);
++                                      if(text_value != NULL)
++                                      {
++                                            status = setReason(text_value);
++                                      }
++                                      
++                                      else
++                                      {
++                                            /*
++                                             * axis2_qname_t *qname = NULL;
++                                             * axiom_attribute_t *the_attri = NULL;
++                                             * 
++                                             * qname = axutil_qname_create(Environment::getEnv(), "nil", "http://www.w3.org/2001/XMLSchema-instance", "xsi");
++                                             * the_attri = axiom_element_get_attribute(current_element, Environment::getEnv(), qname);
++                                             */
++                                            /* currently thereis a bug in the axiom_element_get_attribute, so we have to go to this bad method */
++
++                                            axiom_attribute_t *the_attri = NULL;
++                                            axis2_char_t *attrib_text = NULL;
++                                            axutil_hash_t *attribute_hash = NULL;
++
++                                            attribute_hash = axiom_element_get_all_attributes(current_element, Environment::getEnv());
++
++                                            attrib_text = NULL;
++                                            if(attribute_hash)
++                                            {
++                                                 axutil_hash_index_t *hi;
++                                                 void *val;
++                                                 const void *key;
++                                        
++                                                 for (hi = axutil_hash_first(attribute_hash, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                                                 {
++                                                     axutil_hash_this(hi, &key, NULL, &val);
++                                                     
++                                                     if(strstr((axis2_char_t*)key, "nil|http://www.w3.org/2001/XMLSchema-instance"))
++                                                     {
++                                                         the_attri = (axiom_attribute_t*)val;
++                                                         break;
++                                                     }
++                                                 }
++                                            }
++
++                                            if(the_attri)
++                                            {
++                                                attrib_text = axiom_attribute_get_value(the_attri, Environment::getEnv());
++                                            }
++                                            else
++                                            {
++                                                /* this is hoping that attribute is stored in "http://www.w3.org/2001/XMLSchema-instance", this happnes when name is in default namespace */
++                                                attrib_text = axiom_element_get_attribute_value_by_name(current_element, Environment::getEnv(), "nil");
++                                            }
++
++                                            if(attrib_text && 0 == axutil_strcmp(attrib_text, "1"))
++                                            {
++                                                WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "NULL value is set to a non nillable element reason");
++                                                status = AXIS2_FAILURE;
++                                            }
++                                            else
++                                            {
++                                                /* after all, we found this is a empty string */
++                                                status = setReason("");
++                                            }
++                                      }
++                                      
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for reason ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element reason missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryJob::ControlJob::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryJob::ControlJob::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryJob::ControlJob::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++             axis2_char_t *string_to_stream;
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++                axiom_namespace_t *ns1 = NULL;
++
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                axis2_char_t *p_prefix = NULL;
++            
++                    axis2_char_t text_value_1[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++                    axis2_char_t *text_value_2;
++                    axis2_char_t *text_value_2_temp;
++                    
++               axis2_char_t *start_input_str = NULL;
++               axis2_char_t *end_input_str = NULL;
++               unsigned int start_input_str_len = 0;
++               unsigned int end_input_str_len = 0;
++            
++            
++               axiom_data_source_t *data_source = NULL;
++               axutil_stream_t *stream = NULL;
++
++            
++                    current_node = parent;
++                    data_source = (axiom_data_source_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                    if (!data_source)
++                        return NULL;
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv()); /* assume parent is of type data source */
++                    if (!stream)
++                        return NULL;
++                  
++            if(!parent_tag_closed)
++            {
++            
++              string_to_stream = ">"; 
++              axutil_stream_write(stream, Environment::getEnv(), string_to_stream, axutil_strlen(string_to_stream));
++              tag_closed = 1;
++            
++            }
++            
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidId)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property id");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("id"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("id")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing id element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sid",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":""); 
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sid>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                     
++                            if(!property_Id->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                            }
++                            property_Id->serialize(current_node, parent_element,
++                                                                                 property_Id->isParticle() || false, namespaces, next_ns_index);
++                            
++                            if(!property_Id->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                            }
++                            
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidReason)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property reason");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("reason"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("reason")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing reason element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sreason>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sreason>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                    
++                           text_value_2 = (axis2_char_t*)property_Reason.c_str();
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                           
++                            
++                           text_value_2_temp = axutil_xml_quote_string(Environment::getEnv(), text_value_2, true);
++                           if (text_value_2_temp)
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_2_temp, axutil_strlen(text_value_2_temp));
++                               AXIS2_FREE(Environment::getEnv()->allocator, text_value_2_temp);
++                           }
++                           else
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_2, axutil_strlen(text_value_2));
++                           }
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                           
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for id by  Property Number 1
++             */
++            AviaryCommon::JobID* WSF_CALL
++            AviaryJob::ControlJob::getProperty1()
++            {
++                return getId();
++            }
++
++            /**
++             * getter for id.
++             */
++            AviaryCommon::JobID* WSF_CALL
++            AviaryJob::ControlJob::getId()
++             {
++                return property_Id;
++             }
++
++            /**
++             * setter for id
++             */
++            bool WSF_CALL
++            AviaryJob::ControlJob::setId(
++                    AviaryCommon::JobID*  arg_Id)
++             {
++                
++
++                if(isValidId &&
++                        arg_Id == property_Id)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(NULL == arg_Id)
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"id is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetId();
++
++                
++                    if(NULL == arg_Id)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_Id = arg_Id;
++                        isValidId = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for id
++            */
++           bool WSF_CALL
++           AviaryJob::ControlJob::resetId()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++            
++                
++
++                if(property_Id != NULL)
++                {
++                   
++                   
++                         delete  property_Id;
++                     
++
++                   }
++
++                
++                
++                
++               isValidId = false; 
++               return true;
++           }
++
++           /**
++            * Check whether id is nill
++            */
++           bool WSF_CALL
++           AviaryJob::ControlJob::isIdNil()
++           {
++               return !isValidId;
++           }
++
++           /**
++            * Set id to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryJob::ControlJob::setIdNil()
++           {
++               return resetId();
++           }
++
++           
++
++            /**
++             * Getter for reason by  Property Number 2
++             */
++            std::string WSF_CALL
++            AviaryJob::ControlJob::getProperty2()
++            {
++                return getReason();
++            }
++
++            /**
++             * getter for reason.
++             */
++            std::string WSF_CALL
++            AviaryJob::ControlJob::getReason()
++             {
++                return property_Reason;
++             }
++
++            /**
++             * setter for reason
++             */
++            bool WSF_CALL
++            AviaryJob::ControlJob::setReason(
++                    const std::string  arg_Reason)
++             {
++                
++
++                if(isValidReason &&
++                        arg_Reason == property_Reason)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(arg_Reason.empty())
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"reason is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetReason();
++
++                
++                        property_Reason = std::string(arg_Reason.c_str());
++                        isValidReason = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for reason
++            */
++           bool WSF_CALL
++           AviaryJob::ControlJob::resetReason()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidReason = false; 
++               return true;
++           }
++
++           /**
++            * Check whether reason is nill
++            */
++           bool WSF_CALL
++           AviaryJob::ControlJob::isReasonNil()
++           {
++               return !isValidReason;
++           }
++
++           /**
++            * Set reason to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryJob::ControlJob::setReasonNil()
++           {
++               return resetReason();
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/codegen/job/src/AviaryJob_ControlJobResponse.cpp b/src/condor_contrib/aviary/codegen/job/src/AviaryJob_ControlJobResponse.cpp
+new file mode 100644
+index 0000000..92ac909
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/job/src/AviaryJob_ControlJobResponse.cpp
+@@ -0,0 +1,412 @@
++
++
++        /**
++         * ControlJobResponse.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryJob_ControlJobResponse.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryJob;
++        
++                /*
++                 * This type was generated from the piece of schema that had
++                 * name = ControlJobResponse
++                 * Namespace URI = http://job.aviary.grid.redhat.com
++                 * Namespace Prefix = ns2
++                 */
++           AviaryJob::ControlJobResponse::ControlJobResponse()
++        {
++
++        
++                property_Status  = NULL;
++              
++            isValidStatus  = false;
++        
++        }
++
++       AviaryJob::ControlJobResponse::ControlJobResponse(AviaryCommon::Status* arg_Status)
++        {
++             
++               property_Status  = NULL;
++             
++            isValidStatus  = true;
++            
++                    property_Status = arg_Status;
++            
++        }
++        AviaryJob::ControlJobResponse::~ControlJobResponse()
++        {
++
++        }
++
++        
++
++        bool WSF_CALL
++        AviaryJob::ControlJobResponse::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++            axutil_qname_t *element_qname = NULL; 
++            
++               axiom_node_t *first_node = NULL;
++               bool is_early_node_valid = true;
++               axiom_node_t *current_node = NULL;
++               axiom_element_t *current_element = NULL;
++            
++              
++              while(parent && axiom_node_get_node_type(parent, Environment::getEnv()) != AXIOM_ELEMENT)
++              {
++                  parent = axiom_node_get_next_sibling(parent, Environment::getEnv());
++              }
++              if (NULL == parent)
++              {   
++                return AXIS2_FAILURE;
++              }
++              
++                      
++                      first_node = axiom_node_get_first_child(parent, Environment::getEnv());
++                      
++                    
++
++                     
++                     /*
++                      * building status element
++                      */
++                     
++                     
++                     
++                                   current_node = first_node;
++                                   is_early_node_valid = false;
++                                   
++                                   
++                                    while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                    {
++                                        current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                    }
++                                    if(current_node != NULL)
++                                    {
++                                        current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                        mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                    }
++                                   
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "status", NULL, NULL);
++                                 
++
++                           if (isParticle() ||  
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("status", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("status", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 AviaryCommon::Status* element = new AviaryCommon::Status();
++
++                                      status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                      if(AXIS2_FAILURE == status)
++                                      {
++                                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in building adb object for element status");
++                                      }
++                                      else
++                                      {
++                                          status = setStatus(element);
++                                      }
++                                    
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for status ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element status missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryJob::ControlJobResponse::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryJob::ControlJobResponse::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryJob::ControlJobResponse::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++             axis2_char_t *string_to_stream;
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++                axiom_namespace_t *ns1 = NULL;
++
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                axis2_char_t *p_prefix = NULL;
++            
++                    axis2_char_t text_value_1[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++               axis2_char_t *start_input_str = NULL;
++               axis2_char_t *end_input_str = NULL;
++               unsigned int start_input_str_len = 0;
++               unsigned int end_input_str_len = 0;
++            
++            
++               axiom_data_source_t *data_source = NULL;
++               axutil_stream_t *stream = NULL;
++
++            
++                    current_node = parent;
++                    data_source = (axiom_data_source_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                    if (!data_source)
++                        return NULL;
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv()); /* assume parent is of type data source */
++                    if (!stream)
++                        return NULL;
++                  
++            if(!parent_tag_closed)
++            {
++            
++              string_to_stream = ">"; 
++              axutil_stream_write(stream, Environment::getEnv(), string_to_stream, axutil_strlen(string_to_stream));
++              tag_closed = 1;
++            
++            }
++            
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidStatus)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property status");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("status"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("status")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing status element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sstatus",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":""); 
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sstatus>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                     
++                            if(!property_Status->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                            }
++                            property_Status->serialize(current_node, parent_element,
++                                                                                 property_Status->isParticle() || false, namespaces, next_ns_index);
++                            
++                            if(!property_Status->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                            }
++                            
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for status by  Property Number 1
++             */
++            AviaryCommon::Status* WSF_CALL
++            AviaryJob::ControlJobResponse::getProperty1()
++            {
++                return getStatus();
++            }
++
++            /**
++             * getter for status.
++             */
++            AviaryCommon::Status* WSF_CALL
++            AviaryJob::ControlJobResponse::getStatus()
++             {
++                return property_Status;
++             }
++
++            /**
++             * setter for status
++             */
++            bool WSF_CALL
++            AviaryJob::ControlJobResponse::setStatus(
++                    AviaryCommon::Status*  arg_Status)
++             {
++                
++
++                if(isValidStatus &&
++                        arg_Status == property_Status)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(NULL == arg_Status)
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"status is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetStatus();
++
++                
++                    if(NULL == arg_Status)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_Status = arg_Status;
++                        isValidStatus = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for status
++            */
++           bool WSF_CALL
++           AviaryJob::ControlJobResponse::resetStatus()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++            
++                
++
++                if(property_Status != NULL)
++                {
++                   
++                   
++                         delete  property_Status;
++                     
++
++                   }
++
++                
++                
++                
++               isValidStatus = false; 
++               return true;
++           }
++
++           /**
++            * Check whether status is nill
++            */
++           bool WSF_CALL
++           AviaryJob::ControlJobResponse::isStatusNil()
++           {
++               return !isValidStatus;
++           }
++
++           /**
++            * Set status to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryJob::ControlJobResponse::setStatusNil()
++           {
++               return resetStatus();
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/codegen/job/src/AviaryJob_HoldJob.cpp b/src/condor_contrib/aviary/codegen/job/src/AviaryJob_HoldJob.cpp
+new file mode 100644
+index 0000000..66cd9b2
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/job/src/AviaryJob_HoldJob.cpp
+@@ -0,0 +1,451 @@
++
++
++        /**
++         * HoldJob.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryJob_HoldJob.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryJob;
++        
++               /*
++                * Implementation of the HoldJob|http://job.aviary.grid.redhat.com Element
++                */
++           AviaryJob::HoldJob::HoldJob()
++        {
++
++        
++            qname = NULL;
++        
++                property_HoldJob  = NULL;
++              
++            isValidHoldJob  = false;
++        
++                  qname =  axutil_qname_create (Environment::getEnv(),
++                        "HoldJob",
++                        "http://job.aviary.grid.redhat.com",
++                        NULL);
++                
++        }
++
++       AviaryJob::HoldJob::HoldJob(AviaryJob::ControlJob* arg_HoldJob)
++        {
++             
++                   qname = NULL;
++             
++               property_HoldJob  = NULL;
++             
++            isValidHoldJob  = true;
++            
++                 qname =  axutil_qname_create (Environment::getEnv(),
++                       "HoldJob",
++                       "http://job.aviary.grid.redhat.com",
++                       NULL);
++               
++                    property_HoldJob = arg_HoldJob;
++            
++        }
++        AviaryJob::HoldJob::~HoldJob()
++        {
++
++        }
++
++        
++
++        bool WSF_CALL
++        AviaryJob::HoldJob::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++            axutil_qname_t *element_qname = NULL; 
++            
++               axiom_node_t *first_node = NULL;
++               bool is_early_node_valid = true;
++               axiom_node_t *current_node = NULL;
++               axiom_element_t *current_element = NULL;
++            
++              
++              while(parent && axiom_node_get_node_type(parent, Environment::getEnv()) != AXIOM_ELEMENT)
++              {
++                  parent = axiom_node_get_next_sibling(parent, Environment::getEnv());
++              }
++              if (NULL == parent)
++              {   
++                return AXIS2_FAILURE;
++              }
++              
++
++                    current_element = (axiom_element_t *)axiom_node_get_data_element(parent, Environment::getEnv());
++                    mqname = axiom_element_get_qname(current_element, Environment::getEnv(), parent);
++                    if (axutil_qname_equals(mqname, Environment::getEnv(), this->qname))
++                    {
++                        
++                          first_node = parent;
++                          
++                    }
++                    else
++                    {
++                        WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI,
++                              "Failed in building adb object for HoldJob : "
++                              "Expected %s but returned %s",
++                              axutil_qname_to_string(qname, Environment::getEnv()),
++                              axutil_qname_to_string(mqname, Environment::getEnv()));
++                        
++                        return AXIS2_FAILURE;
++                    }
++                    
++
++                     
++                     /*
++                      * building HoldJob element
++                      */
++                     
++                     
++                     
++                                   current_node = first_node;
++                                   is_early_node_valid = false;
++                                   
++                                   
++                                    while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                    {
++                                        current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                    }
++                                    if(current_node != NULL)
++                                    {
++                                        current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                        mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                    }
++                                   
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "HoldJob", "http://job.aviary.grid.redhat.com", NULL);
++                                 
++
++                           if (isParticle() ||  
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname)))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 AviaryJob::ControlJob* element = new AviaryJob::ControlJob();
++
++                                      status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                      if(AXIS2_FAILURE == status)
++                                      {
++                                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in building adb object for element HoldJob");
++                                      }
++                                      else
++                                      {
++                                          status = setHoldJob(element);
++                                      }
++                                    
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for HoldJob ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element HoldJob missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryJob::HoldJob::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryJob::HoldJob::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryJob::HoldJob::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++                axiom_namespace_t *ns1 = NULL;
++
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                axis2_char_t *p_prefix = NULL;
++            
++                    axis2_char_t text_value_1[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++               axis2_char_t *start_input_str = NULL;
++               axis2_char_t *end_input_str = NULL;
++               unsigned int start_input_str_len = 0;
++               unsigned int end_input_str_len = 0;
++            
++            
++               axiom_data_source_t *data_source = NULL;
++               axutil_stream_t *stream = NULL;
++
++             
++                int next_ns_index_value = 0;
++             
++                    namespaces = axutil_hash_make(Environment::getEnv());
++                    next_ns_index = &next_ns_index_value;
++                     
++                           ns1 = axiom_namespace_create (Environment::getEnv(),
++                                             "http://job.aviary.grid.redhat.com",
++                                             "n"); 
++                           axutil_hash_set(namespaces, "http://job.aviary.grid.redhat.com", AXIS2_HASH_KEY_STRING, axutil_strdup(Environment::getEnv(), "n"));
++                       
++                     
++                    parent_element = axiom_element_create (Environment::getEnv(), NULL, "HoldJob", ns1 , &parent);
++                    
++                    
++                    axiom_element_set_namespace(parent_element, Environment::getEnv(), ns1, parent);
++
++
++            
++                    data_source = axiom_data_source_create(Environment::getEnv(), parent, &current_node);
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv());
++                  
++                       if(!(p_prefix = (axis2_char_t*)axutil_hash_get(namespaces, "http://job.aviary.grid.redhat.com", AXIS2_HASH_KEY_STRING)))
++                       {
++                           p_prefix = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof (axis2_char_t) * ADB_DEFAULT_NAMESPACE_PREFIX_LIMIT);
++                           sprintf(p_prefix, "n%d", (*next_ns_index)++);
++                           axutil_hash_set(namespaces, "http://job.aviary.grid.redhat.com", AXIS2_HASH_KEY_STRING, p_prefix);
++                           
++                           axiom_element_declare_namespace_assume_param_ownership(parent_element, Environment::getEnv(), axiom_namespace_create (Environment::getEnv(),
++                                            "http://job.aviary.grid.redhat.com", p_prefix));
++                       }
++                      
++
++                   if (!isValidHoldJob)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property HoldJob");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("HoldJob"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("HoldJob")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing HoldJob element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sHoldJob",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":""); 
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sHoldJob>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                    property_HoldJob->serialize(current_node, parent_element,
++                                                                                 property_HoldJob->isParticle() || true, namespaces, next_ns_index);
++                            
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                   if(namespaces)
++                   {
++                       axutil_hash_index_t *hi;
++                       void *val;
++                       for (hi = axutil_hash_first(namespaces, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                       {
++                           axutil_hash_this(hi, NULL, NULL, &val);
++                           AXIS2_FREE(Environment::getEnv()->allocator, val);
++                       }
++                       axutil_hash_free(namespaces, Environment::getEnv());
++                   }
++                
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for HoldJob by  Property Number 1
++             */
++            AviaryJob::ControlJob* WSF_CALL
++            AviaryJob::HoldJob::getProperty1()
++            {
++                return getHoldJob();
++            }
++
++            /**
++             * getter for HoldJob.
++             */
++            AviaryJob::ControlJob* WSF_CALL
++            AviaryJob::HoldJob::getHoldJob()
++             {
++                return property_HoldJob;
++             }
++
++            /**
++             * setter for HoldJob
++             */
++            bool WSF_CALL
++            AviaryJob::HoldJob::setHoldJob(
++                    AviaryJob::ControlJob*  arg_HoldJob)
++             {
++                
++
++                if(isValidHoldJob &&
++                        arg_HoldJob == property_HoldJob)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(NULL == arg_HoldJob)
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"HoldJob is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetHoldJob();
++
++                
++                    if(NULL == arg_HoldJob)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_HoldJob = arg_HoldJob;
++                        isValidHoldJob = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for HoldJob
++            */
++           bool WSF_CALL
++           AviaryJob::HoldJob::resetHoldJob()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++            
++                
++
++                if(property_HoldJob != NULL)
++                {
++                   
++                   
++                         delete  property_HoldJob;
++                     
++
++                   }
++
++                
++                
++                
++               isValidHoldJob = false; 
++               return true;
++           }
++
++           /**
++            * Check whether HoldJob is nill
++            */
++           bool WSF_CALL
++           AviaryJob::HoldJob::isHoldJobNil()
++           {
++               return !isValidHoldJob;
++           }
++
++           /**
++            * Set HoldJob to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryJob::HoldJob::setHoldJobNil()
++           {
++               return resetHoldJob();
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/codegen/job/src/AviaryJob_HoldJobResponse.cpp b/src/condor_contrib/aviary/codegen/job/src/AviaryJob_HoldJobResponse.cpp
+new file mode 100644
+index 0000000..1b80bc6
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/job/src/AviaryJob_HoldJobResponse.cpp
+@@ -0,0 +1,451 @@
++
++
++        /**
++         * HoldJobResponse.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryJob_HoldJobResponse.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryJob;
++        
++               /*
++                * Implementation of the HoldJobResponse|http://job.aviary.grid.redhat.com Element
++                */
++           AviaryJob::HoldJobResponse::HoldJobResponse()
++        {
++
++        
++            qname = NULL;
++        
++                property_HoldJobResponse  = NULL;
++              
++            isValidHoldJobResponse  = false;
++        
++                  qname =  axutil_qname_create (Environment::getEnv(),
++                        "HoldJobResponse",
++                        "http://job.aviary.grid.redhat.com",
++                        NULL);
++                
++        }
++
++       AviaryJob::HoldJobResponse::HoldJobResponse(AviaryJob::ControlJobResponse* arg_HoldJobResponse)
++        {
++             
++                   qname = NULL;
++             
++               property_HoldJobResponse  = NULL;
++             
++            isValidHoldJobResponse  = true;
++            
++                 qname =  axutil_qname_create (Environment::getEnv(),
++                       "HoldJobResponse",
++                       "http://job.aviary.grid.redhat.com",
++                       NULL);
++               
++                    property_HoldJobResponse = arg_HoldJobResponse;
++            
++        }
++        AviaryJob::HoldJobResponse::~HoldJobResponse()
++        {
++
++        }
++
++        
++
++        bool WSF_CALL
++        AviaryJob::HoldJobResponse::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++            axutil_qname_t *element_qname = NULL; 
++            
++               axiom_node_t *first_node = NULL;
++               bool is_early_node_valid = true;
++               axiom_node_t *current_node = NULL;
++               axiom_element_t *current_element = NULL;
++            
++              
++              while(parent && axiom_node_get_node_type(parent, Environment::getEnv()) != AXIOM_ELEMENT)
++              {
++                  parent = axiom_node_get_next_sibling(parent, Environment::getEnv());
++              }
++              if (NULL == parent)
++              {   
++                return AXIS2_FAILURE;
++              }
++              
++
++                    current_element = (axiom_element_t *)axiom_node_get_data_element(parent, Environment::getEnv());
++                    mqname = axiom_element_get_qname(current_element, Environment::getEnv(), parent);
++                    if (axutil_qname_equals(mqname, Environment::getEnv(), this->qname))
++                    {
++                        
++                          first_node = parent;
++                          
++                    }
++                    else
++                    {
++                        WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI,
++                              "Failed in building adb object for HoldJobResponse : "
++                              "Expected %s but returned %s",
++                              axutil_qname_to_string(qname, Environment::getEnv()),
++                              axutil_qname_to_string(mqname, Environment::getEnv()));
++                        
++                        return AXIS2_FAILURE;
++                    }
++                    
++
++                     
++                     /*
++                      * building HoldJobResponse element
++                      */
++                     
++                     
++                     
++                                   current_node = first_node;
++                                   is_early_node_valid = false;
++                                   
++                                   
++                                    while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                    {
++                                        current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                    }
++                                    if(current_node != NULL)
++                                    {
++                                        current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                        mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                    }
++                                   
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "HoldJobResponse", "http://job.aviary.grid.redhat.com", NULL);
++                                 
++
++                           if (isParticle() ||  
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname)))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 AviaryJob::ControlJobResponse* element = new AviaryJob::ControlJobResponse();
++
++                                      status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                      if(AXIS2_FAILURE == status)
++                                      {
++                                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in building adb object for element HoldJobResponse");
++                                      }
++                                      else
++                                      {
++                                          status = setHoldJobResponse(element);
++                                      }
++                                    
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for HoldJobResponse ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element HoldJobResponse missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryJob::HoldJobResponse::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryJob::HoldJobResponse::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryJob::HoldJobResponse::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++                axiom_namespace_t *ns1 = NULL;
++
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                axis2_char_t *p_prefix = NULL;
++            
++                    axis2_char_t text_value_1[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++               axis2_char_t *start_input_str = NULL;
++               axis2_char_t *end_input_str = NULL;
++               unsigned int start_input_str_len = 0;
++               unsigned int end_input_str_len = 0;
++            
++            
++               axiom_data_source_t *data_source = NULL;
++               axutil_stream_t *stream = NULL;
++
++             
++                int next_ns_index_value = 0;
++             
++                    namespaces = axutil_hash_make(Environment::getEnv());
++                    next_ns_index = &next_ns_index_value;
++                     
++                           ns1 = axiom_namespace_create (Environment::getEnv(),
++                                             "http://job.aviary.grid.redhat.com",
++                                             "n"); 
++                           axutil_hash_set(namespaces, "http://job.aviary.grid.redhat.com", AXIS2_HASH_KEY_STRING, axutil_strdup(Environment::getEnv(), "n"));
++                       
++                     
++                    parent_element = axiom_element_create (Environment::getEnv(), NULL, "HoldJobResponse", ns1 , &parent);
++                    
++                    
++                    axiom_element_set_namespace(parent_element, Environment::getEnv(), ns1, parent);
++
++
++            
++                    data_source = axiom_data_source_create(Environment::getEnv(), parent, &current_node);
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv());
++                  
++                       if(!(p_prefix = (axis2_char_t*)axutil_hash_get(namespaces, "http://job.aviary.grid.redhat.com", AXIS2_HASH_KEY_STRING)))
++                       {
++                           p_prefix = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof (axis2_char_t) * ADB_DEFAULT_NAMESPACE_PREFIX_LIMIT);
++                           sprintf(p_prefix, "n%d", (*next_ns_index)++);
++                           axutil_hash_set(namespaces, "http://job.aviary.grid.redhat.com", AXIS2_HASH_KEY_STRING, p_prefix);
++                           
++                           axiom_element_declare_namespace_assume_param_ownership(parent_element, Environment::getEnv(), axiom_namespace_create (Environment::getEnv(),
++                                            "http://job.aviary.grid.redhat.com", p_prefix));
++                       }
++                      
++
++                   if (!isValidHoldJobResponse)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property HoldJobResponse");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("HoldJobResponse"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("HoldJobResponse")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing HoldJobResponse element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sHoldJobResponse",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":""); 
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sHoldJobResponse>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                    property_HoldJobResponse->serialize(current_node, parent_element,
++                                                                                 property_HoldJobResponse->isParticle() || true, namespaces, next_ns_index);
++                            
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                   if(namespaces)
++                   {
++                       axutil_hash_index_t *hi;
++                       void *val;
++                       for (hi = axutil_hash_first(namespaces, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                       {
++                           axutil_hash_this(hi, NULL, NULL, &val);
++                           AXIS2_FREE(Environment::getEnv()->allocator, val);
++                       }
++                       axutil_hash_free(namespaces, Environment::getEnv());
++                   }
++                
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for HoldJobResponse by  Property Number 1
++             */
++            AviaryJob::ControlJobResponse* WSF_CALL
++            AviaryJob::HoldJobResponse::getProperty1()
++            {
++                return getHoldJobResponse();
++            }
++
++            /**
++             * getter for HoldJobResponse.
++             */
++            AviaryJob::ControlJobResponse* WSF_CALL
++            AviaryJob::HoldJobResponse::getHoldJobResponse()
++             {
++                return property_HoldJobResponse;
++             }
++
++            /**
++             * setter for HoldJobResponse
++             */
++            bool WSF_CALL
++            AviaryJob::HoldJobResponse::setHoldJobResponse(
++                    AviaryJob::ControlJobResponse*  arg_HoldJobResponse)
++             {
++                
++
++                if(isValidHoldJobResponse &&
++                        arg_HoldJobResponse == property_HoldJobResponse)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(NULL == arg_HoldJobResponse)
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"HoldJobResponse is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetHoldJobResponse();
++
++                
++                    if(NULL == arg_HoldJobResponse)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_HoldJobResponse = arg_HoldJobResponse;
++                        isValidHoldJobResponse = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for HoldJobResponse
++            */
++           bool WSF_CALL
++           AviaryJob::HoldJobResponse::resetHoldJobResponse()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++            
++                
++
++                if(property_HoldJobResponse != NULL)
++                {
++                   
++                   
++                         delete  property_HoldJobResponse;
++                     
++
++                   }
++
++                
++                
++                
++               isValidHoldJobResponse = false; 
++               return true;
++           }
++
++           /**
++            * Check whether HoldJobResponse is nill
++            */
++           bool WSF_CALL
++           AviaryJob::HoldJobResponse::isHoldJobResponseNil()
++           {
++               return !isValidHoldJobResponse;
++           }
++
++           /**
++            * Set HoldJobResponse to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryJob::HoldJobResponse::setHoldJobResponseNil()
++           {
++               return resetHoldJobResponse();
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/codegen/job/src/AviaryJob_ReleaseJob.cpp b/src/condor_contrib/aviary/codegen/job/src/AviaryJob_ReleaseJob.cpp
+new file mode 100644
+index 0000000..30d9977
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/job/src/AviaryJob_ReleaseJob.cpp
+@@ -0,0 +1,451 @@
++
++
++        /**
++         * ReleaseJob.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryJob_ReleaseJob.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryJob;
++        
++               /*
++                * Implementation of the ReleaseJob|http://job.aviary.grid.redhat.com Element
++                */
++           AviaryJob::ReleaseJob::ReleaseJob()
++        {
++
++        
++            qname = NULL;
++        
++                property_ReleaseJob  = NULL;
++              
++            isValidReleaseJob  = false;
++        
++                  qname =  axutil_qname_create (Environment::getEnv(),
++                        "ReleaseJob",
++                        "http://job.aviary.grid.redhat.com",
++                        NULL);
++                
++        }
++
++       AviaryJob::ReleaseJob::ReleaseJob(AviaryJob::ControlJob* arg_ReleaseJob)
++        {
++             
++                   qname = NULL;
++             
++               property_ReleaseJob  = NULL;
++             
++            isValidReleaseJob  = true;
++            
++                 qname =  axutil_qname_create (Environment::getEnv(),
++                       "ReleaseJob",
++                       "http://job.aviary.grid.redhat.com",
++                       NULL);
++               
++                    property_ReleaseJob = arg_ReleaseJob;
++            
++        }
++        AviaryJob::ReleaseJob::~ReleaseJob()
++        {
++
++        }
++
++        
++
++        bool WSF_CALL
++        AviaryJob::ReleaseJob::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++            axutil_qname_t *element_qname = NULL; 
++            
++               axiom_node_t *first_node = NULL;
++               bool is_early_node_valid = true;
++               axiom_node_t *current_node = NULL;
++               axiom_element_t *current_element = NULL;
++            
++              
++              while(parent && axiom_node_get_node_type(parent, Environment::getEnv()) != AXIOM_ELEMENT)
++              {
++                  parent = axiom_node_get_next_sibling(parent, Environment::getEnv());
++              }
++              if (NULL == parent)
++              {   
++                return AXIS2_FAILURE;
++              }
++              
++
++                    current_element = (axiom_element_t *)axiom_node_get_data_element(parent, Environment::getEnv());
++                    mqname = axiom_element_get_qname(current_element, Environment::getEnv(), parent);
++                    if (axutil_qname_equals(mqname, Environment::getEnv(), this->qname))
++                    {
++                        
++                          first_node = parent;
++                          
++                    }
++                    else
++                    {
++                        WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI,
++                              "Failed in building adb object for ReleaseJob : "
++                              "Expected %s but returned %s",
++                              axutil_qname_to_string(qname, Environment::getEnv()),
++                              axutil_qname_to_string(mqname, Environment::getEnv()));
++                        
++                        return AXIS2_FAILURE;
++                    }
++                    
++
++                     
++                     /*
++                      * building ReleaseJob element
++                      */
++                     
++                     
++                     
++                                   current_node = first_node;
++                                   is_early_node_valid = false;
++                                   
++                                   
++                                    while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                    {
++                                        current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                    }
++                                    if(current_node != NULL)
++                                    {
++                                        current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                        mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                    }
++                                   
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "ReleaseJob", "http://job.aviary.grid.redhat.com", NULL);
++                                 
++
++                           if (isParticle() ||  
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname)))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 AviaryJob::ControlJob* element = new AviaryJob::ControlJob();
++
++                                      status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                      if(AXIS2_FAILURE == status)
++                                      {
++                                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in building adb object for element ReleaseJob");
++                                      }
++                                      else
++                                      {
++                                          status = setReleaseJob(element);
++                                      }
++                                    
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for ReleaseJob ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element ReleaseJob missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryJob::ReleaseJob::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryJob::ReleaseJob::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryJob::ReleaseJob::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++                axiom_namespace_t *ns1 = NULL;
++
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                axis2_char_t *p_prefix = NULL;
++            
++                    axis2_char_t text_value_1[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++               axis2_char_t *start_input_str = NULL;
++               axis2_char_t *end_input_str = NULL;
++               unsigned int start_input_str_len = 0;
++               unsigned int end_input_str_len = 0;
++            
++            
++               axiom_data_source_t *data_source = NULL;
++               axutil_stream_t *stream = NULL;
++
++             
++                int next_ns_index_value = 0;
++             
++                    namespaces = axutil_hash_make(Environment::getEnv());
++                    next_ns_index = &next_ns_index_value;
++                     
++                           ns1 = axiom_namespace_create (Environment::getEnv(),
++                                             "http://job.aviary.grid.redhat.com",
++                                             "n"); 
++                           axutil_hash_set(namespaces, "http://job.aviary.grid.redhat.com", AXIS2_HASH_KEY_STRING, axutil_strdup(Environment::getEnv(), "n"));
++                       
++                     
++                    parent_element = axiom_element_create (Environment::getEnv(), NULL, "ReleaseJob", ns1 , &parent);
++                    
++                    
++                    axiom_element_set_namespace(parent_element, Environment::getEnv(), ns1, parent);
++
++
++            
++                    data_source = axiom_data_source_create(Environment::getEnv(), parent, &current_node);
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv());
++                  
++                       if(!(p_prefix = (axis2_char_t*)axutil_hash_get(namespaces, "http://job.aviary.grid.redhat.com", AXIS2_HASH_KEY_STRING)))
++                       {
++                           p_prefix = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof (axis2_char_t) * ADB_DEFAULT_NAMESPACE_PREFIX_LIMIT);
++                           sprintf(p_prefix, "n%d", (*next_ns_index)++);
++                           axutil_hash_set(namespaces, "http://job.aviary.grid.redhat.com", AXIS2_HASH_KEY_STRING, p_prefix);
++                           
++                           axiom_element_declare_namespace_assume_param_ownership(parent_element, Environment::getEnv(), axiom_namespace_create (Environment::getEnv(),
++                                            "http://job.aviary.grid.redhat.com", p_prefix));
++                       }
++                      
++
++                   if (!isValidReleaseJob)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property ReleaseJob");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("ReleaseJob"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("ReleaseJob")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing ReleaseJob element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sReleaseJob",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":""); 
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sReleaseJob>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                    property_ReleaseJob->serialize(current_node, parent_element,
++                                                                                 property_ReleaseJob->isParticle() || true, namespaces, next_ns_index);
++                            
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                   if(namespaces)
++                   {
++                       axutil_hash_index_t *hi;
++                       void *val;
++                       for (hi = axutil_hash_first(namespaces, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                       {
++                           axutil_hash_this(hi, NULL, NULL, &val);
++                           AXIS2_FREE(Environment::getEnv()->allocator, val);
++                       }
++                       axutil_hash_free(namespaces, Environment::getEnv());
++                   }
++                
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for ReleaseJob by  Property Number 1
++             */
++            AviaryJob::ControlJob* WSF_CALL
++            AviaryJob::ReleaseJob::getProperty1()
++            {
++                return getReleaseJob();
++            }
++
++            /**
++             * getter for ReleaseJob.
++             */
++            AviaryJob::ControlJob* WSF_CALL
++            AviaryJob::ReleaseJob::getReleaseJob()
++             {
++                return property_ReleaseJob;
++             }
++
++            /**
++             * setter for ReleaseJob
++             */
++            bool WSF_CALL
++            AviaryJob::ReleaseJob::setReleaseJob(
++                    AviaryJob::ControlJob*  arg_ReleaseJob)
++             {
++                
++
++                if(isValidReleaseJob &&
++                        arg_ReleaseJob == property_ReleaseJob)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(NULL == arg_ReleaseJob)
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"ReleaseJob is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetReleaseJob();
++
++                
++                    if(NULL == arg_ReleaseJob)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_ReleaseJob = arg_ReleaseJob;
++                        isValidReleaseJob = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for ReleaseJob
++            */
++           bool WSF_CALL
++           AviaryJob::ReleaseJob::resetReleaseJob()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++            
++                
++
++                if(property_ReleaseJob != NULL)
++                {
++                   
++                   
++                         delete  property_ReleaseJob;
++                     
++
++                   }
++
++                
++                
++                
++               isValidReleaseJob = false; 
++               return true;
++           }
++
++           /**
++            * Check whether ReleaseJob is nill
++            */
++           bool WSF_CALL
++           AviaryJob::ReleaseJob::isReleaseJobNil()
++           {
++               return !isValidReleaseJob;
++           }
++
++           /**
++            * Set ReleaseJob to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryJob::ReleaseJob::setReleaseJobNil()
++           {
++               return resetReleaseJob();
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/codegen/job/src/AviaryJob_ReleaseJobResponse.cpp b/src/condor_contrib/aviary/codegen/job/src/AviaryJob_ReleaseJobResponse.cpp
+new file mode 100644
+index 0000000..dfabed5
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/job/src/AviaryJob_ReleaseJobResponse.cpp
+@@ -0,0 +1,451 @@
++
++
++        /**
++         * ReleaseJobResponse.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryJob_ReleaseJobResponse.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryJob;
++        
++               /*
++                * Implementation of the ReleaseJobResponse|http://job.aviary.grid.redhat.com Element
++                */
++           AviaryJob::ReleaseJobResponse::ReleaseJobResponse()
++        {
++
++        
++            qname = NULL;
++        
++                property_ReleaseJobResponse  = NULL;
++              
++            isValidReleaseJobResponse  = false;
++        
++                  qname =  axutil_qname_create (Environment::getEnv(),
++                        "ReleaseJobResponse",
++                        "http://job.aviary.grid.redhat.com",
++                        NULL);
++                
++        }
++
++       AviaryJob::ReleaseJobResponse::ReleaseJobResponse(AviaryJob::ControlJobResponse* arg_ReleaseJobResponse)
++        {
++             
++                   qname = NULL;
++             
++               property_ReleaseJobResponse  = NULL;
++             
++            isValidReleaseJobResponse  = true;
++            
++                 qname =  axutil_qname_create (Environment::getEnv(),
++                       "ReleaseJobResponse",
++                       "http://job.aviary.grid.redhat.com",
++                       NULL);
++               
++                    property_ReleaseJobResponse = arg_ReleaseJobResponse;
++            
++        }
++        AviaryJob::ReleaseJobResponse::~ReleaseJobResponse()
++        {
++
++        }
++
++        
++
++        bool WSF_CALL
++        AviaryJob::ReleaseJobResponse::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++            axutil_qname_t *element_qname = NULL; 
++            
++               axiom_node_t *first_node = NULL;
++               bool is_early_node_valid = true;
++               axiom_node_t *current_node = NULL;
++               axiom_element_t *current_element = NULL;
++            
++              
++              while(parent && axiom_node_get_node_type(parent, Environment::getEnv()) != AXIOM_ELEMENT)
++              {
++                  parent = axiom_node_get_next_sibling(parent, Environment::getEnv());
++              }
++              if (NULL == parent)
++              {   
++                return AXIS2_FAILURE;
++              }
++              
++
++                    current_element = (axiom_element_t *)axiom_node_get_data_element(parent, Environment::getEnv());
++                    mqname = axiom_element_get_qname(current_element, Environment::getEnv(), parent);
++                    if (axutil_qname_equals(mqname, Environment::getEnv(), this->qname))
++                    {
++                        
++                          first_node = parent;
++                          
++                    }
++                    else
++                    {
++                        WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI,
++                              "Failed in building adb object for ReleaseJobResponse : "
++                              "Expected %s but returned %s",
++                              axutil_qname_to_string(qname, Environment::getEnv()),
++                              axutil_qname_to_string(mqname, Environment::getEnv()));
++                        
++                        return AXIS2_FAILURE;
++                    }
++                    
++
++                     
++                     /*
++                      * building ReleaseJobResponse element
++                      */
++                     
++                     
++                     
++                                   current_node = first_node;
++                                   is_early_node_valid = false;
++                                   
++                                   
++                                    while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                    {
++                                        current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                    }
++                                    if(current_node != NULL)
++                                    {
++                                        current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                        mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                    }
++                                   
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "ReleaseJobResponse", "http://job.aviary.grid.redhat.com", NULL);
++                                 
++
++                           if (isParticle() ||  
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname)))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 AviaryJob::ControlJobResponse* element = new AviaryJob::ControlJobResponse();
++
++                                      status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                      if(AXIS2_FAILURE == status)
++                                      {
++                                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in building adb object for element ReleaseJobResponse");
++                                      }
++                                      else
++                                      {
++                                          status = setReleaseJobResponse(element);
++                                      }
++                                    
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for ReleaseJobResponse ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element ReleaseJobResponse missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryJob::ReleaseJobResponse::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryJob::ReleaseJobResponse::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryJob::ReleaseJobResponse::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++                axiom_namespace_t *ns1 = NULL;
++
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                axis2_char_t *p_prefix = NULL;
++            
++                    axis2_char_t text_value_1[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++               axis2_char_t *start_input_str = NULL;
++               axis2_char_t *end_input_str = NULL;
++               unsigned int start_input_str_len = 0;
++               unsigned int end_input_str_len = 0;
++            
++            
++               axiom_data_source_t *data_source = NULL;
++               axutil_stream_t *stream = NULL;
++
++             
++                int next_ns_index_value = 0;
++             
++                    namespaces = axutil_hash_make(Environment::getEnv());
++                    next_ns_index = &next_ns_index_value;
++                     
++                           ns1 = axiom_namespace_create (Environment::getEnv(),
++                                             "http://job.aviary.grid.redhat.com",
++                                             "n"); 
++                           axutil_hash_set(namespaces, "http://job.aviary.grid.redhat.com", AXIS2_HASH_KEY_STRING, axutil_strdup(Environment::getEnv(), "n"));
++                       
++                     
++                    parent_element = axiom_element_create (Environment::getEnv(), NULL, "ReleaseJobResponse", ns1 , &parent);
++                    
++                    
++                    axiom_element_set_namespace(parent_element, Environment::getEnv(), ns1, parent);
++
++
++            
++                    data_source = axiom_data_source_create(Environment::getEnv(), parent, &current_node);
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv());
++                  
++                       if(!(p_prefix = (axis2_char_t*)axutil_hash_get(namespaces, "http://job.aviary.grid.redhat.com", AXIS2_HASH_KEY_STRING)))
++                       {
++                           p_prefix = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof (axis2_char_t) * ADB_DEFAULT_NAMESPACE_PREFIX_LIMIT);
++                           sprintf(p_prefix, "n%d", (*next_ns_index)++);
++                           axutil_hash_set(namespaces, "http://job.aviary.grid.redhat.com", AXIS2_HASH_KEY_STRING, p_prefix);
++                           
++                           axiom_element_declare_namespace_assume_param_ownership(parent_element, Environment::getEnv(), axiom_namespace_create (Environment::getEnv(),
++                                            "http://job.aviary.grid.redhat.com", p_prefix));
++                       }
++                      
++
++                   if (!isValidReleaseJobResponse)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property ReleaseJobResponse");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("ReleaseJobResponse"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("ReleaseJobResponse")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing ReleaseJobResponse element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sReleaseJobResponse",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":""); 
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sReleaseJobResponse>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                    property_ReleaseJobResponse->serialize(current_node, parent_element,
++                                                                                 property_ReleaseJobResponse->isParticle() || true, namespaces, next_ns_index);
++                            
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                   if(namespaces)
++                   {
++                       axutil_hash_index_t *hi;
++                       void *val;
++                       for (hi = axutil_hash_first(namespaces, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                       {
++                           axutil_hash_this(hi, NULL, NULL, &val);
++                           AXIS2_FREE(Environment::getEnv()->allocator, val);
++                       }
++                       axutil_hash_free(namespaces, Environment::getEnv());
++                   }
++                
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for ReleaseJobResponse by  Property Number 1
++             */
++            AviaryJob::ControlJobResponse* WSF_CALL
++            AviaryJob::ReleaseJobResponse::getProperty1()
++            {
++                return getReleaseJobResponse();
++            }
++
++            /**
++             * getter for ReleaseJobResponse.
++             */
++            AviaryJob::ControlJobResponse* WSF_CALL
++            AviaryJob::ReleaseJobResponse::getReleaseJobResponse()
++             {
++                return property_ReleaseJobResponse;
++             }
++
++            /**
++             * setter for ReleaseJobResponse
++             */
++            bool WSF_CALL
++            AviaryJob::ReleaseJobResponse::setReleaseJobResponse(
++                    AviaryJob::ControlJobResponse*  arg_ReleaseJobResponse)
++             {
++                
++
++                if(isValidReleaseJobResponse &&
++                        arg_ReleaseJobResponse == property_ReleaseJobResponse)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(NULL == arg_ReleaseJobResponse)
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"ReleaseJobResponse is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetReleaseJobResponse();
++
++                
++                    if(NULL == arg_ReleaseJobResponse)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_ReleaseJobResponse = arg_ReleaseJobResponse;
++                        isValidReleaseJobResponse = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for ReleaseJobResponse
++            */
++           bool WSF_CALL
++           AviaryJob::ReleaseJobResponse::resetReleaseJobResponse()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++            
++                
++
++                if(property_ReleaseJobResponse != NULL)
++                {
++                   
++                   
++                         delete  property_ReleaseJobResponse;
++                     
++
++                   }
++
++                
++                
++                
++               isValidReleaseJobResponse = false; 
++               return true;
++           }
++
++           /**
++            * Check whether ReleaseJobResponse is nill
++            */
++           bool WSF_CALL
++           AviaryJob::ReleaseJobResponse::isReleaseJobResponseNil()
++           {
++               return !isValidReleaseJobResponse;
++           }
++
++           /**
++            * Set ReleaseJobResponse to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryJob::ReleaseJobResponse::setReleaseJobResponseNil()
++           {
++               return resetReleaseJobResponse();
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/codegen/job/src/AviaryJob_RemoveJob.cpp b/src/condor_contrib/aviary/codegen/job/src/AviaryJob_RemoveJob.cpp
+new file mode 100644
+index 0000000..6b8f85e
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/job/src/AviaryJob_RemoveJob.cpp
+@@ -0,0 +1,451 @@
++
++
++        /**
++         * RemoveJob.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryJob_RemoveJob.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryJob;
++        
++               /*
++                * Implementation of the RemoveJob|http://job.aviary.grid.redhat.com Element
++                */
++           AviaryJob::RemoveJob::RemoveJob()
++        {
++
++        
++            qname = NULL;
++        
++                property_RemoveJob  = NULL;
++              
++            isValidRemoveJob  = false;
++        
++                  qname =  axutil_qname_create (Environment::getEnv(),
++                        "RemoveJob",
++                        "http://job.aviary.grid.redhat.com",
++                        NULL);
++                
++        }
++
++       AviaryJob::RemoveJob::RemoveJob(AviaryJob::ControlJob* arg_RemoveJob)
++        {
++             
++                   qname = NULL;
++             
++               property_RemoveJob  = NULL;
++             
++            isValidRemoveJob  = true;
++            
++                 qname =  axutil_qname_create (Environment::getEnv(),
++                       "RemoveJob",
++                       "http://job.aviary.grid.redhat.com",
++                       NULL);
++               
++                    property_RemoveJob = arg_RemoveJob;
++            
++        }
++        AviaryJob::RemoveJob::~RemoveJob()
++        {
++
++        }
++
++        
++
++        bool WSF_CALL
++        AviaryJob::RemoveJob::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++            axutil_qname_t *element_qname = NULL; 
++            
++               axiom_node_t *first_node = NULL;
++               bool is_early_node_valid = true;
++               axiom_node_t *current_node = NULL;
++               axiom_element_t *current_element = NULL;
++            
++              
++              while(parent && axiom_node_get_node_type(parent, Environment::getEnv()) != AXIOM_ELEMENT)
++              {
++                  parent = axiom_node_get_next_sibling(parent, Environment::getEnv());
++              }
++              if (NULL == parent)
++              {   
++                return AXIS2_FAILURE;
++              }
++              
++
++                    current_element = (axiom_element_t *)axiom_node_get_data_element(parent, Environment::getEnv());
++                    mqname = axiom_element_get_qname(current_element, Environment::getEnv(), parent);
++                    if (axutil_qname_equals(mqname, Environment::getEnv(), this->qname))
++                    {
++                        
++                          first_node = parent;
++                          
++                    }
++                    else
++                    {
++                        WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI,
++                              "Failed in building adb object for RemoveJob : "
++                              "Expected %s but returned %s",
++                              axutil_qname_to_string(qname, Environment::getEnv()),
++                              axutil_qname_to_string(mqname, Environment::getEnv()));
++                        
++                        return AXIS2_FAILURE;
++                    }
++                    
++
++                     
++                     /*
++                      * building RemoveJob element
++                      */
++                     
++                     
++                     
++                                   current_node = first_node;
++                                   is_early_node_valid = false;
++                                   
++                                   
++                                    while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                    {
++                                        current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                    }
++                                    if(current_node != NULL)
++                                    {
++                                        current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                        mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                    }
++                                   
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "RemoveJob", "http://job.aviary.grid.redhat.com", NULL);
++                                 
++
++                           if (isParticle() ||  
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname)))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 AviaryJob::ControlJob* element = new AviaryJob::ControlJob();
++
++                                      status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                      if(AXIS2_FAILURE == status)
++                                      {
++                                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in building adb object for element RemoveJob");
++                                      }
++                                      else
++                                      {
++                                          status = setRemoveJob(element);
++                                      }
++                                    
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for RemoveJob ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element RemoveJob missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryJob::RemoveJob::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryJob::RemoveJob::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryJob::RemoveJob::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++                axiom_namespace_t *ns1 = NULL;
++
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                axis2_char_t *p_prefix = NULL;
++            
++                    axis2_char_t text_value_1[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++               axis2_char_t *start_input_str = NULL;
++               axis2_char_t *end_input_str = NULL;
++               unsigned int start_input_str_len = 0;
++               unsigned int end_input_str_len = 0;
++            
++            
++               axiom_data_source_t *data_source = NULL;
++               axutil_stream_t *stream = NULL;
++
++             
++                int next_ns_index_value = 0;
++             
++                    namespaces = axutil_hash_make(Environment::getEnv());
++                    next_ns_index = &next_ns_index_value;
++                     
++                           ns1 = axiom_namespace_create (Environment::getEnv(),
++                                             "http://job.aviary.grid.redhat.com",
++                                             "n"); 
++                           axutil_hash_set(namespaces, "http://job.aviary.grid.redhat.com", AXIS2_HASH_KEY_STRING, axutil_strdup(Environment::getEnv(), "n"));
++                       
++                     
++                    parent_element = axiom_element_create (Environment::getEnv(), NULL, "RemoveJob", ns1 , &parent);
++                    
++                    
++                    axiom_element_set_namespace(parent_element, Environment::getEnv(), ns1, parent);
++
++
++            
++                    data_source = axiom_data_source_create(Environment::getEnv(), parent, &current_node);
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv());
++                  
++                       if(!(p_prefix = (axis2_char_t*)axutil_hash_get(namespaces, "http://job.aviary.grid.redhat.com", AXIS2_HASH_KEY_STRING)))
++                       {
++                           p_prefix = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof (axis2_char_t) * ADB_DEFAULT_NAMESPACE_PREFIX_LIMIT);
++                           sprintf(p_prefix, "n%d", (*next_ns_index)++);
++                           axutil_hash_set(namespaces, "http://job.aviary.grid.redhat.com", AXIS2_HASH_KEY_STRING, p_prefix);
++                           
++                           axiom_element_declare_namespace_assume_param_ownership(parent_element, Environment::getEnv(), axiom_namespace_create (Environment::getEnv(),
++                                            "http://job.aviary.grid.redhat.com", p_prefix));
++                       }
++                      
++
++                   if (!isValidRemoveJob)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property RemoveJob");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("RemoveJob"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("RemoveJob")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing RemoveJob element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sRemoveJob",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":""); 
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sRemoveJob>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                    property_RemoveJob->serialize(current_node, parent_element,
++                                                                                 property_RemoveJob->isParticle() || true, namespaces, next_ns_index);
++                            
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                   if(namespaces)
++                   {
++                       axutil_hash_index_t *hi;
++                       void *val;
++                       for (hi = axutil_hash_first(namespaces, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                       {
++                           axutil_hash_this(hi, NULL, NULL, &val);
++                           AXIS2_FREE(Environment::getEnv()->allocator, val);
++                       }
++                       axutil_hash_free(namespaces, Environment::getEnv());
++                   }
++                
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for RemoveJob by  Property Number 1
++             */
++            AviaryJob::ControlJob* WSF_CALL
++            AviaryJob::RemoveJob::getProperty1()
++            {
++                return getRemoveJob();
++            }
++
++            /**
++             * getter for RemoveJob.
++             */
++            AviaryJob::ControlJob* WSF_CALL
++            AviaryJob::RemoveJob::getRemoveJob()
++             {
++                return property_RemoveJob;
++             }
++
++            /**
++             * setter for RemoveJob
++             */
++            bool WSF_CALL
++            AviaryJob::RemoveJob::setRemoveJob(
++                    AviaryJob::ControlJob*  arg_RemoveJob)
++             {
++                
++
++                if(isValidRemoveJob &&
++                        arg_RemoveJob == property_RemoveJob)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(NULL == arg_RemoveJob)
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"RemoveJob is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetRemoveJob();
++
++                
++                    if(NULL == arg_RemoveJob)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_RemoveJob = arg_RemoveJob;
++                        isValidRemoveJob = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for RemoveJob
++            */
++           bool WSF_CALL
++           AviaryJob::RemoveJob::resetRemoveJob()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++            
++                
++
++                if(property_RemoveJob != NULL)
++                {
++                   
++                   
++                         delete  property_RemoveJob;
++                     
++
++                   }
++
++                
++                
++                
++               isValidRemoveJob = false; 
++               return true;
++           }
++
++           /**
++            * Check whether RemoveJob is nill
++            */
++           bool WSF_CALL
++           AviaryJob::RemoveJob::isRemoveJobNil()
++           {
++               return !isValidRemoveJob;
++           }
++
++           /**
++            * Set RemoveJob to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryJob::RemoveJob::setRemoveJobNil()
++           {
++               return resetRemoveJob();
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/codegen/job/src/AviaryJob_RemoveJobResponse.cpp b/src/condor_contrib/aviary/codegen/job/src/AviaryJob_RemoveJobResponse.cpp
+new file mode 100644
+index 0000000..952425c
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/job/src/AviaryJob_RemoveJobResponse.cpp
+@@ -0,0 +1,451 @@
++
++
++        /**
++         * RemoveJobResponse.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryJob_RemoveJobResponse.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryJob;
++        
++               /*
++                * Implementation of the RemoveJobResponse|http://job.aviary.grid.redhat.com Element
++                */
++           AviaryJob::RemoveJobResponse::RemoveJobResponse()
++        {
++
++        
++            qname = NULL;
++        
++                property_RemoveJobResponse  = NULL;
++              
++            isValidRemoveJobResponse  = false;
++        
++                  qname =  axutil_qname_create (Environment::getEnv(),
++                        "RemoveJobResponse",
++                        "http://job.aviary.grid.redhat.com",
++                        NULL);
++                
++        }
++
++       AviaryJob::RemoveJobResponse::RemoveJobResponse(AviaryJob::ControlJobResponse* arg_RemoveJobResponse)
++        {
++             
++                   qname = NULL;
++             
++               property_RemoveJobResponse  = NULL;
++             
++            isValidRemoveJobResponse  = true;
++            
++                 qname =  axutil_qname_create (Environment::getEnv(),
++                       "RemoveJobResponse",
++                       "http://job.aviary.grid.redhat.com",
++                       NULL);
++               
++                    property_RemoveJobResponse = arg_RemoveJobResponse;
++            
++        }
++        AviaryJob::RemoveJobResponse::~RemoveJobResponse()
++        {
++
++        }
++
++        
++
++        bool WSF_CALL
++        AviaryJob::RemoveJobResponse::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++            axutil_qname_t *element_qname = NULL; 
++            
++               axiom_node_t *first_node = NULL;
++               bool is_early_node_valid = true;
++               axiom_node_t *current_node = NULL;
++               axiom_element_t *current_element = NULL;
++            
++              
++              while(parent && axiom_node_get_node_type(parent, Environment::getEnv()) != AXIOM_ELEMENT)
++              {
++                  parent = axiom_node_get_next_sibling(parent, Environment::getEnv());
++              }
++              if (NULL == parent)
++              {   
++                return AXIS2_FAILURE;
++              }
++              
++
++                    current_element = (axiom_element_t *)axiom_node_get_data_element(parent, Environment::getEnv());
++                    mqname = axiom_element_get_qname(current_element, Environment::getEnv(), parent);
++                    if (axutil_qname_equals(mqname, Environment::getEnv(), this->qname))
++                    {
++                        
++                          first_node = parent;
++                          
++                    }
++                    else
++                    {
++                        WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI,
++                              "Failed in building adb object for RemoveJobResponse : "
++                              "Expected %s but returned %s",
++                              axutil_qname_to_string(qname, Environment::getEnv()),
++                              axutil_qname_to_string(mqname, Environment::getEnv()));
++                        
++                        return AXIS2_FAILURE;
++                    }
++                    
++
++                     
++                     /*
++                      * building RemoveJobResponse element
++                      */
++                     
++                     
++                     
++                                   current_node = first_node;
++                                   is_early_node_valid = false;
++                                   
++                                   
++                                    while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                    {
++                                        current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                    }
++                                    if(current_node != NULL)
++                                    {
++                                        current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                        mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                    }
++                                   
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "RemoveJobResponse", "http://job.aviary.grid.redhat.com", NULL);
++                                 
++
++                           if (isParticle() ||  
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname)))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 AviaryJob::ControlJobResponse* element = new AviaryJob::ControlJobResponse();
++
++                                      status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                      if(AXIS2_FAILURE == status)
++                                      {
++                                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in building adb object for element RemoveJobResponse");
++                                      }
++                                      else
++                                      {
++                                          status = setRemoveJobResponse(element);
++                                      }
++                                    
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for RemoveJobResponse ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element RemoveJobResponse missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryJob::RemoveJobResponse::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryJob::RemoveJobResponse::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryJob::RemoveJobResponse::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++                axiom_namespace_t *ns1 = NULL;
++
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                axis2_char_t *p_prefix = NULL;
++            
++                    axis2_char_t text_value_1[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++               axis2_char_t *start_input_str = NULL;
++               axis2_char_t *end_input_str = NULL;
++               unsigned int start_input_str_len = 0;
++               unsigned int end_input_str_len = 0;
++            
++            
++               axiom_data_source_t *data_source = NULL;
++               axutil_stream_t *stream = NULL;
++
++             
++                int next_ns_index_value = 0;
++             
++                    namespaces = axutil_hash_make(Environment::getEnv());
++                    next_ns_index = &next_ns_index_value;
++                     
++                           ns1 = axiom_namespace_create (Environment::getEnv(),
++                                             "http://job.aviary.grid.redhat.com",
++                                             "n"); 
++                           axutil_hash_set(namespaces, "http://job.aviary.grid.redhat.com", AXIS2_HASH_KEY_STRING, axutil_strdup(Environment::getEnv(), "n"));
++                       
++                     
++                    parent_element = axiom_element_create (Environment::getEnv(), NULL, "RemoveJobResponse", ns1 , &parent);
++                    
++                    
++                    axiom_element_set_namespace(parent_element, Environment::getEnv(), ns1, parent);
++
++
++            
++                    data_source = axiom_data_source_create(Environment::getEnv(), parent, &current_node);
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv());
++                  
++                       if(!(p_prefix = (axis2_char_t*)axutil_hash_get(namespaces, "http://job.aviary.grid.redhat.com", AXIS2_HASH_KEY_STRING)))
++                       {
++                           p_prefix = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof (axis2_char_t) * ADB_DEFAULT_NAMESPACE_PREFIX_LIMIT);
++                           sprintf(p_prefix, "n%d", (*next_ns_index)++);
++                           axutil_hash_set(namespaces, "http://job.aviary.grid.redhat.com", AXIS2_HASH_KEY_STRING, p_prefix);
++                           
++                           axiom_element_declare_namespace_assume_param_ownership(parent_element, Environment::getEnv(), axiom_namespace_create (Environment::getEnv(),
++                                            "http://job.aviary.grid.redhat.com", p_prefix));
++                       }
++                      
++
++                   if (!isValidRemoveJobResponse)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property RemoveJobResponse");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("RemoveJobResponse"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("RemoveJobResponse")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing RemoveJobResponse element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sRemoveJobResponse",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":""); 
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sRemoveJobResponse>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                    property_RemoveJobResponse->serialize(current_node, parent_element,
++                                                                                 property_RemoveJobResponse->isParticle() || true, namespaces, next_ns_index);
++                            
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                   if(namespaces)
++                   {
++                       axutil_hash_index_t *hi;
++                       void *val;
++                       for (hi = axutil_hash_first(namespaces, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                       {
++                           axutil_hash_this(hi, NULL, NULL, &val);
++                           AXIS2_FREE(Environment::getEnv()->allocator, val);
++                       }
++                       axutil_hash_free(namespaces, Environment::getEnv());
++                   }
++                
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for RemoveJobResponse by  Property Number 1
++             */
++            AviaryJob::ControlJobResponse* WSF_CALL
++            AviaryJob::RemoveJobResponse::getProperty1()
++            {
++                return getRemoveJobResponse();
++            }
++
++            /**
++             * getter for RemoveJobResponse.
++             */
++            AviaryJob::ControlJobResponse* WSF_CALL
++            AviaryJob::RemoveJobResponse::getRemoveJobResponse()
++             {
++                return property_RemoveJobResponse;
++             }
++
++            /**
++             * setter for RemoveJobResponse
++             */
++            bool WSF_CALL
++            AviaryJob::RemoveJobResponse::setRemoveJobResponse(
++                    AviaryJob::ControlJobResponse*  arg_RemoveJobResponse)
++             {
++                
++
++                if(isValidRemoveJobResponse &&
++                        arg_RemoveJobResponse == property_RemoveJobResponse)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(NULL == arg_RemoveJobResponse)
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"RemoveJobResponse is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetRemoveJobResponse();
++
++                
++                    if(NULL == arg_RemoveJobResponse)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_RemoveJobResponse = arg_RemoveJobResponse;
++                        isValidRemoveJobResponse = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for RemoveJobResponse
++            */
++           bool WSF_CALL
++           AviaryJob::RemoveJobResponse::resetRemoveJobResponse()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++            
++                
++
++                if(property_RemoveJobResponse != NULL)
++                {
++                   
++                   
++                         delete  property_RemoveJobResponse;
++                     
++
++                   }
++
++                
++                
++                
++               isValidRemoveJobResponse = false; 
++               return true;
++           }
++
++           /**
++            * Check whether RemoveJobResponse is nill
++            */
++           bool WSF_CALL
++           AviaryJob::RemoveJobResponse::isRemoveJobResponseNil()
++           {
++               return !isValidRemoveJobResponse;
++           }
++
++           /**
++            * Set RemoveJobResponse to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryJob::RemoveJobResponse::setRemoveJobResponseNil()
++           {
++               return resetRemoveJobResponse();
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/codegen/job/src/AviaryJob_SetJobAttribute.cpp b/src/condor_contrib/aviary/codegen/job/src/AviaryJob_SetJobAttribute.cpp
+new file mode 100644
+index 0000000..5efdb33
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/job/src/AviaryJob_SetJobAttribute.cpp
+@@ -0,0 +1,720 @@
++
++
++        /**
++         * SetJobAttribute.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryJob_SetJobAttribute.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryJob;
++        
++               /*
++                * Implementation of the SetJobAttribute|http://job.aviary.grid.redhat.com Element
++                */
++           AviaryJob::SetJobAttribute::SetJobAttribute()
++        {
++
++        
++            qname = NULL;
++        
++                property_Id  = NULL;
++              
++            isValidId  = false;
++        
++                property_Attribute  = NULL;
++              
++            isValidAttribute  = false;
++        
++                  qname =  axutil_qname_create (Environment::getEnv(),
++                        "SetJobAttribute",
++                        "http://job.aviary.grid.redhat.com",
++                        NULL);
++                
++        }
++
++       AviaryJob::SetJobAttribute::SetJobAttribute(AviaryCommon::JobID* arg_Id,AviaryCommon::Attribute* arg_Attribute)
++        {
++             
++                   qname = NULL;
++             
++               property_Id  = NULL;
++             
++            isValidId  = true;
++            
++               property_Attribute  = NULL;
++             
++            isValidAttribute  = true;
++            
++                 qname =  axutil_qname_create (Environment::getEnv(),
++                       "SetJobAttribute",
++                       "http://job.aviary.grid.redhat.com",
++                       NULL);
++               
++                    property_Id = arg_Id;
++            
++                    property_Attribute = arg_Attribute;
++            
++        }
++        AviaryJob::SetJobAttribute::~SetJobAttribute()
++        {
++
++        }
++
++        
++
++        bool WSF_CALL
++        AviaryJob::SetJobAttribute::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++            axutil_qname_t *element_qname = NULL; 
++            
++               axiom_node_t *first_node = NULL;
++               bool is_early_node_valid = true;
++               axiom_node_t *current_node = NULL;
++               axiom_element_t *current_element = NULL;
++            
++              
++              while(parent && axiom_node_get_node_type(parent, Environment::getEnv()) != AXIOM_ELEMENT)
++              {
++                  parent = axiom_node_get_next_sibling(parent, Environment::getEnv());
++              }
++              if (NULL == parent)
++              {   
++                return AXIS2_FAILURE;
++              }
++              
++
++                    current_element = (axiom_element_t *)axiom_node_get_data_element(parent, Environment::getEnv());
++                    mqname = axiom_element_get_qname(current_element, Environment::getEnv(), parent);
++                    if (axutil_qname_equals(mqname, Environment::getEnv(), this->qname))
++                    {
++                        
++                          first_node = axiom_node_get_first_child(parent, Environment::getEnv());
++                          
++                    }
++                    else
++                    {
++                        WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI,
++                              "Failed in building adb object for SetJobAttribute : "
++                              "Expected %s but returned %s",
++                              axutil_qname_to_string(qname, Environment::getEnv()),
++                              axutil_qname_to_string(mqname, Environment::getEnv()));
++                        
++                        return AXIS2_FAILURE;
++                    }
++                    
++
++                     
++                     /*
++                      * building id element
++                      */
++                     
++                     
++                     
++                                   current_node = first_node;
++                                   is_early_node_valid = false;
++                                   
++                                   
++                                    while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                    {
++                                        current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                    }
++                                    if(current_node != NULL)
++                                    {
++                                        current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                        mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                    }
++                                   
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "id", NULL, NULL);
++                                 
++
++                           if (isParticle() ||  
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("id", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("id", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 AviaryCommon::JobID* element = new AviaryCommon::JobID();
++
++                                      status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                      if(AXIS2_FAILURE == status)
++                                      {
++                                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in building adb object for element id");
++                                      }
++                                      else
++                                      {
++                                          status = setId(element);
++                                      }
++                                    
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for id ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element id missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building attribute element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "attribute", NULL, NULL);
++                                 
++
++                           if (isParticle() ||  
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("attribute", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("attribute", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 AviaryCommon::Attribute* element = new AviaryCommon::Attribute();
++
++                                      status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                      if(AXIS2_FAILURE == status)
++                                      {
++                                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in building adb object for element attribute");
++                                      }
++                                      else
++                                      {
++                                          status = setAttribute(element);
++                                      }
++                                    
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for attribute ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element attribute missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryJob::SetJobAttribute::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryJob::SetJobAttribute::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryJob::SetJobAttribute::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++                axiom_namespace_t *ns1 = NULL;
++
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                axis2_char_t *p_prefix = NULL;
++            
++                    axis2_char_t text_value_1[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++                    axis2_char_t text_value_2[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++               axis2_char_t *start_input_str = NULL;
++               axis2_char_t *end_input_str = NULL;
++               unsigned int start_input_str_len = 0;
++               unsigned int end_input_str_len = 0;
++            
++            
++               axiom_data_source_t *data_source = NULL;
++               axutil_stream_t *stream = NULL;
++
++             
++                int next_ns_index_value = 0;
++             
++                    namespaces = axutil_hash_make(Environment::getEnv());
++                    next_ns_index = &next_ns_index_value;
++                     
++                           ns1 = axiom_namespace_create (Environment::getEnv(),
++                                             "http://job.aviary.grid.redhat.com",
++                                             "n"); 
++                           axutil_hash_set(namespaces, "http://job.aviary.grid.redhat.com", AXIS2_HASH_KEY_STRING, axutil_strdup(Environment::getEnv(), "n"));
++                       
++                     
++                    parent_element = axiom_element_create (Environment::getEnv(), NULL, "SetJobAttribute", ns1 , &parent);
++                    
++                    
++                    axiom_element_set_namespace(parent_element, Environment::getEnv(), ns1, parent);
++
++
++            
++                    data_source = axiom_data_source_create(Environment::getEnv(), parent, &current_node);
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv());
++                  
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidId)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property id");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("id"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("id")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing id element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sid",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":""); 
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sid>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                     
++                            if(!property_Id->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                            }
++                            property_Id->serialize(current_node, parent_element,
++                                                                                 property_Id->isParticle() || false, namespaces, next_ns_index);
++                            
++                            if(!property_Id->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                            }
++                            
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidAttribute)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property attribute");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("attribute"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("attribute")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing attribute element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sattribute",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":""); 
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sattribute>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                     
++                            if(!property_Attribute->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                            }
++                            property_Attribute->serialize(current_node, parent_element,
++                                                                                 property_Attribute->isParticle() || false, namespaces, next_ns_index);
++                            
++                            if(!property_Attribute->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                            }
++                            
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                   if(namespaces)
++                   {
++                       axutil_hash_index_t *hi;
++                       void *val;
++                       for (hi = axutil_hash_first(namespaces, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                       {
++                           axutil_hash_this(hi, NULL, NULL, &val);
++                           AXIS2_FREE(Environment::getEnv()->allocator, val);
++                       }
++                       axutil_hash_free(namespaces, Environment::getEnv());
++                   }
++                
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for id by  Property Number 1
++             */
++            AviaryCommon::JobID* WSF_CALL
++            AviaryJob::SetJobAttribute::getProperty1()
++            {
++                return getId();
++            }
++
++            /**
++             * getter for id.
++             */
++            AviaryCommon::JobID* WSF_CALL
++            AviaryJob::SetJobAttribute::getId()
++             {
++                return property_Id;
++             }
++
++            /**
++             * setter for id
++             */
++            bool WSF_CALL
++            AviaryJob::SetJobAttribute::setId(
++                    AviaryCommon::JobID*  arg_Id)
++             {
++                
++
++                if(isValidId &&
++                        arg_Id == property_Id)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(NULL == arg_Id)
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"id is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetId();
++
++                
++                    if(NULL == arg_Id)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_Id = arg_Id;
++                        isValidId = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for id
++            */
++           bool WSF_CALL
++           AviaryJob::SetJobAttribute::resetId()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++            
++                
++
++                if(property_Id != NULL)
++                {
++                   
++                   
++                         delete  property_Id;
++                     
++
++                   }
++
++                
++                
++                
++               isValidId = false; 
++               return true;
++           }
++
++           /**
++            * Check whether id is nill
++            */
++           bool WSF_CALL
++           AviaryJob::SetJobAttribute::isIdNil()
++           {
++               return !isValidId;
++           }
++
++           /**
++            * Set id to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryJob::SetJobAttribute::setIdNil()
++           {
++               return resetId();
++           }
++
++           
++
++            /**
++             * Getter for attribute by  Property Number 2
++             */
++            AviaryCommon::Attribute* WSF_CALL
++            AviaryJob::SetJobAttribute::getProperty2()
++            {
++                return getAttribute();
++            }
++
++            /**
++             * getter for attribute.
++             */
++            AviaryCommon::Attribute* WSF_CALL
++            AviaryJob::SetJobAttribute::getAttribute()
++             {
++                return property_Attribute;
++             }
++
++            /**
++             * setter for attribute
++             */
++            bool WSF_CALL
++            AviaryJob::SetJobAttribute::setAttribute(
++                    AviaryCommon::Attribute*  arg_Attribute)
++             {
++                
++
++                if(isValidAttribute &&
++                        arg_Attribute == property_Attribute)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(NULL == arg_Attribute)
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"attribute is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetAttribute();
++
++                
++                    if(NULL == arg_Attribute)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_Attribute = arg_Attribute;
++                        isValidAttribute = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for attribute
++            */
++           bool WSF_CALL
++           AviaryJob::SetJobAttribute::resetAttribute()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++            
++                
++
++                if(property_Attribute != NULL)
++                {
++                   
++                   
++                         delete  property_Attribute;
++                     
++
++                   }
++
++                
++                
++                
++               isValidAttribute = false; 
++               return true;
++           }
++
++           /**
++            * Check whether attribute is nill
++            */
++           bool WSF_CALL
++           AviaryJob::SetJobAttribute::isAttributeNil()
++           {
++               return !isValidAttribute;
++           }
++
++           /**
++            * Set attribute to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryJob::SetJobAttribute::setAttributeNil()
++           {
++               return resetAttribute();
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/codegen/job/src/AviaryJob_SetJobAttributeResponse.cpp b/src/condor_contrib/aviary/codegen/job/src/AviaryJob_SetJobAttributeResponse.cpp
+new file mode 100644
+index 0000000..a8bc9e7
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/job/src/AviaryJob_SetJobAttributeResponse.cpp
+@@ -0,0 +1,451 @@
++
++
++        /**
++         * SetJobAttributeResponse.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryJob_SetJobAttributeResponse.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryJob;
++        
++               /*
++                * Implementation of the SetJobAttributeResponse|http://job.aviary.grid.redhat.com Element
++                */
++           AviaryJob::SetJobAttributeResponse::SetJobAttributeResponse()
++        {
++
++        
++            qname = NULL;
++        
++                property_SetJobAttributeResponse  = NULL;
++              
++            isValidSetJobAttributeResponse  = false;
++        
++                  qname =  axutil_qname_create (Environment::getEnv(),
++                        "SetJobAttributeResponse",
++                        "http://job.aviary.grid.redhat.com",
++                        NULL);
++                
++        }
++
++       AviaryJob::SetJobAttributeResponse::SetJobAttributeResponse(AviaryJob::ControlJobResponse* arg_SetJobAttributeResponse)
++        {
++             
++                   qname = NULL;
++             
++               property_SetJobAttributeResponse  = NULL;
++             
++            isValidSetJobAttributeResponse  = true;
++            
++                 qname =  axutil_qname_create (Environment::getEnv(),
++                       "SetJobAttributeResponse",
++                       "http://job.aviary.grid.redhat.com",
++                       NULL);
++               
++                    property_SetJobAttributeResponse = arg_SetJobAttributeResponse;
++            
++        }
++        AviaryJob::SetJobAttributeResponse::~SetJobAttributeResponse()
++        {
++
++        }
++
++        
++
++        bool WSF_CALL
++        AviaryJob::SetJobAttributeResponse::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++            axutil_qname_t *element_qname = NULL; 
++            
++               axiom_node_t *first_node = NULL;
++               bool is_early_node_valid = true;
++               axiom_node_t *current_node = NULL;
++               axiom_element_t *current_element = NULL;
++            
++              
++              while(parent && axiom_node_get_node_type(parent, Environment::getEnv()) != AXIOM_ELEMENT)
++              {
++                  parent = axiom_node_get_next_sibling(parent, Environment::getEnv());
++              }
++              if (NULL == parent)
++              {   
++                return AXIS2_FAILURE;
++              }
++              
++
++                    current_element = (axiom_element_t *)axiom_node_get_data_element(parent, Environment::getEnv());
++                    mqname = axiom_element_get_qname(current_element, Environment::getEnv(), parent);
++                    if (axutil_qname_equals(mqname, Environment::getEnv(), this->qname))
++                    {
++                        
++                          first_node = parent;
++                          
++                    }
++                    else
++                    {
++                        WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI,
++                              "Failed in building adb object for SetJobAttributeResponse : "
++                              "Expected %s but returned %s",
++                              axutil_qname_to_string(qname, Environment::getEnv()),
++                              axutil_qname_to_string(mqname, Environment::getEnv()));
++                        
++                        return AXIS2_FAILURE;
++                    }
++                    
++
++                     
++                     /*
++                      * building SetJobAttributeResponse element
++                      */
++                     
++                     
++                     
++                                   current_node = first_node;
++                                   is_early_node_valid = false;
++                                   
++                                   
++                                    while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                    {
++                                        current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                    }
++                                    if(current_node != NULL)
++                                    {
++                                        current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                        mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                    }
++                                   
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "SetJobAttributeResponse", "http://job.aviary.grid.redhat.com", NULL);
++                                 
++
++                           if (isParticle() ||  
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname)))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 AviaryJob::ControlJobResponse* element = new AviaryJob::ControlJobResponse();
++
++                                      status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                      if(AXIS2_FAILURE == status)
++                                      {
++                                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in building adb object for element SetJobAttributeResponse");
++                                      }
++                                      else
++                                      {
++                                          status = setSetJobAttributeResponse(element);
++                                      }
++                                    
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for SetJobAttributeResponse ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element SetJobAttributeResponse missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryJob::SetJobAttributeResponse::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryJob::SetJobAttributeResponse::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryJob::SetJobAttributeResponse::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++                axiom_namespace_t *ns1 = NULL;
++
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                axis2_char_t *p_prefix = NULL;
++            
++                    axis2_char_t text_value_1[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++               axis2_char_t *start_input_str = NULL;
++               axis2_char_t *end_input_str = NULL;
++               unsigned int start_input_str_len = 0;
++               unsigned int end_input_str_len = 0;
++            
++            
++               axiom_data_source_t *data_source = NULL;
++               axutil_stream_t *stream = NULL;
++
++             
++                int next_ns_index_value = 0;
++             
++                    namespaces = axutil_hash_make(Environment::getEnv());
++                    next_ns_index = &next_ns_index_value;
++                     
++                           ns1 = axiom_namespace_create (Environment::getEnv(),
++                                             "http://job.aviary.grid.redhat.com",
++                                             "n"); 
++                           axutil_hash_set(namespaces, "http://job.aviary.grid.redhat.com", AXIS2_HASH_KEY_STRING, axutil_strdup(Environment::getEnv(), "n"));
++                       
++                     
++                    parent_element = axiom_element_create (Environment::getEnv(), NULL, "SetJobAttributeResponse", ns1 , &parent);
++                    
++                    
++                    axiom_element_set_namespace(parent_element, Environment::getEnv(), ns1, parent);
++
++
++            
++                    data_source = axiom_data_source_create(Environment::getEnv(), parent, &current_node);
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv());
++                  
++                       if(!(p_prefix = (axis2_char_t*)axutil_hash_get(namespaces, "http://job.aviary.grid.redhat.com", AXIS2_HASH_KEY_STRING)))
++                       {
++                           p_prefix = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof (axis2_char_t) * ADB_DEFAULT_NAMESPACE_PREFIX_LIMIT);
++                           sprintf(p_prefix, "n%d", (*next_ns_index)++);
++                           axutil_hash_set(namespaces, "http://job.aviary.grid.redhat.com", AXIS2_HASH_KEY_STRING, p_prefix);
++                           
++                           axiom_element_declare_namespace_assume_param_ownership(parent_element, Environment::getEnv(), axiom_namespace_create (Environment::getEnv(),
++                                            "http://job.aviary.grid.redhat.com", p_prefix));
++                       }
++                      
++
++                   if (!isValidSetJobAttributeResponse)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property SetJobAttributeResponse");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("SetJobAttributeResponse"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("SetJobAttributeResponse")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing SetJobAttributeResponse element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sSetJobAttributeResponse",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":""); 
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sSetJobAttributeResponse>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                    property_SetJobAttributeResponse->serialize(current_node, parent_element,
++                                                                                 property_SetJobAttributeResponse->isParticle() || true, namespaces, next_ns_index);
++                            
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                   if(namespaces)
++                   {
++                       axutil_hash_index_t *hi;
++                       void *val;
++                       for (hi = axutil_hash_first(namespaces, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                       {
++                           axutil_hash_this(hi, NULL, NULL, &val);
++                           AXIS2_FREE(Environment::getEnv()->allocator, val);
++                       }
++                       axutil_hash_free(namespaces, Environment::getEnv());
++                   }
++                
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for SetJobAttributeResponse by  Property Number 1
++             */
++            AviaryJob::ControlJobResponse* WSF_CALL
++            AviaryJob::SetJobAttributeResponse::getProperty1()
++            {
++                return getSetJobAttributeResponse();
++            }
++
++            /**
++             * getter for SetJobAttributeResponse.
++             */
++            AviaryJob::ControlJobResponse* WSF_CALL
++            AviaryJob::SetJobAttributeResponse::getSetJobAttributeResponse()
++             {
++                return property_SetJobAttributeResponse;
++             }
++
++            /**
++             * setter for SetJobAttributeResponse
++             */
++            bool WSF_CALL
++            AviaryJob::SetJobAttributeResponse::setSetJobAttributeResponse(
++                    AviaryJob::ControlJobResponse*  arg_SetJobAttributeResponse)
++             {
++                
++
++                if(isValidSetJobAttributeResponse &&
++                        arg_SetJobAttributeResponse == property_SetJobAttributeResponse)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(NULL == arg_SetJobAttributeResponse)
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"SetJobAttributeResponse is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetSetJobAttributeResponse();
++
++                
++                    if(NULL == arg_SetJobAttributeResponse)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_SetJobAttributeResponse = arg_SetJobAttributeResponse;
++                        isValidSetJobAttributeResponse = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for SetJobAttributeResponse
++            */
++           bool WSF_CALL
++           AviaryJob::SetJobAttributeResponse::resetSetJobAttributeResponse()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++            
++                
++
++                if(property_SetJobAttributeResponse != NULL)
++                {
++                   
++                   
++                         delete  property_SetJobAttributeResponse;
++                     
++
++                   }
++
++                
++                
++                
++               isValidSetJobAttributeResponse = false; 
++               return true;
++           }
++
++           /**
++            * Check whether SetJobAttributeResponse is nill
++            */
++           bool WSF_CALL
++           AviaryJob::SetJobAttributeResponse::isSetJobAttributeResponseNil()
++           {
++               return !isValidSetJobAttributeResponse;
++           }
++
++           /**
++            * Set SetJobAttributeResponse to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryJob::SetJobAttributeResponse::setSetJobAttributeResponseNil()
++           {
++               return resetSetJobAttributeResponse();
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/codegen/job/src/AviaryJob_SubmitJob.cpp b/src/condor_contrib/aviary/codegen/job/src/AviaryJob_SubmitJob.cpp
+new file mode 100644
+index 0000000..2a6970f
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/job/src/AviaryJob_SubmitJob.cpp
+@@ -0,0 +1,3030 @@
++
++
++        /**
++         * SubmitJob.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryJob_SubmitJob.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryJob;
++        
++               /*
++                * Implementation of the SubmitJob|http://job.aviary.grid.redhat.com Element
++                */
++           AviaryJob::SubmitJob::SubmitJob()
++        {
++
++        
++            qname = NULL;
++        
++                    property_Cmd;
++                
++            isValidCmd  = false;
++        
++                    property_Args;
++                
++            isValidArgs  = false;
++        
++                    property_Owner;
++                
++            isValidOwner  = false;
++        
++                    property_Iwd;
++                
++            isValidIwd  = false;
++        
++                    property_Submission_name;
++                
++            isValidSubmission_name  = false;
++        
++                property_Requirements  = NULL;
++              
++            isValidRequirements  = false;
++        
++                property_Extra  = NULL;
++              
++            isValidExtra  = false;
++        
++            isValidAllowOverrides  = false;
++        
++                  qname =  axutil_qname_create (Environment::getEnv(),
++                        "SubmitJob",
++                        "http://job.aviary.grid.redhat.com",
++                        NULL);
++                
++        }
++
++       AviaryJob::SubmitJob::SubmitJob(std::string arg_Cmd,std::string arg_Args,std::string arg_Owner,std::string arg_Iwd,std::string arg_Submission_name,std::vector<AviaryCommon::ResourceConstraint*>* arg_Requirements,std::vector<AviaryCommon::Attribute*>* arg_Extra,bool arg_AllowOverrides)
++        {
++             
++                   qname = NULL;
++             
++                 property_Cmd;
++             
++            isValidCmd  = true;
++            
++                 property_Args;
++             
++            isValidArgs  = true;
++            
++                 property_Owner;
++             
++            isValidOwner  = true;
++            
++                 property_Iwd;
++             
++            isValidIwd  = true;
++            
++                 property_Submission_name;
++             
++            isValidSubmission_name  = true;
++            
++               property_Requirements  = NULL;
++             
++            isValidRequirements  = true;
++            
++               property_Extra  = NULL;
++             
++            isValidExtra  = true;
++            
++            isValidAllowOverrides  = true;
++            
++                 qname =  axutil_qname_create (Environment::getEnv(),
++                       "SubmitJob",
++                       "http://job.aviary.grid.redhat.com",
++                       NULL);
++               
++                    property_Cmd = arg_Cmd;
++            
++                    property_Args = arg_Args;
++            
++                    property_Owner = arg_Owner;
++            
++                    property_Iwd = arg_Iwd;
++            
++                    property_Submission_name = arg_Submission_name;
++            
++                    property_Requirements = arg_Requirements;
++            
++                    property_Extra = arg_Extra;
++            
++                    property_AllowOverrides = arg_AllowOverrides;
++            
++        }
++        AviaryJob::SubmitJob::~SubmitJob()
++        {
++
++        }
++
++        
++
++        bool WSF_CALL
++        AviaryJob::SubmitJob::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++          
++          axiom_attribute_t *parent_attri = NULL;
++          axiom_element_t *parent_element = NULL;
++          axis2_char_t *attrib_text = NULL;
++
++          axutil_hash_t *attribute_hash = NULL;
++
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++               int i = 0;
++            
++               int sequence_broken = 0;
++               axiom_node_t *tmp_node = NULL;
++            
++            axutil_qname_t *element_qname = NULL; 
++            
++               axiom_node_t *first_node = NULL;
++               bool is_early_node_valid = true;
++               axiom_node_t *current_node = NULL;
++               axiom_element_t *current_element = NULL;
++            
++              
++              while(parent && axiom_node_get_node_type(parent, Environment::getEnv()) != AXIOM_ELEMENT)
++              {
++                  parent = axiom_node_get_next_sibling(parent, Environment::getEnv());
++              }
++              if (NULL == parent)
++              {   
++                return AXIS2_FAILURE;
++              }
++              
++
++                    current_element = (axiom_element_t *)axiom_node_get_data_element(parent, Environment::getEnv());
++                    mqname = axiom_element_get_qname(current_element, Environment::getEnv(), parent);
++                    if (axutil_qname_equals(mqname, Environment::getEnv(), this->qname))
++                    {
++                        
++                          first_node = axiom_node_get_first_child(parent, Environment::getEnv());
++                          
++                    }
++                    else
++                    {
++                        WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI,
++                              "Failed in building adb object for SubmitJob : "
++                              "Expected %s but returned %s",
++                              axutil_qname_to_string(qname, Environment::getEnv()),
++                              axutil_qname_to_string(mqname, Environment::getEnv()));
++                        
++                        return AXIS2_FAILURE;
++                    }
++                    
++                 parent_element = (axiom_element_t *)axiom_node_get_data_element(parent, Environment::getEnv());
++                 attribute_hash = axiom_element_get_all_attributes(parent_element, Environment::getEnv());
++              
++
++                     
++                     /*
++                      * building cmd element
++                      */
++                     
++                     
++                     
++                                   current_node = first_node;
++                                   is_early_node_valid = false;
++                                   
++                                   
++                                    while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                    {
++                                        current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                    }
++                                    if(current_node != NULL)
++                                    {
++                                        current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                        mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                    }
++                                   
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "cmd", NULL, NULL);
++                                 
++
++                           if ( 
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("cmd", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("cmd", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 
++                                      text_value = axiom_element_get_text(current_element, Environment::getEnv(), current_node);
++                                      if(text_value != NULL)
++                                      {
++                                            status = setCmd(text_value);
++                                      }
++                                      
++                                      else
++                                      {
++                                            /*
++                                             * axis2_qname_t *qname = NULL;
++                                             * axiom_attribute_t *the_attri = NULL;
++                                             * 
++                                             * qname = axutil_qname_create(Environment::getEnv(), "nil", "http://www.w3.org/2001/XMLSchema-instance", "xsi");
++                                             * the_attri = axiom_element_get_attribute(current_element, Environment::getEnv(), qname);
++                                             */
++                                            /* currently thereis a bug in the axiom_element_get_attribute, so we have to go to this bad method */
++
++                                            axiom_attribute_t *the_attri = NULL;
++                                            axis2_char_t *attrib_text = NULL;
++                                            axutil_hash_t *attribute_hash = NULL;
++
++                                            attribute_hash = axiom_element_get_all_attributes(current_element, Environment::getEnv());
++
++                                            attrib_text = NULL;
++                                            if(attribute_hash)
++                                            {
++                                                 axutil_hash_index_t *hi;
++                                                 void *val;
++                                                 const void *key;
++                                        
++                                                 for (hi = axutil_hash_first(attribute_hash, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                                                 {
++                                                     axutil_hash_this(hi, &key, NULL, &val);
++                                                     
++                                                     if(strstr((axis2_char_t*)key, "nil|http://www.w3.org/2001/XMLSchema-instance"))
++                                                     {
++                                                         the_attri = (axiom_attribute_t*)val;
++                                                         break;
++                                                     }
++                                                 }
++                                            }
++
++                                            if(the_attri)
++                                            {
++                                                attrib_text = axiom_attribute_get_value(the_attri, Environment::getEnv());
++                                            }
++                                            else
++                                            {
++                                                /* this is hoping that attribute is stored in "http://www.w3.org/2001/XMLSchema-instance", this happnes when name is in default namespace */
++                                                attrib_text = axiom_element_get_attribute_value_by_name(current_element, Environment::getEnv(), "nil");
++                                            }
++
++                                            if(attrib_text && 0 == axutil_strcmp(attrib_text, "1"))
++                                            {
++                                                WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "NULL value is set to a non nillable element cmd");
++                                                status = AXIS2_FAILURE;
++                                            }
++                                            else
++                                            {
++                                                /* after all, we found this is a empty string */
++                                                status = setCmd("");
++                                            }
++                                      }
++                                      
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for cmd ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element cmd missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building args element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "args", NULL, NULL);
++                                 
++
++                           if ( 
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("args", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("args", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 
++                                      text_value = axiom_element_get_text(current_element, Environment::getEnv(), current_node);
++                                      if(text_value != NULL)
++                                      {
++                                            status = setArgs(text_value);
++                                      }
++                                      
++                                      else
++                                      {
++                                            /*
++                                             * axis2_qname_t *qname = NULL;
++                                             * axiom_attribute_t *the_attri = NULL;
++                                             * 
++                                             * qname = axutil_qname_create(Environment::getEnv(), "nil", "http://www.w3.org/2001/XMLSchema-instance", "xsi");
++                                             * the_attri = axiom_element_get_attribute(current_element, Environment::getEnv(), qname);
++                                             */
++                                            /* currently thereis a bug in the axiom_element_get_attribute, so we have to go to this bad method */
++
++                                            axiom_attribute_t *the_attri = NULL;
++                                            axis2_char_t *attrib_text = NULL;
++                                            axutil_hash_t *attribute_hash = NULL;
++
++                                            attribute_hash = axiom_element_get_all_attributes(current_element, Environment::getEnv());
++
++                                            attrib_text = NULL;
++                                            if(attribute_hash)
++                                            {
++                                                 axutil_hash_index_t *hi;
++                                                 void *val;
++                                                 const void *key;
++                                        
++                                                 for (hi = axutil_hash_first(attribute_hash, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                                                 {
++                                                     axutil_hash_this(hi, &key, NULL, &val);
++                                                     
++                                                     if(strstr((axis2_char_t*)key, "nil|http://www.w3.org/2001/XMLSchema-instance"))
++                                                     {
++                                                         the_attri = (axiom_attribute_t*)val;
++                                                         break;
++                                                     }
++                                                 }
++                                            }
++
++                                            if(the_attri)
++                                            {
++                                                attrib_text = axiom_attribute_get_value(the_attri, Environment::getEnv());
++                                            }
++                                            else
++                                            {
++                                                /* this is hoping that attribute is stored in "http://www.w3.org/2001/XMLSchema-instance", this happnes when name is in default namespace */
++                                                attrib_text = axiom_element_get_attribute_value_by_name(current_element, Environment::getEnv(), "nil");
++                                            }
++
++                                            if(attrib_text && 0 == axutil_strcmp(attrib_text, "1"))
++                                            {
++                                                WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "NULL value is set to a non nillable element args");
++                                                status = AXIS2_FAILURE;
++                                            }
++                                            else
++                                            {
++                                                /* after all, we found this is a empty string */
++                                                status = setArgs("");
++                                            }
++                                      }
++                                      
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for args ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building owner element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "owner", NULL, NULL);
++                                 
++
++                           if ( 
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("owner", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("owner", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 
++                                      text_value = axiom_element_get_text(current_element, Environment::getEnv(), current_node);
++                                      if(text_value != NULL)
++                                      {
++                                            status = setOwner(text_value);
++                                      }
++                                      
++                                      else
++                                      {
++                                            /*
++                                             * axis2_qname_t *qname = NULL;
++                                             * axiom_attribute_t *the_attri = NULL;
++                                             * 
++                                             * qname = axutil_qname_create(Environment::getEnv(), "nil", "http://www.w3.org/2001/XMLSchema-instance", "xsi");
++                                             * the_attri = axiom_element_get_attribute(current_element, Environment::getEnv(), qname);
++                                             */
++                                            /* currently thereis a bug in the axiom_element_get_attribute, so we have to go to this bad method */
++
++                                            axiom_attribute_t *the_attri = NULL;
++                                            axis2_char_t *attrib_text = NULL;
++                                            axutil_hash_t *attribute_hash = NULL;
++
++                                            attribute_hash = axiom_element_get_all_attributes(current_element, Environment::getEnv());
++
++                                            attrib_text = NULL;
++                                            if(attribute_hash)
++                                            {
++                                                 axutil_hash_index_t *hi;
++                                                 void *val;
++                                                 const void *key;
++                                        
++                                                 for (hi = axutil_hash_first(attribute_hash, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                                                 {
++                                                     axutil_hash_this(hi, &key, NULL, &val);
++                                                     
++                                                     if(strstr((axis2_char_t*)key, "nil|http://www.w3.org/2001/XMLSchema-instance"))
++                                                     {
++                                                         the_attri = (axiom_attribute_t*)val;
++                                                         break;
++                                                     }
++                                                 }
++                                            }
++
++                                            if(the_attri)
++                                            {
++                                                attrib_text = axiom_attribute_get_value(the_attri, Environment::getEnv());
++                                            }
++                                            else
++                                            {
++                                                /* this is hoping that attribute is stored in "http://www.w3.org/2001/XMLSchema-instance", this happnes when name is in default namespace */
++                                                attrib_text = axiom_element_get_attribute_value_by_name(current_element, Environment::getEnv(), "nil");
++                                            }
++
++                                            if(attrib_text && 0 == axutil_strcmp(attrib_text, "1"))
++                                            {
++                                                WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "NULL value is set to a non nillable element owner");
++                                                status = AXIS2_FAILURE;
++                                            }
++                                            else
++                                            {
++                                                /* after all, we found this is a empty string */
++                                                status = setOwner("");
++                                            }
++                                      }
++                                      
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for owner ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element owner missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building iwd element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "iwd", NULL, NULL);
++                                 
++
++                           if ( 
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("iwd", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("iwd", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 
++                                      text_value = axiom_element_get_text(current_element, Environment::getEnv(), current_node);
++                                      if(text_value != NULL)
++                                      {
++                                            status = setIwd(text_value);
++                                      }
++                                      
++                                      else
++                                      {
++                                            /*
++                                             * axis2_qname_t *qname = NULL;
++                                             * axiom_attribute_t *the_attri = NULL;
++                                             * 
++                                             * qname = axutil_qname_create(Environment::getEnv(), "nil", "http://www.w3.org/2001/XMLSchema-instance", "xsi");
++                                             * the_attri = axiom_element_get_attribute(current_element, Environment::getEnv(), qname);
++                                             */
++                                            /* currently thereis a bug in the axiom_element_get_attribute, so we have to go to this bad method */
++
++                                            axiom_attribute_t *the_attri = NULL;
++                                            axis2_char_t *attrib_text = NULL;
++                                            axutil_hash_t *attribute_hash = NULL;
++
++                                            attribute_hash = axiom_element_get_all_attributes(current_element, Environment::getEnv());
++
++                                            attrib_text = NULL;
++                                            if(attribute_hash)
++                                            {
++                                                 axutil_hash_index_t *hi;
++                                                 void *val;
++                                                 const void *key;
++                                        
++                                                 for (hi = axutil_hash_first(attribute_hash, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                                                 {
++                                                     axutil_hash_this(hi, &key, NULL, &val);
++                                                     
++                                                     if(strstr((axis2_char_t*)key, "nil|http://www.w3.org/2001/XMLSchema-instance"))
++                                                     {
++                                                         the_attri = (axiom_attribute_t*)val;
++                                                         break;
++                                                     }
++                                                 }
++                                            }
++
++                                            if(the_attri)
++                                            {
++                                                attrib_text = axiom_attribute_get_value(the_attri, Environment::getEnv());
++                                            }
++                                            else
++                                            {
++                                                /* this is hoping that attribute is stored in "http://www.w3.org/2001/XMLSchema-instance", this happnes when name is in default namespace */
++                                                attrib_text = axiom_element_get_attribute_value_by_name(current_element, Environment::getEnv(), "nil");
++                                            }
++
++                                            if(attrib_text && 0 == axutil_strcmp(attrib_text, "1"))
++                                            {
++                                                WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "NULL value is set to a non nillable element iwd");
++                                                status = AXIS2_FAILURE;
++                                            }
++                                            else
++                                            {
++                                                /* after all, we found this is a empty string */
++                                                status = setIwd("");
++                                            }
++                                      }
++                                      
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for iwd ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element iwd missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building submission_name element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "submission_name", NULL, NULL);
++                                 
++
++                           if ( 
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("submission_name", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("submission_name", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 
++                                      text_value = axiom_element_get_text(current_element, Environment::getEnv(), current_node);
++                                      if(text_value != NULL)
++                                      {
++                                            status = setSubmission_name(text_value);
++                                      }
++                                      
++                                      else
++                                      {
++                                            /*
++                                             * axis2_qname_t *qname = NULL;
++                                             * axiom_attribute_t *the_attri = NULL;
++                                             * 
++                                             * qname = axutil_qname_create(Environment::getEnv(), "nil", "http://www.w3.org/2001/XMLSchema-instance", "xsi");
++                                             * the_attri = axiom_element_get_attribute(current_element, Environment::getEnv(), qname);
++                                             */
++                                            /* currently thereis a bug in the axiom_element_get_attribute, so we have to go to this bad method */
++
++                                            axiom_attribute_t *the_attri = NULL;
++                                            axis2_char_t *attrib_text = NULL;
++                                            axutil_hash_t *attribute_hash = NULL;
++
++                                            attribute_hash = axiom_element_get_all_attributes(current_element, Environment::getEnv());
++
++                                            attrib_text = NULL;
++                                            if(attribute_hash)
++                                            {
++                                                 axutil_hash_index_t *hi;
++                                                 void *val;
++                                                 const void *key;
++                                        
++                                                 for (hi = axutil_hash_first(attribute_hash, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                                                 {
++                                                     axutil_hash_this(hi, &key, NULL, &val);
++                                                     
++                                                     if(strstr((axis2_char_t*)key, "nil|http://www.w3.org/2001/XMLSchema-instance"))
++                                                     {
++                                                         the_attri = (axiom_attribute_t*)val;
++                                                         break;
++                                                     }
++                                                 }
++                                            }
++
++                                            if(the_attri)
++                                            {
++                                                attrib_text = axiom_attribute_get_value(the_attri, Environment::getEnv());
++                                            }
++                                            else
++                                            {
++                                                /* this is hoping that attribute is stored in "http://www.w3.org/2001/XMLSchema-instance", this happnes when name is in default namespace */
++                                                attrib_text = axiom_element_get_attribute_value_by_name(current_element, Environment::getEnv(), "nil");
++                                            }
++
++                                            if(attrib_text && 0 == axutil_strcmp(attrib_text, "1"))
++                                            {
++                                                WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "NULL value is set to a non nillable element submission_name");
++                                                status = AXIS2_FAILURE;
++                                            }
++                                            else
++                                            {
++                                                /* after all, we found this is a empty string */
++                                                status = setSubmission_name("");
++                                            }
++                                      }
++                                      
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for submission_name ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++                       { 
++                    /*
++                     * building Requirements array
++                     */
++                       std::vector<AviaryCommon::ResourceConstraint*>* arr_list =new std::vector<AviaryCommon::ResourceConstraint*>();
++                   
++
++                     
++                     /*
++                      * building requirements element
++                      */
++                     
++                     
++                     
++                                    element_qname = axutil_qname_create(Environment::getEnv(), "requirements", NULL, NULL);
++                                  
++                               
++                               for (i = 0, sequence_broken = 0, current_node = (is_early_node_valid?axiom_node_get_next_sibling(current_node, Environment::getEnv()):current_node); !sequence_broken && current_node != NULL;)
++                                             
++                               {
++                                  if(axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                  {
++                                     current_node =axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                     is_early_node_valid = false;
++                                     continue;
++                                  }
++                                  
++                                  current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                  mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++
++                                  if (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("requirements", axiom_element_get_localname(current_element, Environment::getEnv())))
++                                  {
++                                  
++                                      is_early_node_valid = true;
++                                      
++                                     AviaryCommon::ResourceConstraint* element = new AviaryCommon::ResourceConstraint();
++                                          
++                                          status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                          
++                                          if(AXIS2_FAILURE ==  status)
++                                          {
++					  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "failed in building element requirements ");
++                                          }
++                                          else
++                                          {
++                                            arr_list->push_back(element);
++                                            
++                                          }
++                                        
++                                     if(AXIS2_FAILURE ==  status)
++                                     {
++                                         WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in setting the value for requirements ");
++                                         if(element_qname)
++                                         {
++                                            axutil_qname_free(element_qname, Environment::getEnv());
++                                         }
++                                         if(arr_list)
++                                         {
++                                            delete arr_list;
++                                         }
++                                         return false;
++                                     }
++
++                                     i++;
++                                    current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                  }
++                                  else
++                                  {
++                                      is_early_node_valid = false;
++                                      sequence_broken = 1;
++                                  }
++                                  
++                               }
++
++                               
++                                   if (i < 0)
++                                   {
++                                     /* found element out of order */
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"requirements (@minOccurs = '0') only have %d elements", i);
++                                     if(element_qname)
++                                     {
++                                        axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     if(arr_list)
++                                     {
++                                        delete arr_list;
++                                     }
++                                     return false;
++                                   }
++                               
++
++                               if(0 == arr_list->size())
++                               {
++                                    delete arr_list;
++                               }
++                               else
++                               {
++                                    status = setRequirements(arr_list);
++                               }
++
++                              
++                            } 
++                        
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++                       { 
++                    /*
++                     * building Extra array
++                     */
++                       std::vector<AviaryCommon::Attribute*>* arr_list =new std::vector<AviaryCommon::Attribute*>();
++                   
++
++                     
++                     /*
++                      * building extra element
++                      */
++                     
++                     
++                     
++                                    element_qname = axutil_qname_create(Environment::getEnv(), "extra", NULL, NULL);
++                                  
++                               
++                               for (i = 0, sequence_broken = 0, current_node = (is_early_node_valid?axiom_node_get_next_sibling(current_node, Environment::getEnv()):current_node); !sequence_broken && current_node != NULL;)
++                                             
++                               {
++                                  if(axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                  {
++                                     current_node =axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                     is_early_node_valid = false;
++                                     continue;
++                                  }
++                                  
++                                  current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                  mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++
++                                  if (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("extra", axiom_element_get_localname(current_element, Environment::getEnv())))
++                                  {
++                                  
++                                      is_early_node_valid = true;
++                                      
++                                     AviaryCommon::Attribute* element = new AviaryCommon::Attribute();
++                                          
++                                          status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                          
++                                          if(AXIS2_FAILURE ==  status)
++                                          {
++					  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "failed in building element extra ");
++                                          }
++                                          else
++                                          {
++                                            arr_list->push_back(element);
++                                            
++                                          }
++                                        
++                                     if(AXIS2_FAILURE ==  status)
++                                     {
++                                         WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in setting the value for extra ");
++                                         if(element_qname)
++                                         {
++                                            axutil_qname_free(element_qname, Environment::getEnv());
++                                         }
++                                         if(arr_list)
++                                         {
++                                            delete arr_list;
++                                         }
++                                         return false;
++                                     }
++
++                                     i++;
++                                    current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                  }
++                                  else
++                                  {
++                                      is_early_node_valid = false;
++                                      sequence_broken = 1;
++                                  }
++                                  
++                               }
++
++                               
++                                   if (i < 0)
++                                   {
++                                     /* found element out of order */
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"extra (@minOccurs = '0') only have %d elements", i);
++                                     if(element_qname)
++                                     {
++                                        axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     if(arr_list)
++                                     {
++                                        delete arr_list;
++                                     }
++                                     return false;
++                                   }
++                               
++
++                               if(0 == arr_list->size())
++                               {
++                                    delete arr_list;
++                               }
++                               else
++                               {
++                                    status = setExtra(arr_list);
++                               }
++
++                              
++                            } 
++                        
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++                
++                
++                  parent_attri = NULL;
++                  attrib_text = NULL;
++                  if(attribute_hash)
++                  {
++                       axutil_hash_index_t *hi;
++                       void *val;
++                       const void *key;
++
++                       for (hi = axutil_hash_first(attribute_hash, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                       {
++                           axutil_hash_this(hi, &key, NULL, &val);
++                           
++                           
++                               if(!strcmp((axis2_char_t*)key, "allowOverrides"))
++                             
++                               {
++                                   parent_attri = (axiom_attribute_t*)val;
++                                   break;
++                               }
++                       }
++                  }
++
++                  if(parent_attri)
++                  {
++                    attrib_text = axiom_attribute_get_value(parent_attri, Environment::getEnv());
++                  }
++                  else
++                  {
++                    /* this is hoping that attribute is stored in "allowOverrides", this happnes when name is in default namespace */
++                    attrib_text = axiom_element_get_attribute_value_by_name(parent_element, Environment::getEnv(), "allowOverrides");
++                  }
++
++                  if(attrib_text != NULL)
++                  {
++                      
++                      
++                           if (!axutil_strcmp(attrib_text, "TRUE") || !axutil_strcmp(attrib_text, "true"))
++                           {
++                               setAllowOverrides(true);
++                           }
++                           else
++                           {
++                               setAllowOverrides(false);
++                           }
++                        
++                    }
++                  
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryJob::SubmitJob::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryJob::SubmitJob::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryJob::SubmitJob::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++               axiom_attribute_t *text_attri = NULL;
++             
++             axis2_char_t *string_to_stream;
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++                axiom_namespace_t *ns1 = NULL;
++
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                axis2_char_t *p_prefix = NULL;
++            
++               int i = 0;
++               int count = 0;
++               void *element = NULL;
++             
++                    axis2_char_t *text_value_1;
++                    axis2_char_t *text_value_1_temp;
++                    
++                    axis2_char_t *text_value_2;
++                    axis2_char_t *text_value_2_temp;
++                    
++                    axis2_char_t *text_value_3;
++                    axis2_char_t *text_value_3_temp;
++                    
++                    axis2_char_t *text_value_4;
++                    axis2_char_t *text_value_4_temp;
++                    
++                    axis2_char_t *text_value_5;
++                    axis2_char_t *text_value_5_temp;
++                    
++                    axis2_char_t text_value_6[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++                    axis2_char_t text_value_7[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++                    axis2_char_t text_value_8[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++                axis2_char_t *text_value = NULL;
++             
++               axis2_char_t *start_input_str = NULL;
++               axis2_char_t *end_input_str = NULL;
++               unsigned int start_input_str_len = 0;
++               unsigned int end_input_str_len = 0;
++            
++            
++               axiom_data_source_t *data_source = NULL;
++               axutil_stream_t *stream = NULL;
++
++             
++                int next_ns_index_value = 0;
++             
++                    namespaces = axutil_hash_make(Environment::getEnv());
++                    next_ns_index = &next_ns_index_value;
++                     
++                           ns1 = axiom_namespace_create (Environment::getEnv(),
++                                             "http://job.aviary.grid.redhat.com",
++                                             "n"); 
++                           axutil_hash_set(namespaces, "http://job.aviary.grid.redhat.com", AXIS2_HASH_KEY_STRING, axutil_strdup(Environment::getEnv(), "n"));
++                       
++                     
++                    parent_element = axiom_element_create (Environment::getEnv(), NULL, "SubmitJob", ns1 , &parent);
++                    
++                    
++                    axiom_element_set_namespace(parent_element, Environment::getEnv(), ns1, parent);
++
++
++            
++                    data_source = axiom_data_source_create(Environment::getEnv(), parent, &current_node);
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv());
++                  
++            if(!parent_tag_closed)
++            {
++            
++                if(isValidAllowOverrides)
++                {
++                
++                        p_prefix = NULL;
++                      
++                           
++                           text_value = (axis2_char_t*)((property_AllowOverrides)?"true":"false");
++                           string_to_stream = (axis2_char_t*) AXIS2_MALLOC (Environment::getEnv()-> allocator, sizeof (axis2_char_t) *
++                                                            (5  + ADB_DEFAULT_NAMESPACE_PREFIX_LIMIT +
++                                                             axutil_strlen(text_value) + 
++                                                             axutil_strlen("allowOverrides")));
++                           sprintf(string_to_stream, " %s%s%s=\"%s\"", p_prefix?p_prefix:"", (p_prefix && axutil_strcmp(p_prefix, ""))?":":"",
++                                                "allowOverrides",  text_value);
++                           axutil_stream_write(stream, Environment::getEnv(), string_to_stream, axutil_strlen(string_to_stream));
++                           AXIS2_FREE(Environment::getEnv()-> allocator, string_to_stream);
++                        
++                   }
++                   
++            }
++            
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidCmd)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property cmd");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("cmd"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("cmd")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing cmd element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%scmd>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%scmd>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                    
++                           text_value_1 = (axis2_char_t*)property_Cmd.c_str();
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                           
++                            
++                           text_value_1_temp = axutil_xml_quote_string(Environment::getEnv(), text_value_1, true);
++                           if (text_value_1_temp)
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_1_temp, axutil_strlen(text_value_1_temp));
++                               AXIS2_FREE(Environment::getEnv()->allocator, text_value_1_temp);
++                           }
++                           else
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_1, axutil_strlen(text_value_1));
++                           }
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                           
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidArgs)
++                   {
++                      
++                           /* no need to complain for minoccurs=0 element */
++                            
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("args"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("args")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing args element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sargs>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sargs>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                    
++                           text_value_2 = (axis2_char_t*)property_Args.c_str();
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                           
++                            
++                           text_value_2_temp = axutil_xml_quote_string(Environment::getEnv(), text_value_2, true);
++                           if (text_value_2_temp)
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_2_temp, axutil_strlen(text_value_2_temp));
++                               AXIS2_FREE(Environment::getEnv()->allocator, text_value_2_temp);
++                           }
++                           else
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_2, axutil_strlen(text_value_2));
++                           }
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                           
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidOwner)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property owner");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("owner"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("owner")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing owner element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sowner>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sowner>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                    
++                           text_value_3 = (axis2_char_t*)property_Owner.c_str();
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                           
++                            
++                           text_value_3_temp = axutil_xml_quote_string(Environment::getEnv(), text_value_3, true);
++                           if (text_value_3_temp)
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_3_temp, axutil_strlen(text_value_3_temp));
++                               AXIS2_FREE(Environment::getEnv()->allocator, text_value_3_temp);
++                           }
++                           else
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_3, axutil_strlen(text_value_3));
++                           }
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                           
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidIwd)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property iwd");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("iwd"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("iwd")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing iwd element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%siwd>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%siwd>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                    
++                           text_value_4 = (axis2_char_t*)property_Iwd.c_str();
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                           
++                            
++                           text_value_4_temp = axutil_xml_quote_string(Environment::getEnv(), text_value_4, true);
++                           if (text_value_4_temp)
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_4_temp, axutil_strlen(text_value_4_temp));
++                               AXIS2_FREE(Environment::getEnv()->allocator, text_value_4_temp);
++                           }
++                           else
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_4, axutil_strlen(text_value_4));
++                           }
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                           
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidSubmission_name)
++                   {
++                      
++                           /* no need to complain for minoccurs=0 element */
++                            
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("submission_name"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("submission_name")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing submission_name element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%ssubmission_name>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%ssubmission_name>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                    
++                           text_value_5 = (axis2_char_t*)property_Submission_name.c_str();
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                           
++                            
++                           text_value_5_temp = axutil_xml_quote_string(Environment::getEnv(), text_value_5, true);
++                           if (text_value_5_temp)
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_5_temp, axutil_strlen(text_value_5_temp));
++                               AXIS2_FREE(Environment::getEnv()->allocator, text_value_5_temp);
++                           }
++                           else
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_5, axutil_strlen(text_value_5));
++                           }
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                           
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidRequirements)
++                   {
++                      
++                           /* no need to complain for minoccurs=0 element */
++                            
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("requirements"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("requirements")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     /*
++                      * Parsing Requirements array
++                      */
++                     if (property_Requirements != NULL)
++                     {
++                        
++
++                            sprintf(start_input_str, "<%s%srequirements",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                         start_input_str_len = axutil_strlen(start_input_str);
++
++                         sprintf(end_input_str, "</%s%srequirements>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                         end_input_str_len = axutil_strlen(end_input_str);
++
++                         count = property_Requirements->size();
++                         for(i = 0; i < count; i++)
++                         {
++                            AviaryCommon::ResourceConstraint* element = (*property_Requirements)[i];
++
++                            if(NULL == element) 
++                            {
++                                continue;
++                            }
++
++                    
++                     
++                     /*
++                      * parsing requirements element
++                      */
++
++                    
++                     
++                            if(!element->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                            }
++                            element->serialize(current_node, parent_element,
++                                                                                 element->isParticle() || false, namespaces, next_ns_index);
++                            
++                            if(!element->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                            }
++                            
++                         }
++                     }
++                   
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidExtra)
++                   {
++                      
++                           /* no need to complain for minoccurs=0 element */
++                            
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("extra"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("extra")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     /*
++                      * Parsing Extra array
++                      */
++                     if (property_Extra != NULL)
++                     {
++                        
++
++                            sprintf(start_input_str, "<%s%sextra",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                         start_input_str_len = axutil_strlen(start_input_str);
++
++                         sprintf(end_input_str, "</%s%sextra>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                         end_input_str_len = axutil_strlen(end_input_str);
++
++                         count = property_Extra->size();
++                         for(i = 0; i < count; i++)
++                         {
++                            AviaryCommon::Attribute* element = (*property_Extra)[i];
++
++                            if(NULL == element) 
++                            {
++                                continue;
++                            }
++
++                    
++                     
++                     /*
++                      * parsing extra element
++                      */
++
++                    
++                     
++                            if(!element->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                            }
++                            element->serialize(current_node, parent_element,
++                                                                                 element->isParticle() || false, namespaces, next_ns_index);
++                            
++                            if(!element->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                            }
++                            
++                         }
++                     }
++                   
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                    
++                    if(parent_tag_closed)
++                    {
++                       if(isValidAllowOverrides)
++                       {
++                       
++                           p_prefix = NULL;
++                           ns1 = NULL;
++                         
++                           
++                           text_value =  (axis2_char_t*)((property_AllowOverrides)?axutil_strdup(Environment::getEnv(), "true"):axutil_strdup(Environment::getEnv(), "false"));
++                           text_attri = axiom_attribute_create (Environment::getEnv(), "allowOverrides", text_value, ns1);
++                           axiom_element_add_attribute (parent_element, Environment::getEnv(), text_attri, parent);
++                           AXIS2_FREE(Environment::getEnv()->allocator, text_value);
++                        
++                      }
++                       
++                  }
++                
++                   if(namespaces)
++                   {
++                       axutil_hash_index_t *hi;
++                       void *val;
++                       for (hi = axutil_hash_first(namespaces, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                       {
++                           axutil_hash_this(hi, NULL, NULL, &val);
++                           AXIS2_FREE(Environment::getEnv()->allocator, val);
++                       }
++                       axutil_hash_free(namespaces, Environment::getEnv());
++                   }
++                
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for cmd by  Property Number 1
++             */
++            std::string WSF_CALL
++            AviaryJob::SubmitJob::getProperty1()
++            {
++                return getCmd();
++            }
++
++            /**
++             * getter for cmd.
++             */
++            std::string WSF_CALL
++            AviaryJob::SubmitJob::getCmd()
++             {
++                return property_Cmd;
++             }
++
++            /**
++             * setter for cmd
++             */
++            bool WSF_CALL
++            AviaryJob::SubmitJob::setCmd(
++                    const std::string  arg_Cmd)
++             {
++                
++
++                if(isValidCmd &&
++                        arg_Cmd == property_Cmd)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(arg_Cmd.empty())
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"cmd is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetCmd();
++
++                
++                        property_Cmd = std::string(arg_Cmd.c_str());
++                        isValidCmd = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for cmd
++            */
++           bool WSF_CALL
++           AviaryJob::SubmitJob::resetCmd()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidCmd = false; 
++               return true;
++           }
++
++           /**
++            * Check whether cmd is nill
++            */
++           bool WSF_CALL
++           AviaryJob::SubmitJob::isCmdNil()
++           {
++               return !isValidCmd;
++           }
++
++           /**
++            * Set cmd to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryJob::SubmitJob::setCmdNil()
++           {
++               return resetCmd();
++           }
++
++           
++
++            /**
++             * Getter for args by  Property Number 2
++             */
++            std::string WSF_CALL
++            AviaryJob::SubmitJob::getProperty2()
++            {
++                return getArgs();
++            }
++
++            /**
++             * getter for args.
++             */
++            std::string WSF_CALL
++            AviaryJob::SubmitJob::getArgs()
++             {
++                return property_Args;
++             }
++
++            /**
++             * setter for args
++             */
++            bool WSF_CALL
++            AviaryJob::SubmitJob::setArgs(
++                    const std::string  arg_Args)
++             {
++                
++
++                if(isValidArgs &&
++                        arg_Args == property_Args)
++                {
++                    
++                    return true;
++                }
++
++                
++
++                
++                resetArgs();
++
++                
++                        property_Args = std::string(arg_Args.c_str());
++                        isValidArgs = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for args
++            */
++           bool WSF_CALL
++           AviaryJob::SubmitJob::resetArgs()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidArgs = false; 
++               return true;
++           }
++
++           /**
++            * Check whether args is nill
++            */
++           bool WSF_CALL
++           AviaryJob::SubmitJob::isArgsNil()
++           {
++               return !isValidArgs;
++           }
++
++           /**
++            * Set args to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryJob::SubmitJob::setArgsNil()
++           {
++               return resetArgs();
++           }
++
++           
++
++            /**
++             * Getter for owner by  Property Number 3
++             */
++            std::string WSF_CALL
++            AviaryJob::SubmitJob::getProperty3()
++            {
++                return getOwner();
++            }
++
++            /**
++             * getter for owner.
++             */
++            std::string WSF_CALL
++            AviaryJob::SubmitJob::getOwner()
++             {
++                return property_Owner;
++             }
++
++            /**
++             * setter for owner
++             */
++            bool WSF_CALL
++            AviaryJob::SubmitJob::setOwner(
++                    const std::string  arg_Owner)
++             {
++                
++
++                if(isValidOwner &&
++                        arg_Owner == property_Owner)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(arg_Owner.empty())
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"owner is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetOwner();
++
++                
++                        property_Owner = std::string(arg_Owner.c_str());
++                        isValidOwner = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for owner
++            */
++           bool WSF_CALL
++           AviaryJob::SubmitJob::resetOwner()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidOwner = false; 
++               return true;
++           }
++
++           /**
++            * Check whether owner is nill
++            */
++           bool WSF_CALL
++           AviaryJob::SubmitJob::isOwnerNil()
++           {
++               return !isValidOwner;
++           }
++
++           /**
++            * Set owner to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryJob::SubmitJob::setOwnerNil()
++           {
++               return resetOwner();
++           }
++
++           
++
++            /**
++             * Getter for iwd by  Property Number 4
++             */
++            std::string WSF_CALL
++            AviaryJob::SubmitJob::getProperty4()
++            {
++                return getIwd();
++            }
++
++            /**
++             * getter for iwd.
++             */
++            std::string WSF_CALL
++            AviaryJob::SubmitJob::getIwd()
++             {
++                return property_Iwd;
++             }
++
++            /**
++             * setter for iwd
++             */
++            bool WSF_CALL
++            AviaryJob::SubmitJob::setIwd(
++                    const std::string  arg_Iwd)
++             {
++                
++
++                if(isValidIwd &&
++                        arg_Iwd == property_Iwd)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(arg_Iwd.empty())
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"iwd is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetIwd();
++
++                
++                        property_Iwd = std::string(arg_Iwd.c_str());
++                        isValidIwd = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for iwd
++            */
++           bool WSF_CALL
++           AviaryJob::SubmitJob::resetIwd()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidIwd = false; 
++               return true;
++           }
++
++           /**
++            * Check whether iwd is nill
++            */
++           bool WSF_CALL
++           AviaryJob::SubmitJob::isIwdNil()
++           {
++               return !isValidIwd;
++           }
++
++           /**
++            * Set iwd to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryJob::SubmitJob::setIwdNil()
++           {
++               return resetIwd();
++           }
++
++           
++
++            /**
++             * Getter for submission_name by  Property Number 5
++             */
++            std::string WSF_CALL
++            AviaryJob::SubmitJob::getProperty5()
++            {
++                return getSubmission_name();
++            }
++
++            /**
++             * getter for submission_name.
++             */
++            std::string WSF_CALL
++            AviaryJob::SubmitJob::getSubmission_name()
++             {
++                return property_Submission_name;
++             }
++
++            /**
++             * setter for submission_name
++             */
++            bool WSF_CALL
++            AviaryJob::SubmitJob::setSubmission_name(
++                    const std::string  arg_Submission_name)
++             {
++                
++
++                if(isValidSubmission_name &&
++                        arg_Submission_name == property_Submission_name)
++                {
++                    
++                    return true;
++                }
++
++                
++
++                
++                resetSubmission_name();
++
++                
++                        property_Submission_name = std::string(arg_Submission_name.c_str());
++                        isValidSubmission_name = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for submission_name
++            */
++           bool WSF_CALL
++           AviaryJob::SubmitJob::resetSubmission_name()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidSubmission_name = false; 
++               return true;
++           }
++
++           /**
++            * Check whether submission_name is nill
++            */
++           bool WSF_CALL
++           AviaryJob::SubmitJob::isSubmission_nameNil()
++           {
++               return !isValidSubmission_name;
++           }
++
++           /**
++            * Set submission_name to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryJob::SubmitJob::setSubmission_nameNil()
++           {
++               return resetSubmission_name();
++           }
++
++           
++
++            /**
++             * Getter for requirements by  Property Number 6
++             */
++            std::vector<AviaryCommon::ResourceConstraint*>* WSF_CALL
++            AviaryJob::SubmitJob::getProperty6()
++            {
++                return getRequirements();
++            }
++
++            /**
++             * getter for requirements.
++             */
++            std::vector<AviaryCommon::ResourceConstraint*>* WSF_CALL
++            AviaryJob::SubmitJob::getRequirements()
++             {
++                return property_Requirements;
++             }
++
++            /**
++             * setter for requirements
++             */
++            bool WSF_CALL
++            AviaryJob::SubmitJob::setRequirements(
++                    std::vector<AviaryCommon::ResourceConstraint*>*  arg_Requirements)
++             {
++                
++                 int size = 0;
++                 int i = 0;
++                 bool non_nil_exists = false;
++                
++
++                if(isValidRequirements &&
++                        arg_Requirements == property_Requirements)
++                {
++                    
++                    return true;
++                }
++
++                
++                 size = arg_Requirements->size();
++                 
++                 if (size < 0)
++                 {
++                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"requirements has less than minOccurs(0)");
++                     return false;
++                 }
++                 for(i = 0; i < size; i ++ )
++                 {
++                     if(NULL != (*arg_Requirements)[i])
++                     {
++                         non_nil_exists = true;
++                         break;
++                     }
++                 }
++
++                 
++
++                
++                resetRequirements();
++
++                
++                    if(NULL == arg_Requirements)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_Requirements = arg_Requirements;
++                        if(non_nil_exists)
++                        {
++                            isValidRequirements = true;
++                        }
++                        
++                    
++                return true;
++             }
++
++            
++            /**
++             * Get ith element of requirements.
++             */
++            AviaryCommon::ResourceConstraint* WSF_CALL
++            AviaryJob::SubmitJob::getRequirementsAt(int i)
++            {
++                AviaryCommon::ResourceConstraint* ret_val;
++                if(property_Requirements == NULL)
++                {
++                    return (AviaryCommon::ResourceConstraint*)0;
++                }
++                ret_val =   (*property_Requirements)[i];
++                
++                    return ret_val;
++                  
++            }
++
++            /**
++             * Set the ith element of requirements.
++             */
++           bool WSF_CALL
++            AviaryJob::SubmitJob::setRequirementsAt(int i,
++                    AviaryCommon::ResourceConstraint* arg_Requirements)
++            {
++                 AviaryCommon::ResourceConstraint* element;
++                int size = 0;
++
++                int non_nil_count;
++                bool non_nil_exists = false;
++
++                 
++
++                if( isValidRequirements &&
++                    property_Requirements &&
++                  
++                    arg_Requirements == (*property_Requirements)[i])
++                  
++                 {
++                    
++                    return AXIS2_SUCCESS; 
++                }
++
++                   
++                     non_nil_exists = true;
++                  
++
++                if(property_Requirements == NULL)
++                {
++                    property_Requirements = new std::vector<AviaryCommon::ResourceConstraint*>();
++                }
++                else{
++                /* check whether there already exist an element */
++                element = (*property_Requirements)[i];
++                }
++
++                
++                        if(NULL != element)
++                        {
++                          
++                          
++                          
++                                delete element;
++                             
++                        }
++                        
++                    
++                    if(!non_nil_exists)
++                    {
++                        
++                        isValidRequirements = true;
++                        (*property_Requirements)[i]= NULL;
++                        
++                        return AXIS2_SUCCESS;
++                    }
++                
++                    (*property_Requirements)[i] = arg_Requirements;
++                  
++
++               isValidRequirements = true;
++                
++                return AXIS2_SUCCESS;
++            }
++
++            /**
++             * Add to requirements.
++             */
++            bool WSF_CALL
++            AviaryJob::SubmitJob::addRequirements(
++                    AviaryCommon::ResourceConstraint* arg_Requirements)
++             {
++
++                
++                    if( NULL == arg_Requirements
++                     )
++                    {
++                      
++                           return true; 
++                        
++                    }
++                  
++
++                if(property_Requirements == NULL)
++                {
++                    property_Requirements = new std::vector<AviaryCommon::ResourceConstraint*>();
++                }
++              
++               property_Requirements->push_back(arg_Requirements);
++              
++                isValidRequirements = true;
++                return true;
++             }
++
++            /**
++             * Get the size of the requirements array.
++             */
++            int WSF_CALL
++            AviaryJob::SubmitJob::sizeofRequirements()
++            {
++
++                if(property_Requirements == NULL)
++                {
++                    return 0;
++                }
++                return property_Requirements->size();
++            }
++
++            /**
++             * remove the ith element, same as set_nil_at.
++             */
++            bool WSF_CALL
++            AviaryJob::SubmitJob::removeRequirementsAt(int i)
++            {
++                return setRequirementsNilAt(i);
++            }
++
++            
++
++           /**
++            * resetter for requirements
++            */
++           bool WSF_CALL
++           AviaryJob::SubmitJob::resetRequirements()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++                if (property_Requirements != NULL)
++                {
++                  std::vector<AviaryCommon::ResourceConstraint*>::iterator it =  property_Requirements->begin();
++                  for( ; it <  property_Requirements->end() ; ++it)
++                  {
++                     AviaryCommon::ResourceConstraint* element = *it;
++                
++            
++                
++
++                if(element != NULL)
++                {
++                   
++                   
++                         delete  element;
++                     
++
++                   }
++
++                
++                
++                
++               }
++
++             }
++                
++                    if(NULL != property_Requirements)
++                 delete property_Requirements;
++                
++               isValidRequirements = false; 
++               return true;
++           }
++
++           /**
++            * Check whether requirements is nill
++            */
++           bool WSF_CALL
++           AviaryJob::SubmitJob::isRequirementsNil()
++           {
++               return !isValidRequirements;
++           }
++
++           /**
++            * Set requirements to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryJob::SubmitJob::setRequirementsNil()
++           {
++               return resetRequirements();
++           }
++
++           
++           /**
++            * Check whether requirements is nill at i
++            */
++           bool WSF_CALL
++           AviaryJob::SubmitJob::isRequirementsNilAt(int i)
++           {
++               return (isValidRequirements == false ||
++                       NULL == property_Requirements ||
++                     NULL == (*property_Requirements)[i]);
++            }
++
++           /**
++            * Set requirements to nil at i
++            */
++           bool WSF_CALL
++           AviaryJob::SubmitJob::setRequirementsNilAt(int i)
++           {
++                int size = 0;
++                int j;
++                bool non_nil_exists = false;
++
++                int k = 0;
++
++                if(property_Requirements == NULL ||
++                            isValidRequirements == false)
++                {
++                    
++                    non_nil_exists = false;
++                }
++                else
++                {
++                    size = property_Requirements->size();
++                    for(j = 0, k = 0; j < size; j ++ )
++                    {
++                        if(i == j) continue; 
++                        if(NULL != (*property_Requirements)[i])
++                        {
++                            k++;
++                            non_nil_exists = true;
++                            if( k >= 0)
++                            {
++                                break;
++                            }
++                        }
++                    }
++                }
++                
++
++                if( k < 0)
++                {
++                       WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "Size of the array of requirements is beinng set to be smaller than the specificed number of minOccurs(0)");
++                       return AXIS2_FAILURE;
++                }
++ 
++                if(property_Requirements == NULL)
++                {
++                    isValidRequirements = false;
++                    
++                    return true;
++                }
++                 
++                 /* check whether there already exist an element */
++                 AviaryCommon::ResourceConstraint* element = (*property_Requirements)[i];
++                if(NULL != element)
++                {
++                  
++                  
++                  
++                        delete element;
++                     
++                 }
++                 
++                    if(!non_nil_exists)
++                    {
++                        
++                        isValidRequirements = false;
++                        (*property_Requirements)[i] = NULL;
++                        return AXIS2_SUCCESS;
++                    }
++                
++
++                
++                (*property_Requirements)[i] = NULL;
++                
++                return AXIS2_SUCCESS;
++
++           }
++
++           
++
++            /**
++             * Getter for extra by  Property Number 7
++             */
++            std::vector<AviaryCommon::Attribute*>* WSF_CALL
++            AviaryJob::SubmitJob::getProperty7()
++            {
++                return getExtra();
++            }
++
++            /**
++             * getter for extra.
++             */
++            std::vector<AviaryCommon::Attribute*>* WSF_CALL
++            AviaryJob::SubmitJob::getExtra()
++             {
++                return property_Extra;
++             }
++
++            /**
++             * setter for extra
++             */
++            bool WSF_CALL
++            AviaryJob::SubmitJob::setExtra(
++                    std::vector<AviaryCommon::Attribute*>*  arg_Extra)
++             {
++                
++                 int size = 0;
++                 int i = 0;
++                 bool non_nil_exists = false;
++                
++
++                if(isValidExtra &&
++                        arg_Extra == property_Extra)
++                {
++                    
++                    return true;
++                }
++
++                
++                 size = arg_Extra->size();
++                 
++                 if (size < 0)
++                 {
++                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"extra has less than minOccurs(0)");
++                     return false;
++                 }
++                 for(i = 0; i < size; i ++ )
++                 {
++                     if(NULL != (*arg_Extra)[i])
++                     {
++                         non_nil_exists = true;
++                         break;
++                     }
++                 }
++
++                 
++
++                
++                resetExtra();
++
++                
++                    if(NULL == arg_Extra)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_Extra = arg_Extra;
++                        if(non_nil_exists)
++                        {
++                            isValidExtra = true;
++                        }
++                        
++                    
++                return true;
++             }
++
++            
++            /**
++             * Get ith element of extra.
++             */
++            AviaryCommon::Attribute* WSF_CALL
++            AviaryJob::SubmitJob::getExtraAt(int i)
++            {
++                AviaryCommon::Attribute* ret_val;
++                if(property_Extra == NULL)
++                {
++                    return (AviaryCommon::Attribute*)0;
++                }
++                ret_val =   (*property_Extra)[i];
++                
++                    return ret_val;
++                  
++            }
++
++            /**
++             * Set the ith element of extra.
++             */
++           bool WSF_CALL
++            AviaryJob::SubmitJob::setExtraAt(int i,
++                    AviaryCommon::Attribute* arg_Extra)
++            {
++                 AviaryCommon::Attribute* element;
++                int size = 0;
++
++                int non_nil_count;
++                bool non_nil_exists = false;
++
++                 
++
++                if( isValidExtra &&
++                    property_Extra &&
++                  
++                    arg_Extra == (*property_Extra)[i])
++                  
++                 {
++                    
++                    return AXIS2_SUCCESS; 
++                }
++
++                   
++                     non_nil_exists = true;
++                  
++
++                if(property_Extra == NULL)
++                {
++                    property_Extra = new std::vector<AviaryCommon::Attribute*>();
++                }
++                else{
++                /* check whether there already exist an element */
++                element = (*property_Extra)[i];
++                }
++
++                
++                        if(NULL != element)
++                        {
++                          
++                          
++                          
++                                delete element;
++                             
++                        }
++                        
++                    
++                    if(!non_nil_exists)
++                    {
++                        
++                        isValidExtra = true;
++                        (*property_Extra)[i]= NULL;
++                        
++                        return AXIS2_SUCCESS;
++                    }
++                
++                    (*property_Extra)[i] = arg_Extra;
++                  
++
++               isValidExtra = true;
++                
++                return AXIS2_SUCCESS;
++            }
++
++            /**
++             * Add to extra.
++             */
++            bool WSF_CALL
++            AviaryJob::SubmitJob::addExtra(
++                    AviaryCommon::Attribute* arg_Extra)
++             {
++
++                
++                    if( NULL == arg_Extra
++                     )
++                    {
++                      
++                           return true; 
++                        
++                    }
++                  
++
++                if(property_Extra == NULL)
++                {
++                    property_Extra = new std::vector<AviaryCommon::Attribute*>();
++                }
++              
++               property_Extra->push_back(arg_Extra);
++              
++                isValidExtra = true;
++                return true;
++             }
++
++            /**
++             * Get the size of the extra array.
++             */
++            int WSF_CALL
++            AviaryJob::SubmitJob::sizeofExtra()
++            {
++
++                if(property_Extra == NULL)
++                {
++                    return 0;
++                }
++                return property_Extra->size();
++            }
++
++            /**
++             * remove the ith element, same as set_nil_at.
++             */
++            bool WSF_CALL
++            AviaryJob::SubmitJob::removeExtraAt(int i)
++            {
++                return setExtraNilAt(i);
++            }
++
++            
++
++           /**
++            * resetter for extra
++            */
++           bool WSF_CALL
++           AviaryJob::SubmitJob::resetExtra()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++                if (property_Extra != NULL)
++                {
++                  std::vector<AviaryCommon::Attribute*>::iterator it =  property_Extra->begin();
++                  for( ; it <  property_Extra->end() ; ++it)
++                  {
++                     AviaryCommon::Attribute* element = *it;
++                
++            
++                
++
++                if(element != NULL)
++                {
++                   
++                   
++                         delete  element;
++                     
++
++                   }
++
++                
++                
++                
++               }
++
++             }
++                
++                    if(NULL != property_Extra)
++                 delete property_Extra;
++                
++               isValidExtra = false; 
++               return true;
++           }
++
++           /**
++            * Check whether extra is nill
++            */
++           bool WSF_CALL
++           AviaryJob::SubmitJob::isExtraNil()
++           {
++               return !isValidExtra;
++           }
++
++           /**
++            * Set extra to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryJob::SubmitJob::setExtraNil()
++           {
++               return resetExtra();
++           }
++
++           
++           /**
++            * Check whether extra is nill at i
++            */
++           bool WSF_CALL
++           AviaryJob::SubmitJob::isExtraNilAt(int i)
++           {
++               return (isValidExtra == false ||
++                       NULL == property_Extra ||
++                     NULL == (*property_Extra)[i]);
++            }
++
++           /**
++            * Set extra to nil at i
++            */
++           bool WSF_CALL
++           AviaryJob::SubmitJob::setExtraNilAt(int i)
++           {
++                int size = 0;
++                int j;
++                bool non_nil_exists = false;
++
++                int k = 0;
++
++                if(property_Extra == NULL ||
++                            isValidExtra == false)
++                {
++                    
++                    non_nil_exists = false;
++                }
++                else
++                {
++                    size = property_Extra->size();
++                    for(j = 0, k = 0; j < size; j ++ )
++                    {
++                        if(i == j) continue; 
++                        if(NULL != (*property_Extra)[i])
++                        {
++                            k++;
++                            non_nil_exists = true;
++                            if( k >= 0)
++                            {
++                                break;
++                            }
++                        }
++                    }
++                }
++                
++
++                if( k < 0)
++                {
++                       WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "Size of the array of extra is beinng set to be smaller than the specificed number of minOccurs(0)");
++                       return AXIS2_FAILURE;
++                }
++ 
++                if(property_Extra == NULL)
++                {
++                    isValidExtra = false;
++                    
++                    return true;
++                }
++                 
++                 /* check whether there already exist an element */
++                 AviaryCommon::Attribute* element = (*property_Extra)[i];
++                if(NULL != element)
++                {
++                  
++                  
++                  
++                        delete element;
++                     
++                 }
++                 
++                    if(!non_nil_exists)
++                    {
++                        
++                        isValidExtra = false;
++                        (*property_Extra)[i] = NULL;
++                        return AXIS2_SUCCESS;
++                    }
++                
++
++                
++                (*property_Extra)[i] = NULL;
++                
++                return AXIS2_SUCCESS;
++
++           }
++
++           
++
++            /**
++             * Getter for allowOverrides by  Property Number 8
++             */
++            bool WSF_CALL
++            AviaryJob::SubmitJob::getProperty8()
++            {
++                return getAllowOverrides();
++            }
++
++            /**
++             * getter for allowOverrides.
++             */
++            bool WSF_CALL
++            AviaryJob::SubmitJob::getAllowOverrides()
++             {
++                return property_AllowOverrides;
++             }
++
++            /**
++             * setter for allowOverrides
++             */
++            bool WSF_CALL
++            AviaryJob::SubmitJob::setAllowOverrides(
++                    bool  arg_AllowOverrides)
++             {
++                
++
++                if(isValidAllowOverrides &&
++                        arg_AllowOverrides == property_AllowOverrides)
++                {
++                    
++                    return true;
++                }
++
++                
++
++                
++                resetAllowOverrides();
++
++                
++                        property_AllowOverrides = arg_AllowOverrides;
++                        isValidAllowOverrides = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for allowOverrides
++            */
++           bool WSF_CALL
++           AviaryJob::SubmitJob::resetAllowOverrides()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidAllowOverrides = false; 
++               return true;
++           }
++
++           /**
++            * Check whether allowOverrides is nill
++            */
++           bool WSF_CALL
++           AviaryJob::SubmitJob::isAllowOverridesNil()
++           {
++               return !isValidAllowOverrides;
++           }
++
++           /**
++            * Set allowOverrides to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryJob::SubmitJob::setAllowOverridesNil()
++           {
++               return resetAllowOverrides();
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/codegen/job/src/AviaryJob_SubmitJobResponse.cpp b/src/condor_contrib/aviary/codegen/job/src/AviaryJob_SubmitJobResponse.cpp
+new file mode 100644
+index 0000000..fe0f2ed
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/job/src/AviaryJob_SubmitJobResponse.cpp
+@@ -0,0 +1,701 @@
++
++
++        /**
++         * SubmitJobResponse.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryJob_SubmitJobResponse.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryJob;
++        
++               /*
++                * Implementation of the SubmitJobResponse|http://job.aviary.grid.redhat.com Element
++                */
++           AviaryJob::SubmitJobResponse::SubmitJobResponse()
++        {
++
++        
++            qname = NULL;
++        
++                property_Id  = NULL;
++              
++            isValidId  = false;
++        
++                property_Status  = NULL;
++              
++            isValidStatus  = false;
++        
++                  qname =  axutil_qname_create (Environment::getEnv(),
++                        "SubmitJobResponse",
++                        "http://job.aviary.grid.redhat.com",
++                        NULL);
++                
++        }
++
++       AviaryJob::SubmitJobResponse::SubmitJobResponse(AviaryCommon::JobID* arg_Id,AviaryCommon::Status* arg_Status)
++        {
++             
++                   qname = NULL;
++             
++               property_Id  = NULL;
++             
++            isValidId  = true;
++            
++               property_Status  = NULL;
++             
++            isValidStatus  = true;
++            
++                 qname =  axutil_qname_create (Environment::getEnv(),
++                       "SubmitJobResponse",
++                       "http://job.aviary.grid.redhat.com",
++                       NULL);
++               
++                    property_Id = arg_Id;
++            
++                    property_Status = arg_Status;
++            
++        }
++        AviaryJob::SubmitJobResponse::~SubmitJobResponse()
++        {
++
++        }
++
++        
++
++        bool WSF_CALL
++        AviaryJob::SubmitJobResponse::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++            axutil_qname_t *element_qname = NULL; 
++            
++               axiom_node_t *first_node = NULL;
++               bool is_early_node_valid = true;
++               axiom_node_t *current_node = NULL;
++               axiom_element_t *current_element = NULL;
++            
++              
++              while(parent && axiom_node_get_node_type(parent, Environment::getEnv()) != AXIOM_ELEMENT)
++              {
++                  parent = axiom_node_get_next_sibling(parent, Environment::getEnv());
++              }
++              if (NULL == parent)
++              {   
++                return AXIS2_FAILURE;
++              }
++              
++
++                    current_element = (axiom_element_t *)axiom_node_get_data_element(parent, Environment::getEnv());
++                    mqname = axiom_element_get_qname(current_element, Environment::getEnv(), parent);
++                    if (axutil_qname_equals(mqname, Environment::getEnv(), this->qname))
++                    {
++                        
++                          first_node = axiom_node_get_first_child(parent, Environment::getEnv());
++                          
++                    }
++                    else
++                    {
++                        WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI,
++                              "Failed in building adb object for SubmitJobResponse : "
++                              "Expected %s but returned %s",
++                              axutil_qname_to_string(qname, Environment::getEnv()),
++                              axutil_qname_to_string(mqname, Environment::getEnv()));
++                        
++                        return AXIS2_FAILURE;
++                    }
++                    
++
++                     
++                     /*
++                      * building id element
++                      */
++                     
++                     
++                     
++                                   current_node = first_node;
++                                   is_early_node_valid = false;
++                                   
++                                   
++                                    while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                    {
++                                        current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                    }
++                                    if(current_node != NULL)
++                                    {
++                                        current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                        mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                    }
++                                   
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "id", NULL, NULL);
++                                 
++
++                           if (isParticle() ||  
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("id", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("id", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 AviaryCommon::JobID* element = new AviaryCommon::JobID();
++
++                                      status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                      if(AXIS2_FAILURE == status)
++                                      {
++                                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in building adb object for element id");
++                                      }
++                                      else
++                                      {
++                                          status = setId(element);
++                                      }
++                                    
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for id ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building status element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "status", NULL, NULL);
++                                 
++
++                           if (isParticle() ||  
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("status", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("status", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 AviaryCommon::Status* element = new AviaryCommon::Status();
++
++                                      status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                      if(AXIS2_FAILURE == status)
++                                      {
++                                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in building adb object for element status");
++                                      }
++                                      else
++                                      {
++                                          status = setStatus(element);
++                                      }
++                                    
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for status ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element status missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryJob::SubmitJobResponse::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryJob::SubmitJobResponse::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryJob::SubmitJobResponse::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++                axiom_namespace_t *ns1 = NULL;
++
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                axis2_char_t *p_prefix = NULL;
++            
++                    axis2_char_t text_value_1[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++                    axis2_char_t text_value_2[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++               axis2_char_t *start_input_str = NULL;
++               axis2_char_t *end_input_str = NULL;
++               unsigned int start_input_str_len = 0;
++               unsigned int end_input_str_len = 0;
++            
++            
++               axiom_data_source_t *data_source = NULL;
++               axutil_stream_t *stream = NULL;
++
++             
++                int next_ns_index_value = 0;
++             
++                    namespaces = axutil_hash_make(Environment::getEnv());
++                    next_ns_index = &next_ns_index_value;
++                     
++                           ns1 = axiom_namespace_create (Environment::getEnv(),
++                                             "http://job.aviary.grid.redhat.com",
++                                             "n"); 
++                           axutil_hash_set(namespaces, "http://job.aviary.grid.redhat.com", AXIS2_HASH_KEY_STRING, axutil_strdup(Environment::getEnv(), "n"));
++                       
++                     
++                    parent_element = axiom_element_create (Environment::getEnv(), NULL, "SubmitJobResponse", ns1 , &parent);
++                    
++                    
++                    axiom_element_set_namespace(parent_element, Environment::getEnv(), ns1, parent);
++
++
++            
++                    data_source = axiom_data_source_create(Environment::getEnv(), parent, &current_node);
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv());
++                  
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidId)
++                   {
++                      
++                           /* no need to complain for minoccurs=0 element */
++                            
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("id"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("id")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing id element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sid",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":""); 
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sid>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                     
++                            if(!property_Id->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                            }
++                            property_Id->serialize(current_node, parent_element,
++                                                                                 property_Id->isParticle() || false, namespaces, next_ns_index);
++                            
++                            if(!property_Id->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                            }
++                            
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidStatus)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property status");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("status"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("status")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing status element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sstatus",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":""); 
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sstatus>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                     
++                            if(!property_Status->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                            }
++                            property_Status->serialize(current_node, parent_element,
++                                                                                 property_Status->isParticle() || false, namespaces, next_ns_index);
++                            
++                            if(!property_Status->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                            }
++                            
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                   if(namespaces)
++                   {
++                       axutil_hash_index_t *hi;
++                       void *val;
++                       for (hi = axutil_hash_first(namespaces, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                       {
++                           axutil_hash_this(hi, NULL, NULL, &val);
++                           AXIS2_FREE(Environment::getEnv()->allocator, val);
++                       }
++                       axutil_hash_free(namespaces, Environment::getEnv());
++                   }
++                
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for id by  Property Number 1
++             */
++            AviaryCommon::JobID* WSF_CALL
++            AviaryJob::SubmitJobResponse::getProperty1()
++            {
++                return getId();
++            }
++
++            /**
++             * getter for id.
++             */
++            AviaryCommon::JobID* WSF_CALL
++            AviaryJob::SubmitJobResponse::getId()
++             {
++                return property_Id;
++             }
++
++            /**
++             * setter for id
++             */
++            bool WSF_CALL
++            AviaryJob::SubmitJobResponse::setId(
++                    AviaryCommon::JobID*  arg_Id)
++             {
++                
++
++                if(isValidId &&
++                        arg_Id == property_Id)
++                {
++                    
++                    return true;
++                }
++
++                
++
++                
++                resetId();
++
++                
++                    if(NULL == arg_Id)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_Id = arg_Id;
++                        isValidId = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for id
++            */
++           bool WSF_CALL
++           AviaryJob::SubmitJobResponse::resetId()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++            
++                
++
++                if(property_Id != NULL)
++                {
++                   
++                   
++                         delete  property_Id;
++                     
++
++                   }
++
++                
++                
++                
++               isValidId = false; 
++               return true;
++           }
++
++           /**
++            * Check whether id is nill
++            */
++           bool WSF_CALL
++           AviaryJob::SubmitJobResponse::isIdNil()
++           {
++               return !isValidId;
++           }
++
++           /**
++            * Set id to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryJob::SubmitJobResponse::setIdNil()
++           {
++               return resetId();
++           }
++
++           
++
++            /**
++             * Getter for status by  Property Number 2
++             */
++            AviaryCommon::Status* WSF_CALL
++            AviaryJob::SubmitJobResponse::getProperty2()
++            {
++                return getStatus();
++            }
++
++            /**
++             * getter for status.
++             */
++            AviaryCommon::Status* WSF_CALL
++            AviaryJob::SubmitJobResponse::getStatus()
++             {
++                return property_Status;
++             }
++
++            /**
++             * setter for status
++             */
++            bool WSF_CALL
++            AviaryJob::SubmitJobResponse::setStatus(
++                    AviaryCommon::Status*  arg_Status)
++             {
++                
++
++                if(isValidStatus &&
++                        arg_Status == property_Status)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(NULL == arg_Status)
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"status is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetStatus();
++
++                
++                    if(NULL == arg_Status)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_Status = arg_Status;
++                        isValidStatus = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for status
++            */
++           bool WSF_CALL
++           AviaryJob::SubmitJobResponse::resetStatus()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++            
++                
++
++                if(property_Status != NULL)
++                {
++                   
++                   
++                         delete  property_Status;
++                     
++
++                   }
++
++                
++                
++                
++               isValidStatus = false; 
++               return true;
++           }
++
++           /**
++            * Check whether status is nill
++            */
++           bool WSF_CALL
++           AviaryJob::SubmitJobResponse::isStatusNil()
++           {
++               return !isValidStatus;
++           }
++
++           /**
++            * Set status to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryJob::SubmitJobResponse::setStatusNil()
++           {
++               return resetStatus();
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/codegen/query/src/AviaryQuery_GetJobData.cpp b/src/condor_contrib/aviary/codegen/query/src/AviaryQuery_GetJobData.cpp
+new file mode 100644
+index 0000000..142f4b7
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/query/src/AviaryQuery_GetJobData.cpp
+@@ -0,0 +1,910 @@
++
++
++        /**
++         * GetJobData.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryQuery_GetJobData.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryQuery;
++        
++               /*
++                * Implementation of the GetJobData|http://query.aviary.grid.redhat.com Element
++                */
++           AviaryQuery::GetJobData::GetJobData()
++        {
++
++        
++            qname = NULL;
++        
++                property_Data  = NULL;
++              
++            isValidData  = false;
++        
++            isValidMax_bytes  = false;
++        
++            isValidFrom_end  = false;
++        
++                  qname =  axutil_qname_create (Environment::getEnv(),
++                        "GetJobData",
++                        "http://query.aviary.grid.redhat.com",
++                        NULL);
++                
++        }
++
++       AviaryQuery::GetJobData::GetJobData(AviaryCommon::JobData* arg_Data,int arg_Max_bytes,bool arg_From_end)
++        {
++             
++                   qname = NULL;
++             
++               property_Data  = NULL;
++             
++            isValidData  = true;
++            
++            isValidMax_bytes  = true;
++            
++            isValidFrom_end  = true;
++            
++                 qname =  axutil_qname_create (Environment::getEnv(),
++                       "GetJobData",
++                       "http://query.aviary.grid.redhat.com",
++                       NULL);
++               
++                    property_Data = arg_Data;
++            
++                    property_Max_bytes = arg_Max_bytes;
++            
++                    property_From_end = arg_From_end;
++            
++        }
++        AviaryQuery::GetJobData::~GetJobData()
++        {
++
++        }
++
++        
++
++        bool WSF_CALL
++        AviaryQuery::GetJobData::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++            axutil_qname_t *element_qname = NULL; 
++            
++               axiom_node_t *first_node = NULL;
++               bool is_early_node_valid = true;
++               axiom_node_t *current_node = NULL;
++               axiom_element_t *current_element = NULL;
++            
++              
++              while(parent && axiom_node_get_node_type(parent, Environment::getEnv()) != AXIOM_ELEMENT)
++              {
++                  parent = axiom_node_get_next_sibling(parent, Environment::getEnv());
++              }
++              if (NULL == parent)
++              {   
++                return AXIS2_FAILURE;
++              }
++              
++
++                    current_element = (axiom_element_t *)axiom_node_get_data_element(parent, Environment::getEnv());
++                    mqname = axiom_element_get_qname(current_element, Environment::getEnv(), parent);
++                    if (axutil_qname_equals(mqname, Environment::getEnv(), this->qname))
++                    {
++                        
++                          first_node = axiom_node_get_first_child(parent, Environment::getEnv());
++                          
++                    }
++                    else
++                    {
++                        WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI,
++                              "Failed in building adb object for GetJobData : "
++                              "Expected %s but returned %s",
++                              axutil_qname_to_string(qname, Environment::getEnv()),
++                              axutil_qname_to_string(mqname, Environment::getEnv()));
++                        
++                        return AXIS2_FAILURE;
++                    }
++                    
++
++                     
++                     /*
++                      * building data element
++                      */
++                     
++                     
++                     
++                                   current_node = first_node;
++                                   is_early_node_valid = false;
++                                   
++                                   
++                                    while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                    {
++                                        current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                    }
++                                    if(current_node != NULL)
++                                    {
++                                        current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                        mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                    }
++                                   
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "data", NULL, NULL);
++                                 
++
++                           if (isParticle() ||  
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("data", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("data", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 AviaryCommon::JobData* element = new AviaryCommon::JobData();
++
++                                      status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                      if(AXIS2_FAILURE == status)
++                                      {
++                                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in building adb object for element data");
++                                      }
++                                      else
++                                      {
++                                          status = setData(element);
++                                      }
++                                    
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for data ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element data missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building max_bytes element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "max_bytes", NULL, NULL);
++                                 
++
++                           if ( 
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("max_bytes", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("max_bytes", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 
++                                      text_value = axiom_element_get_text(current_element, Environment::getEnv(), current_node);
++                                      if(text_value != NULL)
++                                      {
++                                            status = setMax_bytes(atoi(text_value));
++                                      }
++                                      
++                                      else
++                                      {
++                                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "NULL value is set to a non nillable element max_bytes");
++                                          status = AXIS2_FAILURE;
++                                      }
++                                      
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for max_bytes ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element max_bytes missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building from_end element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "from_end", NULL, NULL);
++                                 
++
++                           if ( 
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("from_end", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("from_end", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 
++                                      text_value = axiom_element_get_text(current_element, Environment::getEnv(), current_node);
++                                      if(text_value != NULL)
++                                      {
++                                            if (!axutil_strcasecmp(text_value , "true"))
++                                            {
++                                                status = setFrom_end(true);
++                                            }
++                                            else
++                                            {
++                                                status = setFrom_end(false);
++                                            }
++                                      }
++                                      
++                                      else
++                                      {
++                                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "NULL value is set to a non nillable element from_end");
++                                          status = AXIS2_FAILURE;
++                                      }
++                                      
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for from_end ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryQuery::GetJobData::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryQuery::GetJobData::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryQuery::GetJobData::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++                axiom_namespace_t *ns1 = NULL;
++
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                axis2_char_t *p_prefix = NULL;
++            
++                    axis2_char_t text_value_1[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++                    axis2_char_t text_value_2[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++                    axis2_char_t text_value_3[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++               axis2_char_t *start_input_str = NULL;
++               axis2_char_t *end_input_str = NULL;
++               unsigned int start_input_str_len = 0;
++               unsigned int end_input_str_len = 0;
++            
++            
++               axiom_data_source_t *data_source = NULL;
++               axutil_stream_t *stream = NULL;
++
++             
++                int next_ns_index_value = 0;
++             
++                    namespaces = axutil_hash_make(Environment::getEnv());
++                    next_ns_index = &next_ns_index_value;
++                     
++                           ns1 = axiom_namespace_create (Environment::getEnv(),
++                                             "http://query.aviary.grid.redhat.com",
++                                             "n"); 
++                           axutil_hash_set(namespaces, "http://query.aviary.grid.redhat.com", AXIS2_HASH_KEY_STRING, axutil_strdup(Environment::getEnv(), "n"));
++                       
++                     
++                    parent_element = axiom_element_create (Environment::getEnv(), NULL, "GetJobData", ns1 , &parent);
++                    
++                    
++                    axiom_element_set_namespace(parent_element, Environment::getEnv(), ns1, parent);
++
++
++            
++                    data_source = axiom_data_source_create(Environment::getEnv(), parent, &current_node);
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv());
++                  
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidData)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property data");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("data"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("data")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing data element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sdata",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":""); 
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sdata>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                     
++                            if(!property_Data->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                            }
++                            property_Data->serialize(current_node, parent_element,
++                                                                                 property_Data->isParticle() || false, namespaces, next_ns_index);
++                            
++                            if(!property_Data->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                            }
++                            
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidMax_bytes)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property max_bytes");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("max_bytes"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("max_bytes")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing max_bytes element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%smax_bytes>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%smax_bytes>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                    
++                               sprintf (text_value_2, AXIS2_PRINTF_INT32_FORMAT_SPECIFIER, property_Max_bytes);
++                             
++                           axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), text_value_2, axutil_strlen(text_value_2));
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                           
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidFrom_end)
++                   {
++                      
++                           /* no need to complain for minoccurs=0 element */
++                            
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("from_end"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("from_end")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing from_end element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sfrom_end>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sfrom_end>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                    
++                           strcpy(text_value_3, (property_From_end)?"true":"false");
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), text_value_3, axutil_strlen(text_value_3));
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                           
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                   if(namespaces)
++                   {
++                       axutil_hash_index_t *hi;
++                       void *val;
++                       for (hi = axutil_hash_first(namespaces, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                       {
++                           axutil_hash_this(hi, NULL, NULL, &val);
++                           AXIS2_FREE(Environment::getEnv()->allocator, val);
++                       }
++                       axutil_hash_free(namespaces, Environment::getEnv());
++                   }
++                
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for data by  Property Number 1
++             */
++            AviaryCommon::JobData* WSF_CALL
++            AviaryQuery::GetJobData::getProperty1()
++            {
++                return getData();
++            }
++
++            /**
++             * getter for data.
++             */
++            AviaryCommon::JobData* WSF_CALL
++            AviaryQuery::GetJobData::getData()
++             {
++                return property_Data;
++             }
++
++            /**
++             * setter for data
++             */
++            bool WSF_CALL
++            AviaryQuery::GetJobData::setData(
++                    AviaryCommon::JobData*  arg_Data)
++             {
++                
++
++                if(isValidData &&
++                        arg_Data == property_Data)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(NULL == arg_Data)
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"data is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetData();
++
++                
++                    if(NULL == arg_Data)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_Data = arg_Data;
++                        isValidData = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for data
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobData::resetData()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++            
++                
++
++                if(property_Data != NULL)
++                {
++                   
++                   
++                         delete  property_Data;
++                     
++
++                   }
++
++                
++                
++                
++               isValidData = false; 
++               return true;
++           }
++
++           /**
++            * Check whether data is nill
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobData::isDataNil()
++           {
++               return !isValidData;
++           }
++
++           /**
++            * Set data to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobData::setDataNil()
++           {
++               return resetData();
++           }
++
++           
++
++            /**
++             * Getter for max_bytes by  Property Number 2
++             */
++            int WSF_CALL
++            AviaryQuery::GetJobData::getProperty2()
++            {
++                return getMax_bytes();
++            }
++
++            /**
++             * getter for max_bytes.
++             */
++            int WSF_CALL
++            AviaryQuery::GetJobData::getMax_bytes()
++             {
++                return property_Max_bytes;
++             }
++
++            /**
++             * setter for max_bytes
++             */
++            bool WSF_CALL
++            AviaryQuery::GetJobData::setMax_bytes(
++                    const int  arg_Max_bytes)
++             {
++                
++
++                if(isValidMax_bytes &&
++                        arg_Max_bytes == property_Max_bytes)
++                {
++                    
++                    return true;
++                }
++
++                
++
++                
++                resetMax_bytes();
++
++                
++                        property_Max_bytes = arg_Max_bytes;
++                        isValidMax_bytes = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for max_bytes
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobData::resetMax_bytes()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidMax_bytes = false; 
++               return true;
++           }
++
++           /**
++            * Check whether max_bytes is nill
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobData::isMax_bytesNil()
++           {
++               return !isValidMax_bytes;
++           }
++
++           /**
++            * Set max_bytes to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobData::setMax_bytesNil()
++           {
++               return resetMax_bytes();
++           }
++
++           
++
++            /**
++             * Getter for from_end by  Property Number 3
++             */
++            bool WSF_CALL
++            AviaryQuery::GetJobData::getProperty3()
++            {
++                return getFrom_end();
++            }
++
++            /**
++             * getter for from_end.
++             */
++            bool WSF_CALL
++            AviaryQuery::GetJobData::getFrom_end()
++             {
++                return property_From_end;
++             }
++
++            /**
++             * setter for from_end
++             */
++            bool WSF_CALL
++            AviaryQuery::GetJobData::setFrom_end(
++                    bool  arg_From_end)
++             {
++                
++
++                if(isValidFrom_end &&
++                        arg_From_end == property_From_end)
++                {
++                    
++                    return true;
++                }
++
++                
++
++                
++                resetFrom_end();
++
++                
++                        property_From_end = arg_From_end;
++                        isValidFrom_end = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for from_end
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobData::resetFrom_end()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidFrom_end = false; 
++               return true;
++           }
++
++           /**
++            * Check whether from_end is nill
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobData::isFrom_endNil()
++           {
++               return !isValidFrom_end;
++           }
++
++           /**
++            * Set from_end to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobData::setFrom_endNil()
++           {
++               return resetFrom_end();
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/codegen/query/src/AviaryQuery_GetJobDataResponse.cpp b/src/condor_contrib/aviary/codegen/query/src/AviaryQuery_GetJobDataResponse.cpp
+new file mode 100644
+index 0000000..10256d7
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/query/src/AviaryQuery_GetJobDataResponse.cpp
+@@ -0,0 +1,1511 @@
++
++
++        /**
++         * GetJobDataResponse.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryQuery_GetJobDataResponse.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryQuery;
++        
++               /*
++                * Implementation of the GetJobDataResponse|http://query.aviary.grid.redhat.com Element
++                */
++           AviaryQuery::GetJobDataResponse::GetJobDataResponse()
++        {
++
++        
++            qname = NULL;
++        
++                property_Data  = NULL;
++              
++            isValidData  = false;
++        
++                property_Status  = NULL;
++              
++            isValidStatus  = false;
++        
++                    property_File_name;
++                
++            isValidFile_name  = false;
++        
++            isValidFile_size  = false;
++        
++                    property_Content;
++                
++            isValidContent  = false;
++        
++                  qname =  axutil_qname_create (Environment::getEnv(),
++                        "GetJobDataResponse",
++                        "http://query.aviary.grid.redhat.com",
++                        NULL);
++                
++        }
++
++       AviaryQuery::GetJobDataResponse::GetJobDataResponse(AviaryCommon::JobData* arg_Data,AviaryCommon::Status* arg_Status,std::string arg_File_name,int arg_File_size,std::string arg_Content)
++        {
++             
++                   qname = NULL;
++             
++               property_Data  = NULL;
++             
++            isValidData  = true;
++            
++               property_Status  = NULL;
++             
++            isValidStatus  = true;
++            
++                 property_File_name;
++             
++            isValidFile_name  = true;
++            
++            isValidFile_size  = true;
++            
++                 property_Content;
++             
++            isValidContent  = true;
++            
++                 qname =  axutil_qname_create (Environment::getEnv(),
++                       "GetJobDataResponse",
++                       "http://query.aviary.grid.redhat.com",
++                       NULL);
++               
++                    property_Data = arg_Data;
++            
++                    property_Status = arg_Status;
++            
++                    property_File_name = arg_File_name;
++            
++                    property_File_size = arg_File_size;
++            
++                    property_Content = arg_Content;
++            
++        }
++        AviaryQuery::GetJobDataResponse::~GetJobDataResponse()
++        {
++
++        }
++
++        
++
++        bool WSF_CALL
++        AviaryQuery::GetJobDataResponse::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++            axutil_qname_t *element_qname = NULL; 
++            
++               axiom_node_t *first_node = NULL;
++               bool is_early_node_valid = true;
++               axiom_node_t *current_node = NULL;
++               axiom_element_t *current_element = NULL;
++            
++              
++              while(parent && axiom_node_get_node_type(parent, Environment::getEnv()) != AXIOM_ELEMENT)
++              {
++                  parent = axiom_node_get_next_sibling(parent, Environment::getEnv());
++              }
++              if (NULL == parent)
++              {   
++                return AXIS2_FAILURE;
++              }
++              
++
++                    current_element = (axiom_element_t *)axiom_node_get_data_element(parent, Environment::getEnv());
++                    mqname = axiom_element_get_qname(current_element, Environment::getEnv(), parent);
++                    if (axutil_qname_equals(mqname, Environment::getEnv(), this->qname))
++                    {
++                        
++                          first_node = axiom_node_get_first_child(parent, Environment::getEnv());
++                          
++                    }
++                    else
++                    {
++                        WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI,
++                              "Failed in building adb object for GetJobDataResponse : "
++                              "Expected %s but returned %s",
++                              axutil_qname_to_string(qname, Environment::getEnv()),
++                              axutil_qname_to_string(mqname, Environment::getEnv()));
++                        
++                        return AXIS2_FAILURE;
++                    }
++                    
++
++                     
++                     /*
++                      * building data element
++                      */
++                     
++                     
++                     
++                                   current_node = first_node;
++                                   is_early_node_valid = false;
++                                   
++                                   
++                                    while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                    {
++                                        current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                    }
++                                    if(current_node != NULL)
++                                    {
++                                        current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                        mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                    }
++                                   
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "data", NULL, NULL);
++                                 
++
++                           if (isParticle() ||  
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("data", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("data", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 AviaryCommon::JobData* element = new AviaryCommon::JobData();
++
++                                      status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                      if(AXIS2_FAILURE == status)
++                                      {
++                                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in building adb object for element data");
++                                      }
++                                      else
++                                      {
++                                          status = setData(element);
++                                      }
++                                    
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for data ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element data missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building status element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "status", NULL, NULL);
++                                 
++
++                           if (isParticle() ||  
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("status", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("status", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 AviaryCommon::Status* element = new AviaryCommon::Status();
++
++                                      status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                      if(AXIS2_FAILURE == status)
++                                      {
++                                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in building adb object for element status");
++                                      }
++                                      else
++                                      {
++                                          status = setStatus(element);
++                                      }
++                                    
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for status ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                              else if(!dont_care_minoccurs)
++                              {
++                                  if(element_qname)
++                                  {
++                                      axutil_qname_free(element_qname, Environment::getEnv());
++                                  }
++                                  /* this is not a nillable element*/
++				  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "non nillable or minOuccrs != 0 element status missing");
++                                  return AXIS2_FAILURE;
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building file_name element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "file_name", NULL, NULL);
++                                 
++
++                           if ( 
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("file_name", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("file_name", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 
++                                      text_value = axiom_element_get_text(current_element, Environment::getEnv(), current_node);
++                                      if(text_value != NULL)
++                                      {
++                                            status = setFile_name(text_value);
++                                      }
++                                      
++                                      else
++                                      {
++                                            /*
++                                             * axis2_qname_t *qname = NULL;
++                                             * axiom_attribute_t *the_attri = NULL;
++                                             * 
++                                             * qname = axutil_qname_create(Environment::getEnv(), "nil", "http://www.w3.org/2001/XMLSchema-instance", "xsi");
++                                             * the_attri = axiom_element_get_attribute(current_element, Environment::getEnv(), qname);
++                                             */
++                                            /* currently thereis a bug in the axiom_element_get_attribute, so we have to go to this bad method */
++
++                                            axiom_attribute_t *the_attri = NULL;
++                                            axis2_char_t *attrib_text = NULL;
++                                            axutil_hash_t *attribute_hash = NULL;
++
++                                            attribute_hash = axiom_element_get_all_attributes(current_element, Environment::getEnv());
++
++                                            attrib_text = NULL;
++                                            if(attribute_hash)
++                                            {
++                                                 axutil_hash_index_t *hi;
++                                                 void *val;
++                                                 const void *key;
++                                        
++                                                 for (hi = axutil_hash_first(attribute_hash, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                                                 {
++                                                     axutil_hash_this(hi, &key, NULL, &val);
++                                                     
++                                                     if(strstr((axis2_char_t*)key, "nil|http://www.w3.org/2001/XMLSchema-instance"))
++                                                     {
++                                                         the_attri = (axiom_attribute_t*)val;
++                                                         break;
++                                                     }
++                                                 }
++                                            }
++
++                                            if(the_attri)
++                                            {
++                                                attrib_text = axiom_attribute_get_value(the_attri, Environment::getEnv());
++                                            }
++                                            else
++                                            {
++                                                /* this is hoping that attribute is stored in "http://www.w3.org/2001/XMLSchema-instance", this happnes when name is in default namespace */
++                                                attrib_text = axiom_element_get_attribute_value_by_name(current_element, Environment::getEnv(), "nil");
++                                            }
++
++                                            if(attrib_text && 0 == axutil_strcmp(attrib_text, "1"))
++                                            {
++                                                WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "NULL value is set to a non nillable element file_name");
++                                                status = AXIS2_FAILURE;
++                                            }
++                                            else
++                                            {
++                                                /* after all, we found this is a empty string */
++                                                status = setFile_name("");
++                                            }
++                                      }
++                                      
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for file_name ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building file_size element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "file_size", NULL, NULL);
++                                 
++
++                           if ( 
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("file_size", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("file_size", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 
++                                      text_value = axiom_element_get_text(current_element, Environment::getEnv(), current_node);
++                                      if(text_value != NULL)
++                                      {
++                                            status = setFile_size(atoi(text_value));
++                                      }
++                                      
++                                      else
++                                      {
++                                          WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "NULL value is set to a non nillable element file_size");
++                                          status = AXIS2_FAILURE;
++                                      }
++                                      
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for file_size ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++
++                     
++                     /*
++                      * building content element
++                      */
++                     
++                     
++                     
++                                    /*
++                                     * because elements are ordered this works fine
++                                     */
++                                  
++                                   
++                                   if(current_node != NULL && is_early_node_valid)
++                                   {
++                                       current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                       
++                                       
++                                        while(current_node && axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                        {
++                                            current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                        }
++                                        if(current_node != NULL)
++                                        {
++                                            current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                            mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++                                        }
++                                       
++                                   }
++                                   is_early_node_valid = false;
++                                 
++                                 element_qname = axutil_qname_create(Environment::getEnv(), "content", NULL, NULL);
++                                 
++
++                           if ( 
++                                (current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("content", axiom_element_get_localname(current_element, Environment::getEnv())))))
++                           {
++                              if( current_node   && current_element && (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("content", axiom_element_get_localname(current_element, Environment::getEnv()))))
++                              {
++                                is_early_node_valid = true;
++                              }
++                              
++                                 
++                                      text_value = axiom_element_get_text(current_element, Environment::getEnv(), current_node);
++                                      if(text_value != NULL)
++                                      {
++                                            status = setContent(text_value);
++                                      }
++                                      
++                                      else
++                                      {
++                                            /*
++                                             * axis2_qname_t *qname = NULL;
++                                             * axiom_attribute_t *the_attri = NULL;
++                                             * 
++                                             * qname = axutil_qname_create(Environment::getEnv(), "nil", "http://www.w3.org/2001/XMLSchema-instance", "xsi");
++                                             * the_attri = axiom_element_get_attribute(current_element, Environment::getEnv(), qname);
++                                             */
++                                            /* currently thereis a bug in the axiom_element_get_attribute, so we have to go to this bad method */
++
++                                            axiom_attribute_t *the_attri = NULL;
++                                            axis2_char_t *attrib_text = NULL;
++                                            axutil_hash_t *attribute_hash = NULL;
++
++                                            attribute_hash = axiom_element_get_all_attributes(current_element, Environment::getEnv());
++
++                                            attrib_text = NULL;
++                                            if(attribute_hash)
++                                            {
++                                                 axutil_hash_index_t *hi;
++                                                 void *val;
++                                                 const void *key;
++                                        
++                                                 for (hi = axutil_hash_first(attribute_hash, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                                                 {
++                                                     axutil_hash_this(hi, &key, NULL, &val);
++                                                     
++                                                     if(strstr((axis2_char_t*)key, "nil|http://www.w3.org/2001/XMLSchema-instance"))
++                                                     {
++                                                         the_attri = (axiom_attribute_t*)val;
++                                                         break;
++                                                     }
++                                                 }
++                                            }
++
++                                            if(the_attri)
++                                            {
++                                                attrib_text = axiom_attribute_get_value(the_attri, Environment::getEnv());
++                                            }
++                                            else
++                                            {
++                                                /* this is hoping that attribute is stored in "http://www.w3.org/2001/XMLSchema-instance", this happnes when name is in default namespace */
++                                                attrib_text = axiom_element_get_attribute_value_by_name(current_element, Environment::getEnv(), "nil");
++                                            }
++
++                                            if(attrib_text && 0 == axutil_strcmp(attrib_text, "1"))
++                                            {
++                                                WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "NULL value is set to a non nillable element content");
++                                                status = AXIS2_FAILURE;
++                                            }
++                                            else
++                                            {
++                                                /* after all, we found this is a empty string */
++                                                status = setContent("");
++                                            }
++                                      }
++                                      
++                                 if(AXIS2_FAILURE ==  status)
++                                 {
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"failed in setting the value for content ");
++                                     if(element_qname)
++                                     {
++                                         axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     return AXIS2_FAILURE;
++                                 }
++                              }
++                           
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryQuery::GetJobDataResponse::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryQuery::GetJobDataResponse::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryQuery::GetJobDataResponse::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++                axiom_namespace_t *ns1 = NULL;
++
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                axis2_char_t *p_prefix = NULL;
++            
++                    axis2_char_t text_value_1[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++                    axis2_char_t text_value_2[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++                    axis2_char_t *text_value_3;
++                    axis2_char_t *text_value_3_temp;
++                    
++                    axis2_char_t text_value_4[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++                    axis2_char_t *text_value_5;
++                    axis2_char_t *text_value_5_temp;
++                    
++               axis2_char_t *start_input_str = NULL;
++               axis2_char_t *end_input_str = NULL;
++               unsigned int start_input_str_len = 0;
++               unsigned int end_input_str_len = 0;
++            
++            
++               axiom_data_source_t *data_source = NULL;
++               axutil_stream_t *stream = NULL;
++
++             
++                int next_ns_index_value = 0;
++             
++                    namespaces = axutil_hash_make(Environment::getEnv());
++                    next_ns_index = &next_ns_index_value;
++                     
++                           ns1 = axiom_namespace_create (Environment::getEnv(),
++                                             "http://query.aviary.grid.redhat.com",
++                                             "n"); 
++                           axutil_hash_set(namespaces, "http://query.aviary.grid.redhat.com", AXIS2_HASH_KEY_STRING, axutil_strdup(Environment::getEnv(), "n"));
++                       
++                     
++                    parent_element = axiom_element_create (Environment::getEnv(), NULL, "GetJobDataResponse", ns1 , &parent);
++                    
++                    
++                    axiom_element_set_namespace(parent_element, Environment::getEnv(), ns1, parent);
++
++
++            
++                    data_source = axiom_data_source_create(Environment::getEnv(), parent, &current_node);
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv());
++                  
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidData)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property data");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("data"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("data")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing data element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sdata",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":""); 
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sdata>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                     
++                            if(!property_Data->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                            }
++                            property_Data->serialize(current_node, parent_element,
++                                                                                 property_Data->isParticle() || false, namespaces, next_ns_index);
++                            
++                            if(!property_Data->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                            }
++                            
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidStatus)
++                   {
++                      
++                            
++                            WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"Nil value found in non-nillable property status");
++                            return NULL;
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("status"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("status")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing status element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sstatus",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":""); 
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sstatus>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                     
++                            if(!property_Status->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                            }
++                            property_Status->serialize(current_node, parent_element,
++                                                                                 property_Status->isParticle() || false, namespaces, next_ns_index);
++                            
++                            if(!property_Status->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                            }
++                            
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidFile_name)
++                   {
++                      
++                           /* no need to complain for minoccurs=0 element */
++                            
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("file_name"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("file_name")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing file_name element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sfile_name>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sfile_name>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                    
++                           text_value_3 = (axis2_char_t*)property_File_name.c_str();
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                           
++                            
++                           text_value_3_temp = axutil_xml_quote_string(Environment::getEnv(), text_value_3, true);
++                           if (text_value_3_temp)
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_3_temp, axutil_strlen(text_value_3_temp));
++                               AXIS2_FREE(Environment::getEnv()->allocator, text_value_3_temp);
++                           }
++                           else
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_3, axutil_strlen(text_value_3));
++                           }
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                           
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidFile_size)
++                   {
++                      
++                           /* no need to complain for minoccurs=0 element */
++                            
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("file_size"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("file_size")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing file_size element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%sfile_size>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%sfile_size>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                    
++                               sprintf (text_value_4, AXIS2_PRINTF_INT32_FORMAT_SPECIFIER, property_File_size);
++                             
++                           axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), text_value_4, axutil_strlen(text_value_4));
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                           
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidContent)
++                   {
++                      
++                           /* no need to complain for minoccurs=0 element */
++                            
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("content"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("content")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     
++                     /*
++                      * parsing content element
++                      */
++
++                    
++                    
++                            sprintf(start_input_str, "<%s%scontent>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                        start_input_str_len = axutil_strlen(start_input_str);
++                        sprintf(end_input_str, "</%s%scontent>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                        end_input_str_len = axutil_strlen(end_input_str);
++                    
++                           text_value_5 = (axis2_char_t*)property_Content.c_str();
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                           
++                            
++                           text_value_5_temp = axutil_xml_quote_string(Environment::getEnv(), text_value_5, true);
++                           if (text_value_5_temp)
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_5_temp, axutil_strlen(text_value_5_temp));
++                               AXIS2_FREE(Environment::getEnv()->allocator, text_value_5_temp);
++                           }
++                           else
++                           {
++                               axutil_stream_write(stream, Environment::getEnv(), text_value_5, axutil_strlen(text_value_5));
++                           }
++                           
++                           axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                           
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                   if(namespaces)
++                   {
++                       axutil_hash_index_t *hi;
++                       void *val;
++                       for (hi = axutil_hash_first(namespaces, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                       {
++                           axutil_hash_this(hi, NULL, NULL, &val);
++                           AXIS2_FREE(Environment::getEnv()->allocator, val);
++                       }
++                       axutil_hash_free(namespaces, Environment::getEnv());
++                   }
++                
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for data by  Property Number 1
++             */
++            AviaryCommon::JobData* WSF_CALL
++            AviaryQuery::GetJobDataResponse::getProperty1()
++            {
++                return getData();
++            }
++
++            /**
++             * getter for data.
++             */
++            AviaryCommon::JobData* WSF_CALL
++            AviaryQuery::GetJobDataResponse::getData()
++             {
++                return property_Data;
++             }
++
++            /**
++             * setter for data
++             */
++            bool WSF_CALL
++            AviaryQuery::GetJobDataResponse::setData(
++                    AviaryCommon::JobData*  arg_Data)
++             {
++                
++
++                if(isValidData &&
++                        arg_Data == property_Data)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(NULL == arg_Data)
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"data is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetData();
++
++                
++                    if(NULL == arg_Data)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_Data = arg_Data;
++                        isValidData = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for data
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobDataResponse::resetData()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++            
++                
++
++                if(property_Data != NULL)
++                {
++                   
++                   
++                         delete  property_Data;
++                     
++
++                   }
++
++                
++                
++                
++               isValidData = false; 
++               return true;
++           }
++
++           /**
++            * Check whether data is nill
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobDataResponse::isDataNil()
++           {
++               return !isValidData;
++           }
++
++           /**
++            * Set data to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobDataResponse::setDataNil()
++           {
++               return resetData();
++           }
++
++           
++
++            /**
++             * Getter for status by  Property Number 2
++             */
++            AviaryCommon::Status* WSF_CALL
++            AviaryQuery::GetJobDataResponse::getProperty2()
++            {
++                return getStatus();
++            }
++
++            /**
++             * getter for status.
++             */
++            AviaryCommon::Status* WSF_CALL
++            AviaryQuery::GetJobDataResponse::getStatus()
++             {
++                return property_Status;
++             }
++
++            /**
++             * setter for status
++             */
++            bool WSF_CALL
++            AviaryQuery::GetJobDataResponse::setStatus(
++                    AviaryCommon::Status*  arg_Status)
++             {
++                
++
++                if(isValidStatus &&
++                        arg_Status == property_Status)
++                {
++                    
++                    return true;
++                }
++
++                
++                  if(NULL == arg_Status)
++                       
++                  {
++                      WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"status is being set to NULL, but it is not a nullable element");
++                      return AXIS2_FAILURE;
++                  }
++                
++
++                
++                resetStatus();
++
++                
++                    if(NULL == arg_Status)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_Status = arg_Status;
++                        isValidStatus = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for status
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobDataResponse::resetStatus()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++            
++                
++
++                if(property_Status != NULL)
++                {
++                   
++                   
++                         delete  property_Status;
++                     
++
++                   }
++
++                
++                
++                
++               isValidStatus = false; 
++               return true;
++           }
++
++           /**
++            * Check whether status is nill
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobDataResponse::isStatusNil()
++           {
++               return !isValidStatus;
++           }
++
++           /**
++            * Set status to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobDataResponse::setStatusNil()
++           {
++               return resetStatus();
++           }
++
++           
++
++            /**
++             * Getter for file_name by  Property Number 3
++             */
++            std::string WSF_CALL
++            AviaryQuery::GetJobDataResponse::getProperty3()
++            {
++                return getFile_name();
++            }
++
++            /**
++             * getter for file_name.
++             */
++            std::string WSF_CALL
++            AviaryQuery::GetJobDataResponse::getFile_name()
++             {
++                return property_File_name;
++             }
++
++            /**
++             * setter for file_name
++             */
++            bool WSF_CALL
++            AviaryQuery::GetJobDataResponse::setFile_name(
++                    const std::string  arg_File_name)
++             {
++                
++
++                if(isValidFile_name &&
++                        arg_File_name == property_File_name)
++                {
++                    
++                    return true;
++                }
++
++                
++
++                
++                resetFile_name();
++
++                
++                        property_File_name = std::string(arg_File_name.c_str());
++                        isValidFile_name = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for file_name
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobDataResponse::resetFile_name()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidFile_name = false; 
++               return true;
++           }
++
++           /**
++            * Check whether file_name is nill
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobDataResponse::isFile_nameNil()
++           {
++               return !isValidFile_name;
++           }
++
++           /**
++            * Set file_name to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobDataResponse::setFile_nameNil()
++           {
++               return resetFile_name();
++           }
++
++           
++
++            /**
++             * Getter for file_size by  Property Number 4
++             */
++            int WSF_CALL
++            AviaryQuery::GetJobDataResponse::getProperty4()
++            {
++                return getFile_size();
++            }
++
++            /**
++             * getter for file_size.
++             */
++            int WSF_CALL
++            AviaryQuery::GetJobDataResponse::getFile_size()
++             {
++                return property_File_size;
++             }
++
++            /**
++             * setter for file_size
++             */
++            bool WSF_CALL
++            AviaryQuery::GetJobDataResponse::setFile_size(
++                    const int  arg_File_size)
++             {
++                
++
++                if(isValidFile_size &&
++                        arg_File_size == property_File_size)
++                {
++                    
++                    return true;
++                }
++
++                
++
++                
++                resetFile_size();
++
++                
++                        property_File_size = arg_File_size;
++                        isValidFile_size = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for file_size
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobDataResponse::resetFile_size()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidFile_size = false; 
++               return true;
++           }
++
++           /**
++            * Check whether file_size is nill
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobDataResponse::isFile_sizeNil()
++           {
++               return !isValidFile_size;
++           }
++
++           /**
++            * Set file_size to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobDataResponse::setFile_sizeNil()
++           {
++               return resetFile_size();
++           }
++
++           
++
++            /**
++             * Getter for content by  Property Number 5
++             */
++            std::string WSF_CALL
++            AviaryQuery::GetJobDataResponse::getProperty5()
++            {
++                return getContent();
++            }
++
++            /**
++             * getter for content.
++             */
++            std::string WSF_CALL
++            AviaryQuery::GetJobDataResponse::getContent()
++             {
++                return property_Content;
++             }
++
++            /**
++             * setter for content
++             */
++            bool WSF_CALL
++            AviaryQuery::GetJobDataResponse::setContent(
++                    const std::string  arg_Content)
++             {
++                
++
++                if(isValidContent &&
++                        arg_Content == property_Content)
++                {
++                    
++                    return true;
++                }
++
++                
++
++                
++                resetContent();
++
++                
++                        property_Content = std::string(arg_Content.c_str());
++                        isValidContent = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for content
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobDataResponse::resetContent()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidContent = false; 
++               return true;
++           }
++
++           /**
++            * Check whether content is nill
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobDataResponse::isContentNil()
++           {
++               return !isValidContent;
++           }
++
++           /**
++            * Set content to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobDataResponse::setContentNil()
++           {
++               return resetContent();
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/codegen/query/src/AviaryQuery_GetJobDetails.cpp b/src/condor_contrib/aviary/codegen/query/src/AviaryQuery_GetJobDetails.cpp
+new file mode 100644
+index 0000000..e09bf50
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/query/src/AviaryQuery_GetJobDetails.cpp
+@@ -0,0 +1,980 @@
++
++
++        /**
++         * GetJobDetails.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryQuery_GetJobDetails.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryQuery;
++        
++               /*
++                * Implementation of the GetJobDetails|http://query.aviary.grid.redhat.com Element
++                */
++           AviaryQuery::GetJobDetails::GetJobDetails()
++        {
++
++        
++            qname = NULL;
++        
++                property_Ids  = NULL;
++              
++            isValidIds  = false;
++        
++            isValidPartialMatches  = false;
++        
++                  qname =  axutil_qname_create (Environment::getEnv(),
++                        "GetJobDetails",
++                        "http://query.aviary.grid.redhat.com",
++                        NULL);
++                
++        }
++
++       AviaryQuery::GetJobDetails::GetJobDetails(std::vector<AviaryCommon::JobID*>* arg_Ids,bool arg_PartialMatches)
++        {
++             
++                   qname = NULL;
++             
++               property_Ids  = NULL;
++             
++            isValidIds  = true;
++            
++            isValidPartialMatches  = true;
++            
++                 qname =  axutil_qname_create (Environment::getEnv(),
++                       "GetJobDetails",
++                       "http://query.aviary.grid.redhat.com",
++                       NULL);
++               
++                    property_Ids = arg_Ids;
++            
++                    property_PartialMatches = arg_PartialMatches;
++            
++        }
++        AviaryQuery::GetJobDetails::~GetJobDetails()
++        {
++
++        }
++
++        
++
++        bool WSF_CALL
++        AviaryQuery::GetJobDetails::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++          
++          axiom_attribute_t *parent_attri = NULL;
++          axiom_element_t *parent_element = NULL;
++          axis2_char_t *attrib_text = NULL;
++
++          axutil_hash_t *attribute_hash = NULL;
++
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++               int i = 0;
++            
++               int sequence_broken = 0;
++               axiom_node_t *tmp_node = NULL;
++            
++            axutil_qname_t *element_qname = NULL; 
++            
++               axiom_node_t *first_node = NULL;
++               bool is_early_node_valid = true;
++               axiom_node_t *current_node = NULL;
++               axiom_element_t *current_element = NULL;
++            
++              
++              while(parent && axiom_node_get_node_type(parent, Environment::getEnv()) != AXIOM_ELEMENT)
++              {
++                  parent = axiom_node_get_next_sibling(parent, Environment::getEnv());
++              }
++              if (NULL == parent)
++              {   
++                return AXIS2_FAILURE;
++              }
++              
++
++                    current_element = (axiom_element_t *)axiom_node_get_data_element(parent, Environment::getEnv());
++                    mqname = axiom_element_get_qname(current_element, Environment::getEnv(), parent);
++                    if (axutil_qname_equals(mqname, Environment::getEnv(), this->qname))
++                    {
++                        
++                          first_node = axiom_node_get_first_child(parent, Environment::getEnv());
++                          
++                    }
++                    else
++                    {
++                        WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI,
++                              "Failed in building adb object for GetJobDetails : "
++                              "Expected %s but returned %s",
++                              axutil_qname_to_string(qname, Environment::getEnv()),
++                              axutil_qname_to_string(mqname, Environment::getEnv()));
++                        
++                        return AXIS2_FAILURE;
++                    }
++                    
++                 parent_element = (axiom_element_t *)axiom_node_get_data_element(parent, Environment::getEnv());
++                 attribute_hash = axiom_element_get_all_attributes(parent_element, Environment::getEnv());
++              
++                       { 
++                    /*
++                     * building Ids array
++                     */
++                       std::vector<AviaryCommon::JobID*>* arr_list =new std::vector<AviaryCommon::JobID*>();
++                   
++
++                     
++                     /*
++                      * building ids element
++                      */
++                     
++                     
++                     
++                                    element_qname = axutil_qname_create(Environment::getEnv(), "ids", NULL, NULL);
++                                  
++                               
++                               for (i = 0, sequence_broken = 0, current_node = first_node; !sequence_broken && current_node != NULL;)
++                                             
++                               {
++                                  if(axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                  {
++                                     current_node =axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                     is_early_node_valid = false;
++                                     continue;
++                                  }
++                                  
++                                  current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                  mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++
++                                  if (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("ids", axiom_element_get_localname(current_element, Environment::getEnv())))
++                                  {
++                                  
++                                      is_early_node_valid = true;
++                                      
++                                     AviaryCommon::JobID* element = new AviaryCommon::JobID();
++                                          
++                                          status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                          
++                                          if(AXIS2_FAILURE ==  status)
++                                          {
++					  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "failed in building element ids ");
++                                          }
++                                          else
++                                          {
++                                            arr_list->push_back(element);
++                                            
++                                          }
++                                        
++                                     if(AXIS2_FAILURE ==  status)
++                                     {
++                                         WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in setting the value for ids ");
++                                         if(element_qname)
++                                         {
++                                            axutil_qname_free(element_qname, Environment::getEnv());
++                                         }
++                                         if(arr_list)
++                                         {
++                                            delete arr_list;
++                                         }
++                                         return false;
++                                     }
++
++                                     i++;
++                                    current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                  }
++                                  else
++                                  {
++                                      is_early_node_valid = false;
++                                      sequence_broken = 1;
++                                  }
++                                  
++                               }
++
++                               
++                                   if (i < 0)
++                                   {
++                                     /* found element out of order */
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"ids (@minOccurs = '0') only have %d elements", i);
++                                     if(element_qname)
++                                     {
++                                        axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     if(arr_list)
++                                     {
++                                        delete arr_list;
++                                     }
++                                     return false;
++                                   }
++                               
++
++                               if(0 == arr_list->size())
++                               {
++                                    delete arr_list;
++                               }
++                               else
++                               {
++                                    status = setIds(arr_list);
++                               }
++
++                              
++                            } 
++                        
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++                
++                
++                  parent_attri = NULL;
++                  attrib_text = NULL;
++                  if(attribute_hash)
++                  {
++                       axutil_hash_index_t *hi;
++                       void *val;
++                       const void *key;
++
++                       for (hi = axutil_hash_first(attribute_hash, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                       {
++                           axutil_hash_this(hi, &key, NULL, &val);
++                           
++                           
++                               if(!strcmp((axis2_char_t*)key, "partialMatches"))
++                             
++                               {
++                                   parent_attri = (axiom_attribute_t*)val;
++                                   break;
++                               }
++                       }
++                  }
++
++                  if(parent_attri)
++                  {
++                    attrib_text = axiom_attribute_get_value(parent_attri, Environment::getEnv());
++                  }
++                  else
++                  {
++                    /* this is hoping that attribute is stored in "partialMatches", this happnes when name is in default namespace */
++                    attrib_text = axiom_element_get_attribute_value_by_name(parent_element, Environment::getEnv(), "partialMatches");
++                  }
++
++                  if(attrib_text != NULL)
++                  {
++                      
++                      
++                           if (!axutil_strcmp(attrib_text, "TRUE") || !axutil_strcmp(attrib_text, "true"))
++                           {
++                               setPartialMatches(true);
++                           }
++                           else
++                           {
++                               setPartialMatches(false);
++                           }
++                        
++                    }
++                  
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryQuery::GetJobDetails::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryQuery::GetJobDetails::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryQuery::GetJobDetails::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++               axiom_attribute_t *text_attri = NULL;
++             
++             axis2_char_t *string_to_stream;
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++                axiom_namespace_t *ns1 = NULL;
++
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                axis2_char_t *p_prefix = NULL;
++            
++               int i = 0;
++               int count = 0;
++               void *element = NULL;
++             
++                    axis2_char_t text_value_1[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++                    axis2_char_t text_value_2[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++                axis2_char_t *text_value = NULL;
++             
++               axis2_char_t *start_input_str = NULL;
++               axis2_char_t *end_input_str = NULL;
++               unsigned int start_input_str_len = 0;
++               unsigned int end_input_str_len = 0;
++            
++            
++               axiom_data_source_t *data_source = NULL;
++               axutil_stream_t *stream = NULL;
++
++             
++                int next_ns_index_value = 0;
++             
++                    namespaces = axutil_hash_make(Environment::getEnv());
++                    next_ns_index = &next_ns_index_value;
++                     
++                           ns1 = axiom_namespace_create (Environment::getEnv(),
++                                             "http://query.aviary.grid.redhat.com",
++                                             "n"); 
++                           axutil_hash_set(namespaces, "http://query.aviary.grid.redhat.com", AXIS2_HASH_KEY_STRING, axutil_strdup(Environment::getEnv(), "n"));
++                       
++                     
++                    parent_element = axiom_element_create (Environment::getEnv(), NULL, "GetJobDetails", ns1 , &parent);
++                    
++                    
++                    axiom_element_set_namespace(parent_element, Environment::getEnv(), ns1, parent);
++
++
++            
++                    data_source = axiom_data_source_create(Environment::getEnv(), parent, &current_node);
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv());
++                  
++            if(!parent_tag_closed)
++            {
++            
++                if(isValidPartialMatches)
++                {
++                
++                        p_prefix = NULL;
++                      
++                           
++                           text_value = (axis2_char_t*)((property_PartialMatches)?"true":"false");
++                           string_to_stream = (axis2_char_t*) AXIS2_MALLOC (Environment::getEnv()-> allocator, sizeof (axis2_char_t) *
++                                                            (5  + ADB_DEFAULT_NAMESPACE_PREFIX_LIMIT +
++                                                             axutil_strlen(text_value) + 
++                                                             axutil_strlen("partialMatches")));
++                           sprintf(string_to_stream, " %s%s%s=\"%s\"", p_prefix?p_prefix:"", (p_prefix && axutil_strcmp(p_prefix, ""))?":":"",
++                                                "partialMatches",  text_value);
++                           axutil_stream_write(stream, Environment::getEnv(), string_to_stream, axutil_strlen(string_to_stream));
++                           AXIS2_FREE(Environment::getEnv()-> allocator, string_to_stream);
++                        
++                   }
++                   
++            }
++            
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidIds)
++                   {
++                      
++                           /* no need to complain for minoccurs=0 element */
++                            
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("ids"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("ids")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     /*
++                      * Parsing Ids array
++                      */
++                     if (property_Ids != NULL)
++                     {
++                        
++
++                            sprintf(start_input_str, "<%s%sids",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                         start_input_str_len = axutil_strlen(start_input_str);
++
++                         sprintf(end_input_str, "</%s%sids>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                         end_input_str_len = axutil_strlen(end_input_str);
++
++                         count = property_Ids->size();
++                         for(i = 0; i < count; i++)
++                         {
++                            AviaryCommon::JobID* element = (*property_Ids)[i];
++
++                            if(NULL == element) 
++                            {
++                                continue;
++                            }
++
++                    
++                     
++                     /*
++                      * parsing ids element
++                      */
++
++                    
++                     
++                            if(!element->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                            }
++                            element->serialize(current_node, parent_element,
++                                                                                 element->isParticle() || false, namespaces, next_ns_index);
++                            
++                            if(!element->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                            }
++                            
++                         }
++                     }
++                   
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                    
++                    if(parent_tag_closed)
++                    {
++                       if(isValidPartialMatches)
++                       {
++                       
++                           p_prefix = NULL;
++                           ns1 = NULL;
++                         
++                           
++                           text_value =  (axis2_char_t*)((property_PartialMatches)?axutil_strdup(Environment::getEnv(), "true"):axutil_strdup(Environment::getEnv(), "false"));
++                           text_attri = axiom_attribute_create (Environment::getEnv(), "partialMatches", text_value, ns1);
++                           axiom_element_add_attribute (parent_element, Environment::getEnv(), text_attri, parent);
++                           AXIS2_FREE(Environment::getEnv()->allocator, text_value);
++                        
++                      }
++                       
++                  }
++                
++                   if(namespaces)
++                   {
++                       axutil_hash_index_t *hi;
++                       void *val;
++                       for (hi = axutil_hash_first(namespaces, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                       {
++                           axutil_hash_this(hi, NULL, NULL, &val);
++                           AXIS2_FREE(Environment::getEnv()->allocator, val);
++                       }
++                       axutil_hash_free(namespaces, Environment::getEnv());
++                   }
++                
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for ids by  Property Number 1
++             */
++            std::vector<AviaryCommon::JobID*>* WSF_CALL
++            AviaryQuery::GetJobDetails::getProperty1()
++            {
++                return getIds();
++            }
++
++            /**
++             * getter for ids.
++             */
++            std::vector<AviaryCommon::JobID*>* WSF_CALL
++            AviaryQuery::GetJobDetails::getIds()
++             {
++                return property_Ids;
++             }
++
++            /**
++             * setter for ids
++             */
++            bool WSF_CALL
++            AviaryQuery::GetJobDetails::setIds(
++                    std::vector<AviaryCommon::JobID*>*  arg_Ids)
++             {
++                
++                 int size = 0;
++                 int i = 0;
++                 bool non_nil_exists = false;
++                
++
++                if(isValidIds &&
++                        arg_Ids == property_Ids)
++                {
++                    
++                    return true;
++                }
++
++                
++                 size = arg_Ids->size();
++                 
++                 if (size < 0)
++                 {
++                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"ids has less than minOccurs(0)");
++                     return false;
++                 }
++                 for(i = 0; i < size; i ++ )
++                 {
++                     if(NULL != (*arg_Ids)[i])
++                     {
++                         non_nil_exists = true;
++                         break;
++                     }
++                 }
++
++                 
++
++                
++                resetIds();
++
++                
++                    if(NULL == arg_Ids)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_Ids = arg_Ids;
++                        if(non_nil_exists)
++                        {
++                            isValidIds = true;
++                        }
++                        
++                    
++                return true;
++             }
++
++            
++            /**
++             * Get ith element of ids.
++             */
++            AviaryCommon::JobID* WSF_CALL
++            AviaryQuery::GetJobDetails::getIdsAt(int i)
++            {
++                AviaryCommon::JobID* ret_val;
++                if(property_Ids == NULL)
++                {
++                    return (AviaryCommon::JobID*)0;
++                }
++                ret_val =   (*property_Ids)[i];
++                
++                    return ret_val;
++                  
++            }
++
++            /**
++             * Set the ith element of ids.
++             */
++           bool WSF_CALL
++            AviaryQuery::GetJobDetails::setIdsAt(int i,
++                    AviaryCommon::JobID* arg_Ids)
++            {
++                 AviaryCommon::JobID* element;
++                int size = 0;
++
++                int non_nil_count;
++                bool non_nil_exists = false;
++
++                 
++
++                if( isValidIds &&
++                    property_Ids &&
++                  
++                    arg_Ids == (*property_Ids)[i])
++                  
++                 {
++                    
++                    return AXIS2_SUCCESS; 
++                }
++
++                   
++                     non_nil_exists = true;
++                  
++
++                if(property_Ids == NULL)
++                {
++                    property_Ids = new std::vector<AviaryCommon::JobID*>();
++                }
++                else{
++                /* check whether there already exist an element */
++                element = (*property_Ids)[i];
++                }
++
++                
++                        if(NULL != element)
++                        {
++                          
++                          
++                          
++                                delete element;
++                             
++                        }
++                        
++                    
++                    if(!non_nil_exists)
++                    {
++                        
++                        isValidIds = true;
++                        (*property_Ids)[i]= NULL;
++                        
++                        return AXIS2_SUCCESS;
++                    }
++                
++                    (*property_Ids)[i] = arg_Ids;
++                  
++
++               isValidIds = true;
++                
++                return AXIS2_SUCCESS;
++            }
++
++            /**
++             * Add to ids.
++             */
++            bool WSF_CALL
++            AviaryQuery::GetJobDetails::addIds(
++                    AviaryCommon::JobID* arg_Ids)
++             {
++
++                
++                    if( NULL == arg_Ids
++                     )
++                    {
++                      
++                           return true; 
++                        
++                    }
++                  
++
++                if(property_Ids == NULL)
++                {
++                    property_Ids = new std::vector<AviaryCommon::JobID*>();
++                }
++              
++               property_Ids->push_back(arg_Ids);
++              
++                isValidIds = true;
++                return true;
++             }
++
++            /**
++             * Get the size of the ids array.
++             */
++            int WSF_CALL
++            AviaryQuery::GetJobDetails::sizeofIds()
++            {
++
++                if(property_Ids == NULL)
++                {
++                    return 0;
++                }
++                return property_Ids->size();
++            }
++
++            /**
++             * remove the ith element, same as set_nil_at.
++             */
++            bool WSF_CALL
++            AviaryQuery::GetJobDetails::removeIdsAt(int i)
++            {
++                return setIdsNilAt(i);
++            }
++
++            
++
++           /**
++            * resetter for ids
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobDetails::resetIds()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++                if (property_Ids != NULL)
++                {
++                  std::vector<AviaryCommon::JobID*>::iterator it =  property_Ids->begin();
++                  for( ; it <  property_Ids->end() ; ++it)
++                  {
++                     AviaryCommon::JobID* element = *it;
++                
++            
++                
++
++                if(element != NULL)
++                {
++                   
++                   
++                         delete  element;
++                     
++
++                   }
++
++                
++                
++                
++               }
++
++             }
++                
++                    if(NULL != property_Ids)
++                 delete property_Ids;
++                
++               isValidIds = false; 
++               return true;
++           }
++
++           /**
++            * Check whether ids is nill
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobDetails::isIdsNil()
++           {
++               return !isValidIds;
++           }
++
++           /**
++            * Set ids to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobDetails::setIdsNil()
++           {
++               return resetIds();
++           }
++
++           
++           /**
++            * Check whether ids is nill at i
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobDetails::isIdsNilAt(int i)
++           {
++               return (isValidIds == false ||
++                       NULL == property_Ids ||
++                     NULL == (*property_Ids)[i]);
++            }
++
++           /**
++            * Set ids to nil at i
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobDetails::setIdsNilAt(int i)
++           {
++                int size = 0;
++                int j;
++                bool non_nil_exists = false;
++
++                int k = 0;
++
++                if(property_Ids == NULL ||
++                            isValidIds == false)
++                {
++                    
++                    non_nil_exists = false;
++                }
++                else
++                {
++                    size = property_Ids->size();
++                    for(j = 0, k = 0; j < size; j ++ )
++                    {
++                        if(i == j) continue; 
++                        if(NULL != (*property_Ids)[i])
++                        {
++                            k++;
++                            non_nil_exists = true;
++                            if( k >= 0)
++                            {
++                                break;
++                            }
++                        }
++                    }
++                }
++                
++
++                if( k < 0)
++                {
++                       WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "Size of the array of ids is beinng set to be smaller than the specificed number of minOccurs(0)");
++                       return AXIS2_FAILURE;
++                }
++ 
++                if(property_Ids == NULL)
++                {
++                    isValidIds = false;
++                    
++                    return true;
++                }
++                 
++                 /* check whether there already exist an element */
++                 AviaryCommon::JobID* element = (*property_Ids)[i];
++                if(NULL != element)
++                {
++                  
++                  
++                  
++                        delete element;
++                     
++                 }
++                 
++                    if(!non_nil_exists)
++                    {
++                        
++                        isValidIds = false;
++                        (*property_Ids)[i] = NULL;
++                        return AXIS2_SUCCESS;
++                    }
++                
++
++                
++                (*property_Ids)[i] = NULL;
++                
++                return AXIS2_SUCCESS;
++
++           }
++
++           
++
++            /**
++             * Getter for partialMatches by  Property Number 2
++             */
++            bool WSF_CALL
++            AviaryQuery::GetJobDetails::getProperty2()
++            {
++                return getPartialMatches();
++            }
++
++            /**
++             * getter for partialMatches.
++             */
++            bool WSF_CALL
++            AviaryQuery::GetJobDetails::getPartialMatches()
++             {
++                return property_PartialMatches;
++             }
++
++            /**
++             * setter for partialMatches
++             */
++            bool WSF_CALL
++            AviaryQuery::GetJobDetails::setPartialMatches(
++                    bool  arg_PartialMatches)
++             {
++                
++
++                if(isValidPartialMatches &&
++                        arg_PartialMatches == property_PartialMatches)
++                {
++                    
++                    return true;
++                }
++
++                
++
++                
++                resetPartialMatches();
++
++                
++                        property_PartialMatches = arg_PartialMatches;
++                        isValidPartialMatches = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for partialMatches
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobDetails::resetPartialMatches()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidPartialMatches = false; 
++               return true;
++           }
++
++           /**
++            * Check whether partialMatches is nill
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobDetails::isPartialMatchesNil()
++           {
++               return !isValidPartialMatches;
++           }
++
++           /**
++            * Set partialMatches to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobDetails::setPartialMatchesNil()
++           {
++               return resetPartialMatches();
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/codegen/query/src/AviaryQuery_GetJobDetailsResponse.cpp b/src/condor_contrib/aviary/codegen/query/src/AviaryQuery_GetJobDetailsResponse.cpp
+new file mode 100644
+index 0000000..05025b8
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/query/src/AviaryQuery_GetJobDetailsResponse.cpp
+@@ -0,0 +1,776 @@
++
++
++        /**
++         * GetJobDetailsResponse.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryQuery_GetJobDetailsResponse.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryQuery;
++        
++               /*
++                * Implementation of the GetJobDetailsResponse|http://query.aviary.grid.redhat.com Element
++                */
++           AviaryQuery::GetJobDetailsResponse::GetJobDetailsResponse()
++        {
++
++        
++            qname = NULL;
++        
++                property_Jobs  = NULL;
++              
++            isValidJobs  = false;
++        
++                  qname =  axutil_qname_create (Environment::getEnv(),
++                        "GetJobDetailsResponse",
++                        "http://query.aviary.grid.redhat.com",
++                        NULL);
++                
++        }
++
++       AviaryQuery::GetJobDetailsResponse::GetJobDetailsResponse(std::vector<AviaryCommon::JobDetails*>* arg_Jobs)
++        {
++             
++                   qname = NULL;
++             
++               property_Jobs  = NULL;
++             
++            isValidJobs  = true;
++            
++                 qname =  axutil_qname_create (Environment::getEnv(),
++                       "GetJobDetailsResponse",
++                       "http://query.aviary.grid.redhat.com",
++                       NULL);
++               
++                    property_Jobs = arg_Jobs;
++            
++        }
++        AviaryQuery::GetJobDetailsResponse::~GetJobDetailsResponse()
++        {
++
++        }
++
++        
++
++        bool WSF_CALL
++        AviaryQuery::GetJobDetailsResponse::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++               int i = 0;
++            
++               int sequence_broken = 0;
++               axiom_node_t *tmp_node = NULL;
++            
++            axutil_qname_t *element_qname = NULL; 
++            
++               axiom_node_t *first_node = NULL;
++               bool is_early_node_valid = true;
++               axiom_node_t *current_node = NULL;
++               axiom_element_t *current_element = NULL;
++            
++              
++              while(parent && axiom_node_get_node_type(parent, Environment::getEnv()) != AXIOM_ELEMENT)
++              {
++                  parent = axiom_node_get_next_sibling(parent, Environment::getEnv());
++              }
++              if (NULL == parent)
++              {   
++                return AXIS2_FAILURE;
++              }
++              
++
++                    current_element = (axiom_element_t *)axiom_node_get_data_element(parent, Environment::getEnv());
++                    mqname = axiom_element_get_qname(current_element, Environment::getEnv(), parent);
++                    if (axutil_qname_equals(mqname, Environment::getEnv(), this->qname))
++                    {
++                        
++                          first_node = axiom_node_get_first_child(parent, Environment::getEnv());
++                          
++                    }
++                    else
++                    {
++                        WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI,
++                              "Failed in building adb object for GetJobDetailsResponse : "
++                              "Expected %s but returned %s",
++                              axutil_qname_to_string(qname, Environment::getEnv()),
++                              axutil_qname_to_string(mqname, Environment::getEnv()));
++                        
++                        return AXIS2_FAILURE;
++                    }
++                    
++                       { 
++                    /*
++                     * building Jobs array
++                     */
++                       std::vector<AviaryCommon::JobDetails*>* arr_list =new std::vector<AviaryCommon::JobDetails*>();
++                   
++
++                     
++                     /*
++                      * building jobs element
++                      */
++                     
++                     
++                     
++                                    element_qname = axutil_qname_create(Environment::getEnv(), "jobs", NULL, NULL);
++                                  
++                               
++                               for (i = 0, sequence_broken = 0, current_node = first_node; !sequence_broken && current_node != NULL;)
++                                             
++                               {
++                                  if(axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                  {
++                                     current_node =axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                     is_early_node_valid = false;
++                                     continue;
++                                  }
++                                  
++                                  current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                  mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++
++                                  if (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("jobs", axiom_element_get_localname(current_element, Environment::getEnv())))
++                                  {
++                                  
++                                      is_early_node_valid = true;
++                                      
++                                     AviaryCommon::JobDetails* element = new AviaryCommon::JobDetails();
++                                          
++                                          status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                          
++                                          if(AXIS2_FAILURE ==  status)
++                                          {
++					  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "failed in building element jobs ");
++                                          }
++                                          else
++                                          {
++                                            arr_list->push_back(element);
++                                            
++                                          }
++                                        
++                                     if(AXIS2_FAILURE ==  status)
++                                     {
++                                         WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in setting the value for jobs ");
++                                         if(element_qname)
++                                         {
++                                            axutil_qname_free(element_qname, Environment::getEnv());
++                                         }
++                                         if(arr_list)
++                                         {
++                                            delete arr_list;
++                                         }
++                                         return false;
++                                     }
++
++                                     i++;
++                                    current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                  }
++                                  else
++                                  {
++                                      is_early_node_valid = false;
++                                      sequence_broken = 1;
++                                  }
++                                  
++                               }
++
++                               
++                                   if (i < 0)
++                                   {
++                                     /* found element out of order */
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"jobs (@minOccurs = '0') only have %d elements", i);
++                                     if(element_qname)
++                                     {
++                                        axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     if(arr_list)
++                                     {
++                                        delete arr_list;
++                                     }
++                                     return false;
++                                   }
++                               
++
++                               if(0 == arr_list->size())
++                               {
++                                    delete arr_list;
++                               }
++                               else
++                               {
++                                    status = setJobs(arr_list);
++                               }
++
++                              
++                            } 
++                        
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryQuery::GetJobDetailsResponse::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryQuery::GetJobDetailsResponse::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryQuery::GetJobDetailsResponse::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++                axiom_namespace_t *ns1 = NULL;
++
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                axis2_char_t *p_prefix = NULL;
++            
++               int i = 0;
++               int count = 0;
++               void *element = NULL;
++             
++                    axis2_char_t text_value_1[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++               axis2_char_t *start_input_str = NULL;
++               axis2_char_t *end_input_str = NULL;
++               unsigned int start_input_str_len = 0;
++               unsigned int end_input_str_len = 0;
++            
++            
++               axiom_data_source_t *data_source = NULL;
++               axutil_stream_t *stream = NULL;
++
++             
++                int next_ns_index_value = 0;
++             
++                    namespaces = axutil_hash_make(Environment::getEnv());
++                    next_ns_index = &next_ns_index_value;
++                     
++                           ns1 = axiom_namespace_create (Environment::getEnv(),
++                                             "http://query.aviary.grid.redhat.com",
++                                             "n"); 
++                           axutil_hash_set(namespaces, "http://query.aviary.grid.redhat.com", AXIS2_HASH_KEY_STRING, axutil_strdup(Environment::getEnv(), "n"));
++                       
++                     
++                    parent_element = axiom_element_create (Environment::getEnv(), NULL, "GetJobDetailsResponse", ns1 , &parent);
++                    
++                    
++                    axiom_element_set_namespace(parent_element, Environment::getEnv(), ns1, parent);
++
++
++            
++                    data_source = axiom_data_source_create(Environment::getEnv(), parent, &current_node);
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv());
++                  
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidJobs)
++                   {
++                      
++                           /* no need to complain for minoccurs=0 element */
++                            
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("jobs"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("jobs")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     /*
++                      * Parsing Jobs array
++                      */
++                     if (property_Jobs != NULL)
++                     {
++                        
++
++                            sprintf(start_input_str, "<%s%sjobs",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                         start_input_str_len = axutil_strlen(start_input_str);
++
++                         sprintf(end_input_str, "</%s%sjobs>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                         end_input_str_len = axutil_strlen(end_input_str);
++
++                         count = property_Jobs->size();
++                         for(i = 0; i < count; i++)
++                         {
++                            AviaryCommon::JobDetails* element = (*property_Jobs)[i];
++
++                            if(NULL == element) 
++                            {
++                                continue;
++                            }
++
++                    
++                     
++                     /*
++                      * parsing jobs element
++                      */
++
++                    
++                     
++                            if(!element->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                            }
++                            element->serialize(current_node, parent_element,
++                                                                                 element->isParticle() || false, namespaces, next_ns_index);
++                            
++                            if(!element->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                            }
++                            
++                         }
++                     }
++                   
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                   if(namespaces)
++                   {
++                       axutil_hash_index_t *hi;
++                       void *val;
++                       for (hi = axutil_hash_first(namespaces, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                       {
++                           axutil_hash_this(hi, NULL, NULL, &val);
++                           AXIS2_FREE(Environment::getEnv()->allocator, val);
++                       }
++                       axutil_hash_free(namespaces, Environment::getEnv());
++                   }
++                
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for jobs by  Property Number 1
++             */
++            std::vector<AviaryCommon::JobDetails*>* WSF_CALL
++            AviaryQuery::GetJobDetailsResponse::getProperty1()
++            {
++                return getJobs();
++            }
++
++            /**
++             * getter for jobs.
++             */
++            std::vector<AviaryCommon::JobDetails*>* WSF_CALL
++            AviaryQuery::GetJobDetailsResponse::getJobs()
++             {
++                return property_Jobs;
++             }
++
++            /**
++             * setter for jobs
++             */
++            bool WSF_CALL
++            AviaryQuery::GetJobDetailsResponse::setJobs(
++                    std::vector<AviaryCommon::JobDetails*>*  arg_Jobs)
++             {
++                
++                 int size = 0;
++                 int i = 0;
++                 bool non_nil_exists = false;
++                
++
++                if(isValidJobs &&
++                        arg_Jobs == property_Jobs)
++                {
++                    
++                    return true;
++                }
++
++                
++                 size = arg_Jobs->size();
++                 
++                 if (size < 0)
++                 {
++                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"jobs has less than minOccurs(0)");
++                     return false;
++                 }
++                 for(i = 0; i < size; i ++ )
++                 {
++                     if(NULL != (*arg_Jobs)[i])
++                     {
++                         non_nil_exists = true;
++                         break;
++                     }
++                 }
++
++                 
++
++                
++                resetJobs();
++
++                
++                    if(NULL == arg_Jobs)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_Jobs = arg_Jobs;
++                        if(non_nil_exists)
++                        {
++                            isValidJobs = true;
++                        }
++                        
++                    
++                return true;
++             }
++
++            
++            /**
++             * Get ith element of jobs.
++             */
++            AviaryCommon::JobDetails* WSF_CALL
++            AviaryQuery::GetJobDetailsResponse::getJobsAt(int i)
++            {
++                AviaryCommon::JobDetails* ret_val;
++                if(property_Jobs == NULL)
++                {
++                    return (AviaryCommon::JobDetails*)0;
++                }
++                ret_val =   (*property_Jobs)[i];
++                
++                    return ret_val;
++                  
++            }
++
++            /**
++             * Set the ith element of jobs.
++             */
++           bool WSF_CALL
++            AviaryQuery::GetJobDetailsResponse::setJobsAt(int i,
++                    AviaryCommon::JobDetails* arg_Jobs)
++            {
++                 AviaryCommon::JobDetails* element;
++                int size = 0;
++
++                int non_nil_count;
++                bool non_nil_exists = false;
++
++                 
++
++                if( isValidJobs &&
++                    property_Jobs &&
++                  
++                    arg_Jobs == (*property_Jobs)[i])
++                  
++                 {
++                    
++                    return AXIS2_SUCCESS; 
++                }
++
++                   
++                     non_nil_exists = true;
++                  
++
++                if(property_Jobs == NULL)
++                {
++                    property_Jobs = new std::vector<AviaryCommon::JobDetails*>();
++                }
++                else{
++                /* check whether there already exist an element */
++                element = (*property_Jobs)[i];
++                }
++
++                
++                        if(NULL != element)
++                        {
++                          
++                          
++                          
++                                delete element;
++                             
++                        }
++                        
++                    
++                    if(!non_nil_exists)
++                    {
++                        
++                        isValidJobs = true;
++                        (*property_Jobs)[i]= NULL;
++                        
++                        return AXIS2_SUCCESS;
++                    }
++                
++                    (*property_Jobs)[i] = arg_Jobs;
++                  
++
++               isValidJobs = true;
++                
++                return AXIS2_SUCCESS;
++            }
++
++            /**
++             * Add to jobs.
++             */
++            bool WSF_CALL
++            AviaryQuery::GetJobDetailsResponse::addJobs(
++                    AviaryCommon::JobDetails* arg_Jobs)
++             {
++
++                
++                    if( NULL == arg_Jobs
++                     )
++                    {
++                      
++                           return true; 
++                        
++                    }
++                  
++
++                if(property_Jobs == NULL)
++                {
++                    property_Jobs = new std::vector<AviaryCommon::JobDetails*>();
++                }
++              
++               property_Jobs->push_back(arg_Jobs);
++              
++                isValidJobs = true;
++                return true;
++             }
++
++            /**
++             * Get the size of the jobs array.
++             */
++            int WSF_CALL
++            AviaryQuery::GetJobDetailsResponse::sizeofJobs()
++            {
++
++                if(property_Jobs == NULL)
++                {
++                    return 0;
++                }
++                return property_Jobs->size();
++            }
++
++            /**
++             * remove the ith element, same as set_nil_at.
++             */
++            bool WSF_CALL
++            AviaryQuery::GetJobDetailsResponse::removeJobsAt(int i)
++            {
++                return setJobsNilAt(i);
++            }
++
++            
++
++           /**
++            * resetter for jobs
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobDetailsResponse::resetJobs()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++                if (property_Jobs != NULL)
++                {
++                  std::vector<AviaryCommon::JobDetails*>::iterator it =  property_Jobs->begin();
++                  for( ; it <  property_Jobs->end() ; ++it)
++                  {
++                     AviaryCommon::JobDetails* element = *it;
++                
++            
++                
++
++                if(element != NULL)
++                {
++                   
++                   
++                         delete  element;
++                     
++
++                   }
++
++                
++                
++                
++               }
++
++             }
++                
++                    if(NULL != property_Jobs)
++                 delete property_Jobs;
++                
++               isValidJobs = false; 
++               return true;
++           }
++
++           /**
++            * Check whether jobs is nill
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobDetailsResponse::isJobsNil()
++           {
++               return !isValidJobs;
++           }
++
++           /**
++            * Set jobs to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobDetailsResponse::setJobsNil()
++           {
++               return resetJobs();
++           }
++
++           
++           /**
++            * Check whether jobs is nill at i
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobDetailsResponse::isJobsNilAt(int i)
++           {
++               return (isValidJobs == false ||
++                       NULL == property_Jobs ||
++                     NULL == (*property_Jobs)[i]);
++            }
++
++           /**
++            * Set jobs to nil at i
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobDetailsResponse::setJobsNilAt(int i)
++           {
++                int size = 0;
++                int j;
++                bool non_nil_exists = false;
++
++                int k = 0;
++
++                if(property_Jobs == NULL ||
++                            isValidJobs == false)
++                {
++                    
++                    non_nil_exists = false;
++                }
++                else
++                {
++                    size = property_Jobs->size();
++                    for(j = 0, k = 0; j < size; j ++ )
++                    {
++                        if(i == j) continue; 
++                        if(NULL != (*property_Jobs)[i])
++                        {
++                            k++;
++                            non_nil_exists = true;
++                            if( k >= 0)
++                            {
++                                break;
++                            }
++                        }
++                    }
++                }
++                
++
++                if( k < 0)
++                {
++                       WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "Size of the array of jobs is beinng set to be smaller than the specificed number of minOccurs(0)");
++                       return AXIS2_FAILURE;
++                }
++ 
++                if(property_Jobs == NULL)
++                {
++                    isValidJobs = false;
++                    
++                    return true;
++                }
++                 
++                 /* check whether there already exist an element */
++                 AviaryCommon::JobDetails* element = (*property_Jobs)[i];
++                if(NULL != element)
++                {
++                  
++                  
++                  
++                        delete element;
++                     
++                 }
++                 
++                    if(!non_nil_exists)
++                    {
++                        
++                        isValidJobs = false;
++                        (*property_Jobs)[i] = NULL;
++                        return AXIS2_SUCCESS;
++                    }
++                
++
++                
++                (*property_Jobs)[i] = NULL;
++                
++                return AXIS2_SUCCESS;
++
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/codegen/query/src/AviaryQuery_GetJobStatus.cpp b/src/condor_contrib/aviary/codegen/query/src/AviaryQuery_GetJobStatus.cpp
+new file mode 100644
+index 0000000..215973c
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/query/src/AviaryQuery_GetJobStatus.cpp
+@@ -0,0 +1,980 @@
++
++
++        /**
++         * GetJobStatus.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryQuery_GetJobStatus.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryQuery;
++        
++               /*
++                * Implementation of the GetJobStatus|http://query.aviary.grid.redhat.com Element
++                */
++           AviaryQuery::GetJobStatus::GetJobStatus()
++        {
++
++        
++            qname = NULL;
++        
++                property_Ids  = NULL;
++              
++            isValidIds  = false;
++        
++            isValidPartialMatches  = false;
++        
++                  qname =  axutil_qname_create (Environment::getEnv(),
++                        "GetJobStatus",
++                        "http://query.aviary.grid.redhat.com",
++                        NULL);
++                
++        }
++
++       AviaryQuery::GetJobStatus::GetJobStatus(std::vector<AviaryCommon::JobID*>* arg_Ids,bool arg_PartialMatches)
++        {
++             
++                   qname = NULL;
++             
++               property_Ids  = NULL;
++             
++            isValidIds  = true;
++            
++            isValidPartialMatches  = true;
++            
++                 qname =  axutil_qname_create (Environment::getEnv(),
++                       "GetJobStatus",
++                       "http://query.aviary.grid.redhat.com",
++                       NULL);
++               
++                    property_Ids = arg_Ids;
++            
++                    property_PartialMatches = arg_PartialMatches;
++            
++        }
++        AviaryQuery::GetJobStatus::~GetJobStatus()
++        {
++
++        }
++
++        
++
++        bool WSF_CALL
++        AviaryQuery::GetJobStatus::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++          
++          axiom_attribute_t *parent_attri = NULL;
++          axiom_element_t *parent_element = NULL;
++          axis2_char_t *attrib_text = NULL;
++
++          axutil_hash_t *attribute_hash = NULL;
++
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++               int i = 0;
++            
++               int sequence_broken = 0;
++               axiom_node_t *tmp_node = NULL;
++            
++            axutil_qname_t *element_qname = NULL; 
++            
++               axiom_node_t *first_node = NULL;
++               bool is_early_node_valid = true;
++               axiom_node_t *current_node = NULL;
++               axiom_element_t *current_element = NULL;
++            
++              
++              while(parent && axiom_node_get_node_type(parent, Environment::getEnv()) != AXIOM_ELEMENT)
++              {
++                  parent = axiom_node_get_next_sibling(parent, Environment::getEnv());
++              }
++              if (NULL == parent)
++              {   
++                return AXIS2_FAILURE;
++              }
++              
++
++                    current_element = (axiom_element_t *)axiom_node_get_data_element(parent, Environment::getEnv());
++                    mqname = axiom_element_get_qname(current_element, Environment::getEnv(), parent);
++                    if (axutil_qname_equals(mqname, Environment::getEnv(), this->qname))
++                    {
++                        
++                          first_node = axiom_node_get_first_child(parent, Environment::getEnv());
++                          
++                    }
++                    else
++                    {
++                        WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI,
++                              "Failed in building adb object for GetJobStatus : "
++                              "Expected %s but returned %s",
++                              axutil_qname_to_string(qname, Environment::getEnv()),
++                              axutil_qname_to_string(mqname, Environment::getEnv()));
++                        
++                        return AXIS2_FAILURE;
++                    }
++                    
++                 parent_element = (axiom_element_t *)axiom_node_get_data_element(parent, Environment::getEnv());
++                 attribute_hash = axiom_element_get_all_attributes(parent_element, Environment::getEnv());
++              
++                       { 
++                    /*
++                     * building Ids array
++                     */
++                       std::vector<AviaryCommon::JobID*>* arr_list =new std::vector<AviaryCommon::JobID*>();
++                   
++
++                     
++                     /*
++                      * building ids element
++                      */
++                     
++                     
++                     
++                                    element_qname = axutil_qname_create(Environment::getEnv(), "ids", NULL, NULL);
++                                  
++                               
++                               for (i = 0, sequence_broken = 0, current_node = first_node; !sequence_broken && current_node != NULL;)
++                                             
++                               {
++                                  if(axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                  {
++                                     current_node =axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                     is_early_node_valid = false;
++                                     continue;
++                                  }
++                                  
++                                  current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                  mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++
++                                  if (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("ids", axiom_element_get_localname(current_element, Environment::getEnv())))
++                                  {
++                                  
++                                      is_early_node_valid = true;
++                                      
++                                     AviaryCommon::JobID* element = new AviaryCommon::JobID();
++                                          
++                                          status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                          
++                                          if(AXIS2_FAILURE ==  status)
++                                          {
++					  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "failed in building element ids ");
++                                          }
++                                          else
++                                          {
++                                            arr_list->push_back(element);
++                                            
++                                          }
++                                        
++                                     if(AXIS2_FAILURE ==  status)
++                                     {
++                                         WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in setting the value for ids ");
++                                         if(element_qname)
++                                         {
++                                            axutil_qname_free(element_qname, Environment::getEnv());
++                                         }
++                                         if(arr_list)
++                                         {
++                                            delete arr_list;
++                                         }
++                                         return false;
++                                     }
++
++                                     i++;
++                                    current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                  }
++                                  else
++                                  {
++                                      is_early_node_valid = false;
++                                      sequence_broken = 1;
++                                  }
++                                  
++                               }
++
++                               
++                                   if (i < 0)
++                                   {
++                                     /* found element out of order */
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"ids (@minOccurs = '0') only have %d elements", i);
++                                     if(element_qname)
++                                     {
++                                        axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     if(arr_list)
++                                     {
++                                        delete arr_list;
++                                     }
++                                     return false;
++                                   }
++                               
++
++                               if(0 == arr_list->size())
++                               {
++                                    delete arr_list;
++                               }
++                               else
++                               {
++                                    status = setIds(arr_list);
++                               }
++
++                              
++                            } 
++                        
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++                
++                
++                  parent_attri = NULL;
++                  attrib_text = NULL;
++                  if(attribute_hash)
++                  {
++                       axutil_hash_index_t *hi;
++                       void *val;
++                       const void *key;
++
++                       for (hi = axutil_hash_first(attribute_hash, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                       {
++                           axutil_hash_this(hi, &key, NULL, &val);
++                           
++                           
++                               if(!strcmp((axis2_char_t*)key, "partialMatches"))
++                             
++                               {
++                                   parent_attri = (axiom_attribute_t*)val;
++                                   break;
++                               }
++                       }
++                  }
++
++                  if(parent_attri)
++                  {
++                    attrib_text = axiom_attribute_get_value(parent_attri, Environment::getEnv());
++                  }
++                  else
++                  {
++                    /* this is hoping that attribute is stored in "partialMatches", this happnes when name is in default namespace */
++                    attrib_text = axiom_element_get_attribute_value_by_name(parent_element, Environment::getEnv(), "partialMatches");
++                  }
++
++                  if(attrib_text != NULL)
++                  {
++                      
++                      
++                           if (!axutil_strcmp(attrib_text, "TRUE") || !axutil_strcmp(attrib_text, "true"))
++                           {
++                               setPartialMatches(true);
++                           }
++                           else
++                           {
++                               setPartialMatches(false);
++                           }
++                        
++                    }
++                  
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryQuery::GetJobStatus::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryQuery::GetJobStatus::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryQuery::GetJobStatus::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++               axiom_attribute_t *text_attri = NULL;
++             
++             axis2_char_t *string_to_stream;
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++                axiom_namespace_t *ns1 = NULL;
++
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                axis2_char_t *p_prefix = NULL;
++            
++               int i = 0;
++               int count = 0;
++               void *element = NULL;
++             
++                    axis2_char_t text_value_1[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++                    axis2_char_t text_value_2[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++                axis2_char_t *text_value = NULL;
++             
++               axis2_char_t *start_input_str = NULL;
++               axis2_char_t *end_input_str = NULL;
++               unsigned int start_input_str_len = 0;
++               unsigned int end_input_str_len = 0;
++            
++            
++               axiom_data_source_t *data_source = NULL;
++               axutil_stream_t *stream = NULL;
++
++             
++                int next_ns_index_value = 0;
++             
++                    namespaces = axutil_hash_make(Environment::getEnv());
++                    next_ns_index = &next_ns_index_value;
++                     
++                           ns1 = axiom_namespace_create (Environment::getEnv(),
++                                             "http://query.aviary.grid.redhat.com",
++                                             "n"); 
++                           axutil_hash_set(namespaces, "http://query.aviary.grid.redhat.com", AXIS2_HASH_KEY_STRING, axutil_strdup(Environment::getEnv(), "n"));
++                       
++                     
++                    parent_element = axiom_element_create (Environment::getEnv(), NULL, "GetJobStatus", ns1 , &parent);
++                    
++                    
++                    axiom_element_set_namespace(parent_element, Environment::getEnv(), ns1, parent);
++
++
++            
++                    data_source = axiom_data_source_create(Environment::getEnv(), parent, &current_node);
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv());
++                  
++            if(!parent_tag_closed)
++            {
++            
++                if(isValidPartialMatches)
++                {
++                
++                        p_prefix = NULL;
++                      
++                           
++                           text_value = (axis2_char_t*)((property_PartialMatches)?"true":"false");
++                           string_to_stream = (axis2_char_t*) AXIS2_MALLOC (Environment::getEnv()-> allocator, sizeof (axis2_char_t) *
++                                                            (5  + ADB_DEFAULT_NAMESPACE_PREFIX_LIMIT +
++                                                             axutil_strlen(text_value) + 
++                                                             axutil_strlen("partialMatches")));
++                           sprintf(string_to_stream, " %s%s%s=\"%s\"", p_prefix?p_prefix:"", (p_prefix && axutil_strcmp(p_prefix, ""))?":":"",
++                                                "partialMatches",  text_value);
++                           axutil_stream_write(stream, Environment::getEnv(), string_to_stream, axutil_strlen(string_to_stream));
++                           AXIS2_FREE(Environment::getEnv()-> allocator, string_to_stream);
++                        
++                   }
++                   
++            }
++            
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidIds)
++                   {
++                      
++                           /* no need to complain for minoccurs=0 element */
++                            
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("ids"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("ids")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     /*
++                      * Parsing Ids array
++                      */
++                     if (property_Ids != NULL)
++                     {
++                        
++
++                            sprintf(start_input_str, "<%s%sids",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                         start_input_str_len = axutil_strlen(start_input_str);
++
++                         sprintf(end_input_str, "</%s%sids>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                         end_input_str_len = axutil_strlen(end_input_str);
++
++                         count = property_Ids->size();
++                         for(i = 0; i < count; i++)
++                         {
++                            AviaryCommon::JobID* element = (*property_Ids)[i];
++
++                            if(NULL == element) 
++                            {
++                                continue;
++                            }
++
++                    
++                     
++                     /*
++                      * parsing ids element
++                      */
++
++                    
++                     
++                            if(!element->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                            }
++                            element->serialize(current_node, parent_element,
++                                                                                 element->isParticle() || false, namespaces, next_ns_index);
++                            
++                            if(!element->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                            }
++                            
++                         }
++                     }
++                   
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                    
++                    if(parent_tag_closed)
++                    {
++                       if(isValidPartialMatches)
++                       {
++                       
++                           p_prefix = NULL;
++                           ns1 = NULL;
++                         
++                           
++                           text_value =  (axis2_char_t*)((property_PartialMatches)?axutil_strdup(Environment::getEnv(), "true"):axutil_strdup(Environment::getEnv(), "false"));
++                           text_attri = axiom_attribute_create (Environment::getEnv(), "partialMatches", text_value, ns1);
++                           axiom_element_add_attribute (parent_element, Environment::getEnv(), text_attri, parent);
++                           AXIS2_FREE(Environment::getEnv()->allocator, text_value);
++                        
++                      }
++                       
++                  }
++                
++                   if(namespaces)
++                   {
++                       axutil_hash_index_t *hi;
++                       void *val;
++                       for (hi = axutil_hash_first(namespaces, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                       {
++                           axutil_hash_this(hi, NULL, NULL, &val);
++                           AXIS2_FREE(Environment::getEnv()->allocator, val);
++                       }
++                       axutil_hash_free(namespaces, Environment::getEnv());
++                   }
++                
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for ids by  Property Number 1
++             */
++            std::vector<AviaryCommon::JobID*>* WSF_CALL
++            AviaryQuery::GetJobStatus::getProperty1()
++            {
++                return getIds();
++            }
++
++            /**
++             * getter for ids.
++             */
++            std::vector<AviaryCommon::JobID*>* WSF_CALL
++            AviaryQuery::GetJobStatus::getIds()
++             {
++                return property_Ids;
++             }
++
++            /**
++             * setter for ids
++             */
++            bool WSF_CALL
++            AviaryQuery::GetJobStatus::setIds(
++                    std::vector<AviaryCommon::JobID*>*  arg_Ids)
++             {
++                
++                 int size = 0;
++                 int i = 0;
++                 bool non_nil_exists = false;
++                
++
++                if(isValidIds &&
++                        arg_Ids == property_Ids)
++                {
++                    
++                    return true;
++                }
++
++                
++                 size = arg_Ids->size();
++                 
++                 if (size < 0)
++                 {
++                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"ids has less than minOccurs(0)");
++                     return false;
++                 }
++                 for(i = 0; i < size; i ++ )
++                 {
++                     if(NULL != (*arg_Ids)[i])
++                     {
++                         non_nil_exists = true;
++                         break;
++                     }
++                 }
++
++                 
++
++                
++                resetIds();
++
++                
++                    if(NULL == arg_Ids)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_Ids = arg_Ids;
++                        if(non_nil_exists)
++                        {
++                            isValidIds = true;
++                        }
++                        
++                    
++                return true;
++             }
++
++            
++            /**
++             * Get ith element of ids.
++             */
++            AviaryCommon::JobID* WSF_CALL
++            AviaryQuery::GetJobStatus::getIdsAt(int i)
++            {
++                AviaryCommon::JobID* ret_val;
++                if(property_Ids == NULL)
++                {
++                    return (AviaryCommon::JobID*)0;
++                }
++                ret_val =   (*property_Ids)[i];
++                
++                    return ret_val;
++                  
++            }
++
++            /**
++             * Set the ith element of ids.
++             */
++           bool WSF_CALL
++            AviaryQuery::GetJobStatus::setIdsAt(int i,
++                    AviaryCommon::JobID* arg_Ids)
++            {
++                 AviaryCommon::JobID* element;
++                int size = 0;
++
++                int non_nil_count;
++                bool non_nil_exists = false;
++
++                 
++
++                if( isValidIds &&
++                    property_Ids &&
++                  
++                    arg_Ids == (*property_Ids)[i])
++                  
++                 {
++                    
++                    return AXIS2_SUCCESS; 
++                }
++
++                   
++                     non_nil_exists = true;
++                  
++
++                if(property_Ids == NULL)
++                {
++                    property_Ids = new std::vector<AviaryCommon::JobID*>();
++                }
++                else{
++                /* check whether there already exist an element */
++                element = (*property_Ids)[i];
++                }
++
++                
++                        if(NULL != element)
++                        {
++                          
++                          
++                          
++                                delete element;
++                             
++                        }
++                        
++                    
++                    if(!non_nil_exists)
++                    {
++                        
++                        isValidIds = true;
++                        (*property_Ids)[i]= NULL;
++                        
++                        return AXIS2_SUCCESS;
++                    }
++                
++                    (*property_Ids)[i] = arg_Ids;
++                  
++
++               isValidIds = true;
++                
++                return AXIS2_SUCCESS;
++            }
++
++            /**
++             * Add to ids.
++             */
++            bool WSF_CALL
++            AviaryQuery::GetJobStatus::addIds(
++                    AviaryCommon::JobID* arg_Ids)
++             {
++
++                
++                    if( NULL == arg_Ids
++                     )
++                    {
++                      
++                           return true; 
++                        
++                    }
++                  
++
++                if(property_Ids == NULL)
++                {
++                    property_Ids = new std::vector<AviaryCommon::JobID*>();
++                }
++              
++               property_Ids->push_back(arg_Ids);
++              
++                isValidIds = true;
++                return true;
++             }
++
++            /**
++             * Get the size of the ids array.
++             */
++            int WSF_CALL
++            AviaryQuery::GetJobStatus::sizeofIds()
++            {
++
++                if(property_Ids == NULL)
++                {
++                    return 0;
++                }
++                return property_Ids->size();
++            }
++
++            /**
++             * remove the ith element, same as set_nil_at.
++             */
++            bool WSF_CALL
++            AviaryQuery::GetJobStatus::removeIdsAt(int i)
++            {
++                return setIdsNilAt(i);
++            }
++
++            
++
++           /**
++            * resetter for ids
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobStatus::resetIds()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++                if (property_Ids != NULL)
++                {
++                  std::vector<AviaryCommon::JobID*>::iterator it =  property_Ids->begin();
++                  for( ; it <  property_Ids->end() ; ++it)
++                  {
++                     AviaryCommon::JobID* element = *it;
++                
++            
++                
++
++                if(element != NULL)
++                {
++                   
++                   
++                         delete  element;
++                     
++
++                   }
++
++                
++                
++                
++               }
++
++             }
++                
++                    if(NULL != property_Ids)
++                 delete property_Ids;
++                
++               isValidIds = false; 
++               return true;
++           }
++
++           /**
++            * Check whether ids is nill
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobStatus::isIdsNil()
++           {
++               return !isValidIds;
++           }
++
++           /**
++            * Set ids to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobStatus::setIdsNil()
++           {
++               return resetIds();
++           }
++
++           
++           /**
++            * Check whether ids is nill at i
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobStatus::isIdsNilAt(int i)
++           {
++               return (isValidIds == false ||
++                       NULL == property_Ids ||
++                     NULL == (*property_Ids)[i]);
++            }
++
++           /**
++            * Set ids to nil at i
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobStatus::setIdsNilAt(int i)
++           {
++                int size = 0;
++                int j;
++                bool non_nil_exists = false;
++
++                int k = 0;
++
++                if(property_Ids == NULL ||
++                            isValidIds == false)
++                {
++                    
++                    non_nil_exists = false;
++                }
++                else
++                {
++                    size = property_Ids->size();
++                    for(j = 0, k = 0; j < size; j ++ )
++                    {
++                        if(i == j) continue; 
++                        if(NULL != (*property_Ids)[i])
++                        {
++                            k++;
++                            non_nil_exists = true;
++                            if( k >= 0)
++                            {
++                                break;
++                            }
++                        }
++                    }
++                }
++                
++
++                if( k < 0)
++                {
++                       WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "Size of the array of ids is beinng set to be smaller than the specificed number of minOccurs(0)");
++                       return AXIS2_FAILURE;
++                }
++ 
++                if(property_Ids == NULL)
++                {
++                    isValidIds = false;
++                    
++                    return true;
++                }
++                 
++                 /* check whether there already exist an element */
++                 AviaryCommon::JobID* element = (*property_Ids)[i];
++                if(NULL != element)
++                {
++                  
++                  
++                  
++                        delete element;
++                     
++                 }
++                 
++                    if(!non_nil_exists)
++                    {
++                        
++                        isValidIds = false;
++                        (*property_Ids)[i] = NULL;
++                        return AXIS2_SUCCESS;
++                    }
++                
++
++                
++                (*property_Ids)[i] = NULL;
++                
++                return AXIS2_SUCCESS;
++
++           }
++
++           
++
++            /**
++             * Getter for partialMatches by  Property Number 2
++             */
++            bool WSF_CALL
++            AviaryQuery::GetJobStatus::getProperty2()
++            {
++                return getPartialMatches();
++            }
++
++            /**
++             * getter for partialMatches.
++             */
++            bool WSF_CALL
++            AviaryQuery::GetJobStatus::getPartialMatches()
++             {
++                return property_PartialMatches;
++             }
++
++            /**
++             * setter for partialMatches
++             */
++            bool WSF_CALL
++            AviaryQuery::GetJobStatus::setPartialMatches(
++                    bool  arg_PartialMatches)
++             {
++                
++
++                if(isValidPartialMatches &&
++                        arg_PartialMatches == property_PartialMatches)
++                {
++                    
++                    return true;
++                }
++
++                
++
++                
++                resetPartialMatches();
++
++                
++                        property_PartialMatches = arg_PartialMatches;
++                        isValidPartialMatches = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for partialMatches
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobStatus::resetPartialMatches()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidPartialMatches = false; 
++               return true;
++           }
++
++           /**
++            * Check whether partialMatches is nill
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobStatus::isPartialMatchesNil()
++           {
++               return !isValidPartialMatches;
++           }
++
++           /**
++            * Set partialMatches to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobStatus::setPartialMatchesNil()
++           {
++               return resetPartialMatches();
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/codegen/query/src/AviaryQuery_GetJobStatusResponse.cpp b/src/condor_contrib/aviary/codegen/query/src/AviaryQuery_GetJobStatusResponse.cpp
+new file mode 100644
+index 0000000..656f042
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/query/src/AviaryQuery_GetJobStatusResponse.cpp
+@@ -0,0 +1,776 @@
++
++
++        /**
++         * GetJobStatusResponse.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryQuery_GetJobStatusResponse.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryQuery;
++        
++               /*
++                * Implementation of the GetJobStatusResponse|http://query.aviary.grid.redhat.com Element
++                */
++           AviaryQuery::GetJobStatusResponse::GetJobStatusResponse()
++        {
++
++        
++            qname = NULL;
++        
++                property_Jobs  = NULL;
++              
++            isValidJobs  = false;
++        
++                  qname =  axutil_qname_create (Environment::getEnv(),
++                        "GetJobStatusResponse",
++                        "http://query.aviary.grid.redhat.com",
++                        NULL);
++                
++        }
++
++       AviaryQuery::GetJobStatusResponse::GetJobStatusResponse(std::vector<AviaryCommon::JobStatus*>* arg_Jobs)
++        {
++             
++                   qname = NULL;
++             
++               property_Jobs  = NULL;
++             
++            isValidJobs  = true;
++            
++                 qname =  axutil_qname_create (Environment::getEnv(),
++                       "GetJobStatusResponse",
++                       "http://query.aviary.grid.redhat.com",
++                       NULL);
++               
++                    property_Jobs = arg_Jobs;
++            
++        }
++        AviaryQuery::GetJobStatusResponse::~GetJobStatusResponse()
++        {
++
++        }
++
++        
++
++        bool WSF_CALL
++        AviaryQuery::GetJobStatusResponse::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++               int i = 0;
++            
++               int sequence_broken = 0;
++               axiom_node_t *tmp_node = NULL;
++            
++            axutil_qname_t *element_qname = NULL; 
++            
++               axiom_node_t *first_node = NULL;
++               bool is_early_node_valid = true;
++               axiom_node_t *current_node = NULL;
++               axiom_element_t *current_element = NULL;
++            
++              
++              while(parent && axiom_node_get_node_type(parent, Environment::getEnv()) != AXIOM_ELEMENT)
++              {
++                  parent = axiom_node_get_next_sibling(parent, Environment::getEnv());
++              }
++              if (NULL == parent)
++              {   
++                return AXIS2_FAILURE;
++              }
++              
++
++                    current_element = (axiom_element_t *)axiom_node_get_data_element(parent, Environment::getEnv());
++                    mqname = axiom_element_get_qname(current_element, Environment::getEnv(), parent);
++                    if (axutil_qname_equals(mqname, Environment::getEnv(), this->qname))
++                    {
++                        
++                          first_node = axiom_node_get_first_child(parent, Environment::getEnv());
++                          
++                    }
++                    else
++                    {
++                        WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI,
++                              "Failed in building adb object for GetJobStatusResponse : "
++                              "Expected %s but returned %s",
++                              axutil_qname_to_string(qname, Environment::getEnv()),
++                              axutil_qname_to_string(mqname, Environment::getEnv()));
++                        
++                        return AXIS2_FAILURE;
++                    }
++                    
++                       { 
++                    /*
++                     * building Jobs array
++                     */
++                       std::vector<AviaryCommon::JobStatus*>* arr_list =new std::vector<AviaryCommon::JobStatus*>();
++                   
++
++                     
++                     /*
++                      * building jobs element
++                      */
++                     
++                     
++                     
++                                    element_qname = axutil_qname_create(Environment::getEnv(), "jobs", NULL, NULL);
++                                  
++                               
++                               for (i = 0, sequence_broken = 0, current_node = first_node; !sequence_broken && current_node != NULL;)
++                                             
++                               {
++                                  if(axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                  {
++                                     current_node =axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                     is_early_node_valid = false;
++                                     continue;
++                                  }
++                                  
++                                  current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                  mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++
++                                  if (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("jobs", axiom_element_get_localname(current_element, Environment::getEnv())))
++                                  {
++                                  
++                                      is_early_node_valid = true;
++                                      
++                                     AviaryCommon::JobStatus* element = new AviaryCommon::JobStatus();
++                                          
++                                          status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                          
++                                          if(AXIS2_FAILURE ==  status)
++                                          {
++					  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "failed in building element jobs ");
++                                          }
++                                          else
++                                          {
++                                            arr_list->push_back(element);
++                                            
++                                          }
++                                        
++                                     if(AXIS2_FAILURE ==  status)
++                                     {
++                                         WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in setting the value for jobs ");
++                                         if(element_qname)
++                                         {
++                                            axutil_qname_free(element_qname, Environment::getEnv());
++                                         }
++                                         if(arr_list)
++                                         {
++                                            delete arr_list;
++                                         }
++                                         return false;
++                                     }
++
++                                     i++;
++                                    current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                  }
++                                  else
++                                  {
++                                      is_early_node_valid = false;
++                                      sequence_broken = 1;
++                                  }
++                                  
++                               }
++
++                               
++                                   if (i < 0)
++                                   {
++                                     /* found element out of order */
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"jobs (@minOccurs = '0') only have %d elements", i);
++                                     if(element_qname)
++                                     {
++                                        axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     if(arr_list)
++                                     {
++                                        delete arr_list;
++                                     }
++                                     return false;
++                                   }
++                               
++
++                               if(0 == arr_list->size())
++                               {
++                                    delete arr_list;
++                               }
++                               else
++                               {
++                                    status = setJobs(arr_list);
++                               }
++
++                              
++                            } 
++                        
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryQuery::GetJobStatusResponse::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryQuery::GetJobStatusResponse::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryQuery::GetJobStatusResponse::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++                axiom_namespace_t *ns1 = NULL;
++
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                axis2_char_t *p_prefix = NULL;
++            
++               int i = 0;
++               int count = 0;
++               void *element = NULL;
++             
++                    axis2_char_t text_value_1[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++               axis2_char_t *start_input_str = NULL;
++               axis2_char_t *end_input_str = NULL;
++               unsigned int start_input_str_len = 0;
++               unsigned int end_input_str_len = 0;
++            
++            
++               axiom_data_source_t *data_source = NULL;
++               axutil_stream_t *stream = NULL;
++
++             
++                int next_ns_index_value = 0;
++             
++                    namespaces = axutil_hash_make(Environment::getEnv());
++                    next_ns_index = &next_ns_index_value;
++                     
++                           ns1 = axiom_namespace_create (Environment::getEnv(),
++                                             "http://query.aviary.grid.redhat.com",
++                                             "n"); 
++                           axutil_hash_set(namespaces, "http://query.aviary.grid.redhat.com", AXIS2_HASH_KEY_STRING, axutil_strdup(Environment::getEnv(), "n"));
++                       
++                     
++                    parent_element = axiom_element_create (Environment::getEnv(), NULL, "GetJobStatusResponse", ns1 , &parent);
++                    
++                    
++                    axiom_element_set_namespace(parent_element, Environment::getEnv(), ns1, parent);
++
++
++            
++                    data_source = axiom_data_source_create(Environment::getEnv(), parent, &current_node);
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv());
++                  
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidJobs)
++                   {
++                      
++                           /* no need to complain for minoccurs=0 element */
++                            
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("jobs"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("jobs")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     /*
++                      * Parsing Jobs array
++                      */
++                     if (property_Jobs != NULL)
++                     {
++                        
++
++                            sprintf(start_input_str, "<%s%sjobs",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                         start_input_str_len = axutil_strlen(start_input_str);
++
++                         sprintf(end_input_str, "</%s%sjobs>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                         end_input_str_len = axutil_strlen(end_input_str);
++
++                         count = property_Jobs->size();
++                         for(i = 0; i < count; i++)
++                         {
++                            AviaryCommon::JobStatus* element = (*property_Jobs)[i];
++
++                            if(NULL == element) 
++                            {
++                                continue;
++                            }
++
++                    
++                     
++                     /*
++                      * parsing jobs element
++                      */
++
++                    
++                     
++                            if(!element->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                            }
++                            element->serialize(current_node, parent_element,
++                                                                                 element->isParticle() || false, namespaces, next_ns_index);
++                            
++                            if(!element->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                            }
++                            
++                         }
++                     }
++                   
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                   if(namespaces)
++                   {
++                       axutil_hash_index_t *hi;
++                       void *val;
++                       for (hi = axutil_hash_first(namespaces, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                       {
++                           axutil_hash_this(hi, NULL, NULL, &val);
++                           AXIS2_FREE(Environment::getEnv()->allocator, val);
++                       }
++                       axutil_hash_free(namespaces, Environment::getEnv());
++                   }
++                
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for jobs by  Property Number 1
++             */
++            std::vector<AviaryCommon::JobStatus*>* WSF_CALL
++            AviaryQuery::GetJobStatusResponse::getProperty1()
++            {
++                return getJobs();
++            }
++
++            /**
++             * getter for jobs.
++             */
++            std::vector<AviaryCommon::JobStatus*>* WSF_CALL
++            AviaryQuery::GetJobStatusResponse::getJobs()
++             {
++                return property_Jobs;
++             }
++
++            /**
++             * setter for jobs
++             */
++            bool WSF_CALL
++            AviaryQuery::GetJobStatusResponse::setJobs(
++                    std::vector<AviaryCommon::JobStatus*>*  arg_Jobs)
++             {
++                
++                 int size = 0;
++                 int i = 0;
++                 bool non_nil_exists = false;
++                
++
++                if(isValidJobs &&
++                        arg_Jobs == property_Jobs)
++                {
++                    
++                    return true;
++                }
++
++                
++                 size = arg_Jobs->size();
++                 
++                 if (size < 0)
++                 {
++                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"jobs has less than minOccurs(0)");
++                     return false;
++                 }
++                 for(i = 0; i < size; i ++ )
++                 {
++                     if(NULL != (*arg_Jobs)[i])
++                     {
++                         non_nil_exists = true;
++                         break;
++                     }
++                 }
++
++                 
++
++                
++                resetJobs();
++
++                
++                    if(NULL == arg_Jobs)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_Jobs = arg_Jobs;
++                        if(non_nil_exists)
++                        {
++                            isValidJobs = true;
++                        }
++                        
++                    
++                return true;
++             }
++
++            
++            /**
++             * Get ith element of jobs.
++             */
++            AviaryCommon::JobStatus* WSF_CALL
++            AviaryQuery::GetJobStatusResponse::getJobsAt(int i)
++            {
++                AviaryCommon::JobStatus* ret_val;
++                if(property_Jobs == NULL)
++                {
++                    return (AviaryCommon::JobStatus*)0;
++                }
++                ret_val =   (*property_Jobs)[i];
++                
++                    return ret_val;
++                  
++            }
++
++            /**
++             * Set the ith element of jobs.
++             */
++           bool WSF_CALL
++            AviaryQuery::GetJobStatusResponse::setJobsAt(int i,
++                    AviaryCommon::JobStatus* arg_Jobs)
++            {
++                 AviaryCommon::JobStatus* element;
++                int size = 0;
++
++                int non_nil_count;
++                bool non_nil_exists = false;
++
++                 
++
++                if( isValidJobs &&
++                    property_Jobs &&
++                  
++                    arg_Jobs == (*property_Jobs)[i])
++                  
++                 {
++                    
++                    return AXIS2_SUCCESS; 
++                }
++
++                   
++                     non_nil_exists = true;
++                  
++
++                if(property_Jobs == NULL)
++                {
++                    property_Jobs = new std::vector<AviaryCommon::JobStatus*>();
++                }
++                else{
++                /* check whether there already exist an element */
++                element = (*property_Jobs)[i];
++                }
++
++                
++                        if(NULL != element)
++                        {
++                          
++                          
++                          
++                                delete element;
++                             
++                        }
++                        
++                    
++                    if(!non_nil_exists)
++                    {
++                        
++                        isValidJobs = true;
++                        (*property_Jobs)[i]= NULL;
++                        
++                        return AXIS2_SUCCESS;
++                    }
++                
++                    (*property_Jobs)[i] = arg_Jobs;
++                  
++
++               isValidJobs = true;
++                
++                return AXIS2_SUCCESS;
++            }
++
++            /**
++             * Add to jobs.
++             */
++            bool WSF_CALL
++            AviaryQuery::GetJobStatusResponse::addJobs(
++                    AviaryCommon::JobStatus* arg_Jobs)
++             {
++
++                
++                    if( NULL == arg_Jobs
++                     )
++                    {
++                      
++                           return true; 
++                        
++                    }
++                  
++
++                if(property_Jobs == NULL)
++                {
++                    property_Jobs = new std::vector<AviaryCommon::JobStatus*>();
++                }
++              
++               property_Jobs->push_back(arg_Jobs);
++              
++                isValidJobs = true;
++                return true;
++             }
++
++            /**
++             * Get the size of the jobs array.
++             */
++            int WSF_CALL
++            AviaryQuery::GetJobStatusResponse::sizeofJobs()
++            {
++
++                if(property_Jobs == NULL)
++                {
++                    return 0;
++                }
++                return property_Jobs->size();
++            }
++
++            /**
++             * remove the ith element, same as set_nil_at.
++             */
++            bool WSF_CALL
++            AviaryQuery::GetJobStatusResponse::removeJobsAt(int i)
++            {
++                return setJobsNilAt(i);
++            }
++
++            
++
++           /**
++            * resetter for jobs
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobStatusResponse::resetJobs()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++                if (property_Jobs != NULL)
++                {
++                  std::vector<AviaryCommon::JobStatus*>::iterator it =  property_Jobs->begin();
++                  for( ; it <  property_Jobs->end() ; ++it)
++                  {
++                     AviaryCommon::JobStatus* element = *it;
++                
++            
++                
++
++                if(element != NULL)
++                {
++                   
++                   
++                         delete  element;
++                     
++
++                   }
++
++                
++                
++                
++               }
++
++             }
++                
++                    if(NULL != property_Jobs)
++                 delete property_Jobs;
++                
++               isValidJobs = false; 
++               return true;
++           }
++
++           /**
++            * Check whether jobs is nill
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobStatusResponse::isJobsNil()
++           {
++               return !isValidJobs;
++           }
++
++           /**
++            * Set jobs to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobStatusResponse::setJobsNil()
++           {
++               return resetJobs();
++           }
++
++           
++           /**
++            * Check whether jobs is nill at i
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobStatusResponse::isJobsNilAt(int i)
++           {
++               return (isValidJobs == false ||
++                       NULL == property_Jobs ||
++                     NULL == (*property_Jobs)[i]);
++            }
++
++           /**
++            * Set jobs to nil at i
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobStatusResponse::setJobsNilAt(int i)
++           {
++                int size = 0;
++                int j;
++                bool non_nil_exists = false;
++
++                int k = 0;
++
++                if(property_Jobs == NULL ||
++                            isValidJobs == false)
++                {
++                    
++                    non_nil_exists = false;
++                }
++                else
++                {
++                    size = property_Jobs->size();
++                    for(j = 0, k = 0; j < size; j ++ )
++                    {
++                        if(i == j) continue; 
++                        if(NULL != (*property_Jobs)[i])
++                        {
++                            k++;
++                            non_nil_exists = true;
++                            if( k >= 0)
++                            {
++                                break;
++                            }
++                        }
++                    }
++                }
++                
++
++                if( k < 0)
++                {
++                       WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "Size of the array of jobs is beinng set to be smaller than the specificed number of minOccurs(0)");
++                       return AXIS2_FAILURE;
++                }
++ 
++                if(property_Jobs == NULL)
++                {
++                    isValidJobs = false;
++                    
++                    return true;
++                }
++                 
++                 /* check whether there already exist an element */
++                 AviaryCommon::JobStatus* element = (*property_Jobs)[i];
++                if(NULL != element)
++                {
++                  
++                  
++                  
++                        delete element;
++                     
++                 }
++                 
++                    if(!non_nil_exists)
++                    {
++                        
++                        isValidJobs = false;
++                        (*property_Jobs)[i] = NULL;
++                        return AXIS2_SUCCESS;
++                    }
++                
++
++                
++                (*property_Jobs)[i] = NULL;
++                
++                return AXIS2_SUCCESS;
++
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/codegen/query/src/AviaryQuery_GetJobSummary.cpp b/src/condor_contrib/aviary/codegen/query/src/AviaryQuery_GetJobSummary.cpp
+new file mode 100644
+index 0000000..bfbaa18
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/query/src/AviaryQuery_GetJobSummary.cpp
+@@ -0,0 +1,980 @@
++
++
++        /**
++         * GetJobSummary.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryQuery_GetJobSummary.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryQuery;
++        
++               /*
++                * Implementation of the GetJobSummary|http://query.aviary.grid.redhat.com Element
++                */
++           AviaryQuery::GetJobSummary::GetJobSummary()
++        {
++
++        
++            qname = NULL;
++        
++                property_Ids  = NULL;
++              
++            isValidIds  = false;
++        
++            isValidPartialMatches  = false;
++        
++                  qname =  axutil_qname_create (Environment::getEnv(),
++                        "GetJobSummary",
++                        "http://query.aviary.grid.redhat.com",
++                        NULL);
++                
++        }
++
++       AviaryQuery::GetJobSummary::GetJobSummary(std::vector<AviaryCommon::JobID*>* arg_Ids,bool arg_PartialMatches)
++        {
++             
++                   qname = NULL;
++             
++               property_Ids  = NULL;
++             
++            isValidIds  = true;
++            
++            isValidPartialMatches  = true;
++            
++                 qname =  axutil_qname_create (Environment::getEnv(),
++                       "GetJobSummary",
++                       "http://query.aviary.grid.redhat.com",
++                       NULL);
++               
++                    property_Ids = arg_Ids;
++            
++                    property_PartialMatches = arg_PartialMatches;
++            
++        }
++        AviaryQuery::GetJobSummary::~GetJobSummary()
++        {
++
++        }
++
++        
++
++        bool WSF_CALL
++        AviaryQuery::GetJobSummary::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++          
++          axiom_attribute_t *parent_attri = NULL;
++          axiom_element_t *parent_element = NULL;
++          axis2_char_t *attrib_text = NULL;
++
++          axutil_hash_t *attribute_hash = NULL;
++
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++               int i = 0;
++            
++               int sequence_broken = 0;
++               axiom_node_t *tmp_node = NULL;
++            
++            axutil_qname_t *element_qname = NULL; 
++            
++               axiom_node_t *first_node = NULL;
++               bool is_early_node_valid = true;
++               axiom_node_t *current_node = NULL;
++               axiom_element_t *current_element = NULL;
++            
++              
++              while(parent && axiom_node_get_node_type(parent, Environment::getEnv()) != AXIOM_ELEMENT)
++              {
++                  parent = axiom_node_get_next_sibling(parent, Environment::getEnv());
++              }
++              if (NULL == parent)
++              {   
++                return AXIS2_FAILURE;
++              }
++              
++
++                    current_element = (axiom_element_t *)axiom_node_get_data_element(parent, Environment::getEnv());
++                    mqname = axiom_element_get_qname(current_element, Environment::getEnv(), parent);
++                    if (axutil_qname_equals(mqname, Environment::getEnv(), this->qname))
++                    {
++                        
++                          first_node = axiom_node_get_first_child(parent, Environment::getEnv());
++                          
++                    }
++                    else
++                    {
++                        WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI,
++                              "Failed in building adb object for GetJobSummary : "
++                              "Expected %s but returned %s",
++                              axutil_qname_to_string(qname, Environment::getEnv()),
++                              axutil_qname_to_string(mqname, Environment::getEnv()));
++                        
++                        return AXIS2_FAILURE;
++                    }
++                    
++                 parent_element = (axiom_element_t *)axiom_node_get_data_element(parent, Environment::getEnv());
++                 attribute_hash = axiom_element_get_all_attributes(parent_element, Environment::getEnv());
++              
++                       { 
++                    /*
++                     * building Ids array
++                     */
++                       std::vector<AviaryCommon::JobID*>* arr_list =new std::vector<AviaryCommon::JobID*>();
++                   
++
++                     
++                     /*
++                      * building ids element
++                      */
++                     
++                     
++                     
++                                    element_qname = axutil_qname_create(Environment::getEnv(), "ids", NULL, NULL);
++                                  
++                               
++                               for (i = 0, sequence_broken = 0, current_node = first_node; !sequence_broken && current_node != NULL;)
++                                             
++                               {
++                                  if(axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                  {
++                                     current_node =axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                     is_early_node_valid = false;
++                                     continue;
++                                  }
++                                  
++                                  current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                  mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++
++                                  if (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("ids", axiom_element_get_localname(current_element, Environment::getEnv())))
++                                  {
++                                  
++                                      is_early_node_valid = true;
++                                      
++                                     AviaryCommon::JobID* element = new AviaryCommon::JobID();
++                                          
++                                          status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                          
++                                          if(AXIS2_FAILURE ==  status)
++                                          {
++					  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "failed in building element ids ");
++                                          }
++                                          else
++                                          {
++                                            arr_list->push_back(element);
++                                            
++                                          }
++                                        
++                                     if(AXIS2_FAILURE ==  status)
++                                     {
++                                         WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in setting the value for ids ");
++                                         if(element_qname)
++                                         {
++                                            axutil_qname_free(element_qname, Environment::getEnv());
++                                         }
++                                         if(arr_list)
++                                         {
++                                            delete arr_list;
++                                         }
++                                         return false;
++                                     }
++
++                                     i++;
++                                    current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                  }
++                                  else
++                                  {
++                                      is_early_node_valid = false;
++                                      sequence_broken = 1;
++                                  }
++                                  
++                               }
++
++                               
++                                   if (i < 0)
++                                   {
++                                     /* found element out of order */
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"ids (@minOccurs = '0') only have %d elements", i);
++                                     if(element_qname)
++                                     {
++                                        axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     if(arr_list)
++                                     {
++                                        delete arr_list;
++                                     }
++                                     return false;
++                                   }
++                               
++
++                               if(0 == arr_list->size())
++                               {
++                                    delete arr_list;
++                               }
++                               else
++                               {
++                                    status = setIds(arr_list);
++                               }
++
++                              
++                            } 
++                        
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++                
++                
++                  parent_attri = NULL;
++                  attrib_text = NULL;
++                  if(attribute_hash)
++                  {
++                       axutil_hash_index_t *hi;
++                       void *val;
++                       const void *key;
++
++                       for (hi = axutil_hash_first(attribute_hash, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                       {
++                           axutil_hash_this(hi, &key, NULL, &val);
++                           
++                           
++                               if(!strcmp((axis2_char_t*)key, "partialMatches"))
++                             
++                               {
++                                   parent_attri = (axiom_attribute_t*)val;
++                                   break;
++                               }
++                       }
++                  }
++
++                  if(parent_attri)
++                  {
++                    attrib_text = axiom_attribute_get_value(parent_attri, Environment::getEnv());
++                  }
++                  else
++                  {
++                    /* this is hoping that attribute is stored in "partialMatches", this happnes when name is in default namespace */
++                    attrib_text = axiom_element_get_attribute_value_by_name(parent_element, Environment::getEnv(), "partialMatches");
++                  }
++
++                  if(attrib_text != NULL)
++                  {
++                      
++                      
++                           if (!axutil_strcmp(attrib_text, "TRUE") || !axutil_strcmp(attrib_text, "true"))
++                           {
++                               setPartialMatches(true);
++                           }
++                           else
++                           {
++                               setPartialMatches(false);
++                           }
++                        
++                    }
++                  
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryQuery::GetJobSummary::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryQuery::GetJobSummary::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryQuery::GetJobSummary::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++               axiom_attribute_t *text_attri = NULL;
++             
++             axis2_char_t *string_to_stream;
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++                axiom_namespace_t *ns1 = NULL;
++
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                axis2_char_t *p_prefix = NULL;
++            
++               int i = 0;
++               int count = 0;
++               void *element = NULL;
++             
++                    axis2_char_t text_value_1[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++                    axis2_char_t text_value_2[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++                axis2_char_t *text_value = NULL;
++             
++               axis2_char_t *start_input_str = NULL;
++               axis2_char_t *end_input_str = NULL;
++               unsigned int start_input_str_len = 0;
++               unsigned int end_input_str_len = 0;
++            
++            
++               axiom_data_source_t *data_source = NULL;
++               axutil_stream_t *stream = NULL;
++
++             
++                int next_ns_index_value = 0;
++             
++                    namespaces = axutil_hash_make(Environment::getEnv());
++                    next_ns_index = &next_ns_index_value;
++                     
++                           ns1 = axiom_namespace_create (Environment::getEnv(),
++                                             "http://query.aviary.grid.redhat.com",
++                                             "n"); 
++                           axutil_hash_set(namespaces, "http://query.aviary.grid.redhat.com", AXIS2_HASH_KEY_STRING, axutil_strdup(Environment::getEnv(), "n"));
++                       
++                     
++                    parent_element = axiom_element_create (Environment::getEnv(), NULL, "GetJobSummary", ns1 , &parent);
++                    
++                    
++                    axiom_element_set_namespace(parent_element, Environment::getEnv(), ns1, parent);
++
++
++            
++                    data_source = axiom_data_source_create(Environment::getEnv(), parent, &current_node);
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv());
++                  
++            if(!parent_tag_closed)
++            {
++            
++                if(isValidPartialMatches)
++                {
++                
++                        p_prefix = NULL;
++                      
++                           
++                           text_value = (axis2_char_t*)((property_PartialMatches)?"true":"false");
++                           string_to_stream = (axis2_char_t*) AXIS2_MALLOC (Environment::getEnv()-> allocator, sizeof (axis2_char_t) *
++                                                            (5  + ADB_DEFAULT_NAMESPACE_PREFIX_LIMIT +
++                                                             axutil_strlen(text_value) + 
++                                                             axutil_strlen("partialMatches")));
++                           sprintf(string_to_stream, " %s%s%s=\"%s\"", p_prefix?p_prefix:"", (p_prefix && axutil_strcmp(p_prefix, ""))?":":"",
++                                                "partialMatches",  text_value);
++                           axutil_stream_write(stream, Environment::getEnv(), string_to_stream, axutil_strlen(string_to_stream));
++                           AXIS2_FREE(Environment::getEnv()-> allocator, string_to_stream);
++                        
++                   }
++                   
++            }
++            
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidIds)
++                   {
++                      
++                           /* no need to complain for minoccurs=0 element */
++                            
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("ids"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("ids")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     /*
++                      * Parsing Ids array
++                      */
++                     if (property_Ids != NULL)
++                     {
++                        
++
++                            sprintf(start_input_str, "<%s%sids",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                         start_input_str_len = axutil_strlen(start_input_str);
++
++                         sprintf(end_input_str, "</%s%sids>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                         end_input_str_len = axutil_strlen(end_input_str);
++
++                         count = property_Ids->size();
++                         for(i = 0; i < count; i++)
++                         {
++                            AviaryCommon::JobID* element = (*property_Ids)[i];
++
++                            if(NULL == element) 
++                            {
++                                continue;
++                            }
++
++                    
++                     
++                     /*
++                      * parsing ids element
++                      */
++
++                    
++                     
++                            if(!element->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                            }
++                            element->serialize(current_node, parent_element,
++                                                                                 element->isParticle() || false, namespaces, next_ns_index);
++                            
++                            if(!element->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                            }
++                            
++                         }
++                     }
++                   
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                    
++                    if(parent_tag_closed)
++                    {
++                       if(isValidPartialMatches)
++                       {
++                       
++                           p_prefix = NULL;
++                           ns1 = NULL;
++                         
++                           
++                           text_value =  (axis2_char_t*)((property_PartialMatches)?axutil_strdup(Environment::getEnv(), "true"):axutil_strdup(Environment::getEnv(), "false"));
++                           text_attri = axiom_attribute_create (Environment::getEnv(), "partialMatches", text_value, ns1);
++                           axiom_element_add_attribute (parent_element, Environment::getEnv(), text_attri, parent);
++                           AXIS2_FREE(Environment::getEnv()->allocator, text_value);
++                        
++                      }
++                       
++                  }
++                
++                   if(namespaces)
++                   {
++                       axutil_hash_index_t *hi;
++                       void *val;
++                       for (hi = axutil_hash_first(namespaces, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                       {
++                           axutil_hash_this(hi, NULL, NULL, &val);
++                           AXIS2_FREE(Environment::getEnv()->allocator, val);
++                       }
++                       axutil_hash_free(namespaces, Environment::getEnv());
++                   }
++                
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for ids by  Property Number 1
++             */
++            std::vector<AviaryCommon::JobID*>* WSF_CALL
++            AviaryQuery::GetJobSummary::getProperty1()
++            {
++                return getIds();
++            }
++
++            /**
++             * getter for ids.
++             */
++            std::vector<AviaryCommon::JobID*>* WSF_CALL
++            AviaryQuery::GetJobSummary::getIds()
++             {
++                return property_Ids;
++             }
++
++            /**
++             * setter for ids
++             */
++            bool WSF_CALL
++            AviaryQuery::GetJobSummary::setIds(
++                    std::vector<AviaryCommon::JobID*>*  arg_Ids)
++             {
++                
++                 int size = 0;
++                 int i = 0;
++                 bool non_nil_exists = false;
++                
++
++                if(isValidIds &&
++                        arg_Ids == property_Ids)
++                {
++                    
++                    return true;
++                }
++
++                
++                 size = arg_Ids->size();
++                 
++                 if (size < 0)
++                 {
++                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"ids has less than minOccurs(0)");
++                     return false;
++                 }
++                 for(i = 0; i < size; i ++ )
++                 {
++                     if(NULL != (*arg_Ids)[i])
++                     {
++                         non_nil_exists = true;
++                         break;
++                     }
++                 }
++
++                 
++
++                
++                resetIds();
++
++                
++                    if(NULL == arg_Ids)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_Ids = arg_Ids;
++                        if(non_nil_exists)
++                        {
++                            isValidIds = true;
++                        }
++                        
++                    
++                return true;
++             }
++
++            
++            /**
++             * Get ith element of ids.
++             */
++            AviaryCommon::JobID* WSF_CALL
++            AviaryQuery::GetJobSummary::getIdsAt(int i)
++            {
++                AviaryCommon::JobID* ret_val;
++                if(property_Ids == NULL)
++                {
++                    return (AviaryCommon::JobID*)0;
++                }
++                ret_val =   (*property_Ids)[i];
++                
++                    return ret_val;
++                  
++            }
++
++            /**
++             * Set the ith element of ids.
++             */
++           bool WSF_CALL
++            AviaryQuery::GetJobSummary::setIdsAt(int i,
++                    AviaryCommon::JobID* arg_Ids)
++            {
++                 AviaryCommon::JobID* element;
++                int size = 0;
++
++                int non_nil_count;
++                bool non_nil_exists = false;
++
++                 
++
++                if( isValidIds &&
++                    property_Ids &&
++                  
++                    arg_Ids == (*property_Ids)[i])
++                  
++                 {
++                    
++                    return AXIS2_SUCCESS; 
++                }
++
++                   
++                     non_nil_exists = true;
++                  
++
++                if(property_Ids == NULL)
++                {
++                    property_Ids = new std::vector<AviaryCommon::JobID*>();
++                }
++                else{
++                /* check whether there already exist an element */
++                element = (*property_Ids)[i];
++                }
++
++                
++                        if(NULL != element)
++                        {
++                          
++                          
++                          
++                                delete element;
++                             
++                        }
++                        
++                    
++                    if(!non_nil_exists)
++                    {
++                        
++                        isValidIds = true;
++                        (*property_Ids)[i]= NULL;
++                        
++                        return AXIS2_SUCCESS;
++                    }
++                
++                    (*property_Ids)[i] = arg_Ids;
++                  
++
++               isValidIds = true;
++                
++                return AXIS2_SUCCESS;
++            }
++
++            /**
++             * Add to ids.
++             */
++            bool WSF_CALL
++            AviaryQuery::GetJobSummary::addIds(
++                    AviaryCommon::JobID* arg_Ids)
++             {
++
++                
++                    if( NULL == arg_Ids
++                     )
++                    {
++                      
++                           return true; 
++                        
++                    }
++                  
++
++                if(property_Ids == NULL)
++                {
++                    property_Ids = new std::vector<AviaryCommon::JobID*>();
++                }
++              
++               property_Ids->push_back(arg_Ids);
++              
++                isValidIds = true;
++                return true;
++             }
++
++            /**
++             * Get the size of the ids array.
++             */
++            int WSF_CALL
++            AviaryQuery::GetJobSummary::sizeofIds()
++            {
++
++                if(property_Ids == NULL)
++                {
++                    return 0;
++                }
++                return property_Ids->size();
++            }
++
++            /**
++             * remove the ith element, same as set_nil_at.
++             */
++            bool WSF_CALL
++            AviaryQuery::GetJobSummary::removeIdsAt(int i)
++            {
++                return setIdsNilAt(i);
++            }
++
++            
++
++           /**
++            * resetter for ids
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobSummary::resetIds()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++                if (property_Ids != NULL)
++                {
++                  std::vector<AviaryCommon::JobID*>::iterator it =  property_Ids->begin();
++                  for( ; it <  property_Ids->end() ; ++it)
++                  {
++                     AviaryCommon::JobID* element = *it;
++                
++            
++                
++
++                if(element != NULL)
++                {
++                   
++                   
++                         delete  element;
++                     
++
++                   }
++
++                
++                
++                
++               }
++
++             }
++                
++                    if(NULL != property_Ids)
++                 delete property_Ids;
++                
++               isValidIds = false; 
++               return true;
++           }
++
++           /**
++            * Check whether ids is nill
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobSummary::isIdsNil()
++           {
++               return !isValidIds;
++           }
++
++           /**
++            * Set ids to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobSummary::setIdsNil()
++           {
++               return resetIds();
++           }
++
++           
++           /**
++            * Check whether ids is nill at i
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobSummary::isIdsNilAt(int i)
++           {
++               return (isValidIds == false ||
++                       NULL == property_Ids ||
++                     NULL == (*property_Ids)[i]);
++            }
++
++           /**
++            * Set ids to nil at i
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobSummary::setIdsNilAt(int i)
++           {
++                int size = 0;
++                int j;
++                bool non_nil_exists = false;
++
++                int k = 0;
++
++                if(property_Ids == NULL ||
++                            isValidIds == false)
++                {
++                    
++                    non_nil_exists = false;
++                }
++                else
++                {
++                    size = property_Ids->size();
++                    for(j = 0, k = 0; j < size; j ++ )
++                    {
++                        if(i == j) continue; 
++                        if(NULL != (*property_Ids)[i])
++                        {
++                            k++;
++                            non_nil_exists = true;
++                            if( k >= 0)
++                            {
++                                break;
++                            }
++                        }
++                    }
++                }
++                
++
++                if( k < 0)
++                {
++                       WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "Size of the array of ids is beinng set to be smaller than the specificed number of minOccurs(0)");
++                       return AXIS2_FAILURE;
++                }
++ 
++                if(property_Ids == NULL)
++                {
++                    isValidIds = false;
++                    
++                    return true;
++                }
++                 
++                 /* check whether there already exist an element */
++                 AviaryCommon::JobID* element = (*property_Ids)[i];
++                if(NULL != element)
++                {
++                  
++                  
++                  
++                        delete element;
++                     
++                 }
++                 
++                    if(!non_nil_exists)
++                    {
++                        
++                        isValidIds = false;
++                        (*property_Ids)[i] = NULL;
++                        return AXIS2_SUCCESS;
++                    }
++                
++
++                
++                (*property_Ids)[i] = NULL;
++                
++                return AXIS2_SUCCESS;
++
++           }
++
++           
++
++            /**
++             * Getter for partialMatches by  Property Number 2
++             */
++            bool WSF_CALL
++            AviaryQuery::GetJobSummary::getProperty2()
++            {
++                return getPartialMatches();
++            }
++
++            /**
++             * getter for partialMatches.
++             */
++            bool WSF_CALL
++            AviaryQuery::GetJobSummary::getPartialMatches()
++             {
++                return property_PartialMatches;
++             }
++
++            /**
++             * setter for partialMatches
++             */
++            bool WSF_CALL
++            AviaryQuery::GetJobSummary::setPartialMatches(
++                    bool  arg_PartialMatches)
++             {
++                
++
++                if(isValidPartialMatches &&
++                        arg_PartialMatches == property_PartialMatches)
++                {
++                    
++                    return true;
++                }
++
++                
++
++                
++                resetPartialMatches();
++
++                
++                        property_PartialMatches = arg_PartialMatches;
++                        isValidPartialMatches = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for partialMatches
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobSummary::resetPartialMatches()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidPartialMatches = false; 
++               return true;
++           }
++
++           /**
++            * Check whether partialMatches is nill
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobSummary::isPartialMatchesNil()
++           {
++               return !isValidPartialMatches;
++           }
++
++           /**
++            * Set partialMatches to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobSummary::setPartialMatchesNil()
++           {
++               return resetPartialMatches();
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/codegen/query/src/AviaryQuery_GetJobSummaryResponse.cpp b/src/condor_contrib/aviary/codegen/query/src/AviaryQuery_GetJobSummaryResponse.cpp
+new file mode 100644
+index 0000000..a3bdc0c
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/query/src/AviaryQuery_GetJobSummaryResponse.cpp
+@@ -0,0 +1,776 @@
++
++
++        /**
++         * GetJobSummaryResponse.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryQuery_GetJobSummaryResponse.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryQuery;
++        
++               /*
++                * Implementation of the GetJobSummaryResponse|http://query.aviary.grid.redhat.com Element
++                */
++           AviaryQuery::GetJobSummaryResponse::GetJobSummaryResponse()
++        {
++
++        
++            qname = NULL;
++        
++                property_Jobs  = NULL;
++              
++            isValidJobs  = false;
++        
++                  qname =  axutil_qname_create (Environment::getEnv(),
++                        "GetJobSummaryResponse",
++                        "http://query.aviary.grid.redhat.com",
++                        NULL);
++                
++        }
++
++       AviaryQuery::GetJobSummaryResponse::GetJobSummaryResponse(std::vector<AviaryCommon::JobSummary*>* arg_Jobs)
++        {
++             
++                   qname = NULL;
++             
++               property_Jobs  = NULL;
++             
++            isValidJobs  = true;
++            
++                 qname =  axutil_qname_create (Environment::getEnv(),
++                       "GetJobSummaryResponse",
++                       "http://query.aviary.grid.redhat.com",
++                       NULL);
++               
++                    property_Jobs = arg_Jobs;
++            
++        }
++        AviaryQuery::GetJobSummaryResponse::~GetJobSummaryResponse()
++        {
++
++        }
++
++        
++
++        bool WSF_CALL
++        AviaryQuery::GetJobSummaryResponse::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++               int i = 0;
++            
++               int sequence_broken = 0;
++               axiom_node_t *tmp_node = NULL;
++            
++            axutil_qname_t *element_qname = NULL; 
++            
++               axiom_node_t *first_node = NULL;
++               bool is_early_node_valid = true;
++               axiom_node_t *current_node = NULL;
++               axiom_element_t *current_element = NULL;
++            
++              
++              while(parent && axiom_node_get_node_type(parent, Environment::getEnv()) != AXIOM_ELEMENT)
++              {
++                  parent = axiom_node_get_next_sibling(parent, Environment::getEnv());
++              }
++              if (NULL == parent)
++              {   
++                return AXIS2_FAILURE;
++              }
++              
++
++                    current_element = (axiom_element_t *)axiom_node_get_data_element(parent, Environment::getEnv());
++                    mqname = axiom_element_get_qname(current_element, Environment::getEnv(), parent);
++                    if (axutil_qname_equals(mqname, Environment::getEnv(), this->qname))
++                    {
++                        
++                          first_node = axiom_node_get_first_child(parent, Environment::getEnv());
++                          
++                    }
++                    else
++                    {
++                        WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI,
++                              "Failed in building adb object for GetJobSummaryResponse : "
++                              "Expected %s but returned %s",
++                              axutil_qname_to_string(qname, Environment::getEnv()),
++                              axutil_qname_to_string(mqname, Environment::getEnv()));
++                        
++                        return AXIS2_FAILURE;
++                    }
++                    
++                       { 
++                    /*
++                     * building Jobs array
++                     */
++                       std::vector<AviaryCommon::JobSummary*>* arr_list =new std::vector<AviaryCommon::JobSummary*>();
++                   
++
++                     
++                     /*
++                      * building jobs element
++                      */
++                     
++                     
++                     
++                                    element_qname = axutil_qname_create(Environment::getEnv(), "jobs", NULL, NULL);
++                                  
++                               
++                               for (i = 0, sequence_broken = 0, current_node = first_node; !sequence_broken && current_node != NULL;)
++                                             
++                               {
++                                  if(axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                  {
++                                     current_node =axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                     is_early_node_valid = false;
++                                     continue;
++                                  }
++                                  
++                                  current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                  mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++
++                                  if (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("jobs", axiom_element_get_localname(current_element, Environment::getEnv())))
++                                  {
++                                  
++                                      is_early_node_valid = true;
++                                      
++                                     AviaryCommon::JobSummary* element = new AviaryCommon::JobSummary();
++                                          
++                                          status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                          
++                                          if(AXIS2_FAILURE ==  status)
++                                          {
++					  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "failed in building element jobs ");
++                                          }
++                                          else
++                                          {
++                                            arr_list->push_back(element);
++                                            
++                                          }
++                                        
++                                     if(AXIS2_FAILURE ==  status)
++                                     {
++                                         WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in setting the value for jobs ");
++                                         if(element_qname)
++                                         {
++                                            axutil_qname_free(element_qname, Environment::getEnv());
++                                         }
++                                         if(arr_list)
++                                         {
++                                            delete arr_list;
++                                         }
++                                         return false;
++                                     }
++
++                                     i++;
++                                    current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                  }
++                                  else
++                                  {
++                                      is_early_node_valid = false;
++                                      sequence_broken = 1;
++                                  }
++                                  
++                               }
++
++                               
++                                   if (i < 0)
++                                   {
++                                     /* found element out of order */
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"jobs (@minOccurs = '0') only have %d elements", i);
++                                     if(element_qname)
++                                     {
++                                        axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     if(arr_list)
++                                     {
++                                        delete arr_list;
++                                     }
++                                     return false;
++                                   }
++                               
++
++                               if(0 == arr_list->size())
++                               {
++                                    delete arr_list;
++                               }
++                               else
++                               {
++                                    status = setJobs(arr_list);
++                               }
++
++                              
++                            } 
++                        
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryQuery::GetJobSummaryResponse::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryQuery::GetJobSummaryResponse::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryQuery::GetJobSummaryResponse::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++                axiom_namespace_t *ns1 = NULL;
++
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                axis2_char_t *p_prefix = NULL;
++            
++               int i = 0;
++               int count = 0;
++               void *element = NULL;
++             
++                    axis2_char_t text_value_1[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++               axis2_char_t *start_input_str = NULL;
++               axis2_char_t *end_input_str = NULL;
++               unsigned int start_input_str_len = 0;
++               unsigned int end_input_str_len = 0;
++            
++            
++               axiom_data_source_t *data_source = NULL;
++               axutil_stream_t *stream = NULL;
++
++             
++                int next_ns_index_value = 0;
++             
++                    namespaces = axutil_hash_make(Environment::getEnv());
++                    next_ns_index = &next_ns_index_value;
++                     
++                           ns1 = axiom_namespace_create (Environment::getEnv(),
++                                             "http://query.aviary.grid.redhat.com",
++                                             "n"); 
++                           axutil_hash_set(namespaces, "http://query.aviary.grid.redhat.com", AXIS2_HASH_KEY_STRING, axutil_strdup(Environment::getEnv(), "n"));
++                       
++                     
++                    parent_element = axiom_element_create (Environment::getEnv(), NULL, "GetJobSummaryResponse", ns1 , &parent);
++                    
++                    
++                    axiom_element_set_namespace(parent_element, Environment::getEnv(), ns1, parent);
++
++
++            
++                    data_source = axiom_data_source_create(Environment::getEnv(), parent, &current_node);
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv());
++                  
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidJobs)
++                   {
++                      
++                           /* no need to complain for minoccurs=0 element */
++                            
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("jobs"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("jobs")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     /*
++                      * Parsing Jobs array
++                      */
++                     if (property_Jobs != NULL)
++                     {
++                        
++
++                            sprintf(start_input_str, "<%s%sjobs",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                         start_input_str_len = axutil_strlen(start_input_str);
++
++                         sprintf(end_input_str, "</%s%sjobs>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                         end_input_str_len = axutil_strlen(end_input_str);
++
++                         count = property_Jobs->size();
++                         for(i = 0; i < count; i++)
++                         {
++                            AviaryCommon::JobSummary* element = (*property_Jobs)[i];
++
++                            if(NULL == element) 
++                            {
++                                continue;
++                            }
++
++                    
++                     
++                     /*
++                      * parsing jobs element
++                      */
++
++                    
++                     
++                            if(!element->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                            }
++                            element->serialize(current_node, parent_element,
++                                                                                 element->isParticle() || false, namespaces, next_ns_index);
++                            
++                            if(!element->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                            }
++                            
++                         }
++                     }
++                   
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                   if(namespaces)
++                   {
++                       axutil_hash_index_t *hi;
++                       void *val;
++                       for (hi = axutil_hash_first(namespaces, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                       {
++                           axutil_hash_this(hi, NULL, NULL, &val);
++                           AXIS2_FREE(Environment::getEnv()->allocator, val);
++                       }
++                       axutil_hash_free(namespaces, Environment::getEnv());
++                   }
++                
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for jobs by  Property Number 1
++             */
++            std::vector<AviaryCommon::JobSummary*>* WSF_CALL
++            AviaryQuery::GetJobSummaryResponse::getProperty1()
++            {
++                return getJobs();
++            }
++
++            /**
++             * getter for jobs.
++             */
++            std::vector<AviaryCommon::JobSummary*>* WSF_CALL
++            AviaryQuery::GetJobSummaryResponse::getJobs()
++             {
++                return property_Jobs;
++             }
++
++            /**
++             * setter for jobs
++             */
++            bool WSF_CALL
++            AviaryQuery::GetJobSummaryResponse::setJobs(
++                    std::vector<AviaryCommon::JobSummary*>*  arg_Jobs)
++             {
++                
++                 int size = 0;
++                 int i = 0;
++                 bool non_nil_exists = false;
++                
++
++                if(isValidJobs &&
++                        arg_Jobs == property_Jobs)
++                {
++                    
++                    return true;
++                }
++
++                
++                 size = arg_Jobs->size();
++                 
++                 if (size < 0)
++                 {
++                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"jobs has less than minOccurs(0)");
++                     return false;
++                 }
++                 for(i = 0; i < size; i ++ )
++                 {
++                     if(NULL != (*arg_Jobs)[i])
++                     {
++                         non_nil_exists = true;
++                         break;
++                     }
++                 }
++
++                 
++
++                
++                resetJobs();
++
++                
++                    if(NULL == arg_Jobs)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_Jobs = arg_Jobs;
++                        if(non_nil_exists)
++                        {
++                            isValidJobs = true;
++                        }
++                        
++                    
++                return true;
++             }
++
++            
++            /**
++             * Get ith element of jobs.
++             */
++            AviaryCommon::JobSummary* WSF_CALL
++            AviaryQuery::GetJobSummaryResponse::getJobsAt(int i)
++            {
++                AviaryCommon::JobSummary* ret_val;
++                if(property_Jobs == NULL)
++                {
++                    return (AviaryCommon::JobSummary*)0;
++                }
++                ret_val =   (*property_Jobs)[i];
++                
++                    return ret_val;
++                  
++            }
++
++            /**
++             * Set the ith element of jobs.
++             */
++           bool WSF_CALL
++            AviaryQuery::GetJobSummaryResponse::setJobsAt(int i,
++                    AviaryCommon::JobSummary* arg_Jobs)
++            {
++                 AviaryCommon::JobSummary* element;
++                int size = 0;
++
++                int non_nil_count;
++                bool non_nil_exists = false;
++
++                 
++
++                if( isValidJobs &&
++                    property_Jobs &&
++                  
++                    arg_Jobs == (*property_Jobs)[i])
++                  
++                 {
++                    
++                    return AXIS2_SUCCESS; 
++                }
++
++                   
++                     non_nil_exists = true;
++                  
++
++                if(property_Jobs == NULL)
++                {
++                    property_Jobs = new std::vector<AviaryCommon::JobSummary*>();
++                }
++                else{
++                /* check whether there already exist an element */
++                element = (*property_Jobs)[i];
++                }
++
++                
++                        if(NULL != element)
++                        {
++                          
++                          
++                          
++                                delete element;
++                             
++                        }
++                        
++                    
++                    if(!non_nil_exists)
++                    {
++                        
++                        isValidJobs = true;
++                        (*property_Jobs)[i]= NULL;
++                        
++                        return AXIS2_SUCCESS;
++                    }
++                
++                    (*property_Jobs)[i] = arg_Jobs;
++                  
++
++               isValidJobs = true;
++                
++                return AXIS2_SUCCESS;
++            }
++
++            /**
++             * Add to jobs.
++             */
++            bool WSF_CALL
++            AviaryQuery::GetJobSummaryResponse::addJobs(
++                    AviaryCommon::JobSummary* arg_Jobs)
++             {
++
++                
++                    if( NULL == arg_Jobs
++                     )
++                    {
++                      
++                           return true; 
++                        
++                    }
++                  
++
++                if(property_Jobs == NULL)
++                {
++                    property_Jobs = new std::vector<AviaryCommon::JobSummary*>();
++                }
++              
++               property_Jobs->push_back(arg_Jobs);
++              
++                isValidJobs = true;
++                return true;
++             }
++
++            /**
++             * Get the size of the jobs array.
++             */
++            int WSF_CALL
++            AviaryQuery::GetJobSummaryResponse::sizeofJobs()
++            {
++
++                if(property_Jobs == NULL)
++                {
++                    return 0;
++                }
++                return property_Jobs->size();
++            }
++
++            /**
++             * remove the ith element, same as set_nil_at.
++             */
++            bool WSF_CALL
++            AviaryQuery::GetJobSummaryResponse::removeJobsAt(int i)
++            {
++                return setJobsNilAt(i);
++            }
++
++            
++
++           /**
++            * resetter for jobs
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobSummaryResponse::resetJobs()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++                if (property_Jobs != NULL)
++                {
++                  std::vector<AviaryCommon::JobSummary*>::iterator it =  property_Jobs->begin();
++                  for( ; it <  property_Jobs->end() ; ++it)
++                  {
++                     AviaryCommon::JobSummary* element = *it;
++                
++            
++                
++
++                if(element != NULL)
++                {
++                   
++                   
++                         delete  element;
++                     
++
++                   }
++
++                
++                
++                
++               }
++
++             }
++                
++                    if(NULL != property_Jobs)
++                 delete property_Jobs;
++                
++               isValidJobs = false; 
++               return true;
++           }
++
++           /**
++            * Check whether jobs is nill
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobSummaryResponse::isJobsNil()
++           {
++               return !isValidJobs;
++           }
++
++           /**
++            * Set jobs to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobSummaryResponse::setJobsNil()
++           {
++               return resetJobs();
++           }
++
++           
++           /**
++            * Check whether jobs is nill at i
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobSummaryResponse::isJobsNilAt(int i)
++           {
++               return (isValidJobs == false ||
++                       NULL == property_Jobs ||
++                     NULL == (*property_Jobs)[i]);
++            }
++
++           /**
++            * Set jobs to nil at i
++            */
++           bool WSF_CALL
++           AviaryQuery::GetJobSummaryResponse::setJobsNilAt(int i)
++           {
++                int size = 0;
++                int j;
++                bool non_nil_exists = false;
++
++                int k = 0;
++
++                if(property_Jobs == NULL ||
++                            isValidJobs == false)
++                {
++                    
++                    non_nil_exists = false;
++                }
++                else
++                {
++                    size = property_Jobs->size();
++                    for(j = 0, k = 0; j < size; j ++ )
++                    {
++                        if(i == j) continue; 
++                        if(NULL != (*property_Jobs)[i])
++                        {
++                            k++;
++                            non_nil_exists = true;
++                            if( k >= 0)
++                            {
++                                break;
++                            }
++                        }
++                    }
++                }
++                
++
++                if( k < 0)
++                {
++                       WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "Size of the array of jobs is beinng set to be smaller than the specificed number of minOccurs(0)");
++                       return AXIS2_FAILURE;
++                }
++ 
++                if(property_Jobs == NULL)
++                {
++                    isValidJobs = false;
++                    
++                    return true;
++                }
++                 
++                 /* check whether there already exist an element */
++                 AviaryCommon::JobSummary* element = (*property_Jobs)[i];
++                if(NULL != element)
++                {
++                  
++                  
++                  
++                        delete element;
++                     
++                 }
++                 
++                    if(!non_nil_exists)
++                    {
++                        
++                        isValidJobs = false;
++                        (*property_Jobs)[i] = NULL;
++                        return AXIS2_SUCCESS;
++                    }
++                
++
++                
++                (*property_Jobs)[i] = NULL;
++                
++                return AXIS2_SUCCESS;
++
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/codegen/query/src/AviaryQuery_GetSubmissionSummary.cpp b/src/condor_contrib/aviary/codegen/query/src/AviaryQuery_GetSubmissionSummary.cpp
+new file mode 100644
+index 0000000..1f56355
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/query/src/AviaryQuery_GetSubmissionSummary.cpp
+@@ -0,0 +1,1163 @@
++
++
++        /**
++         * GetSubmissionSummary.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryQuery_GetSubmissionSummary.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryQuery;
++        
++               /*
++                * Implementation of the GetSubmissionSummary|http://query.aviary.grid.redhat.com Element
++                */
++           AviaryQuery::GetSubmissionSummary::GetSubmissionSummary()
++        {
++
++        
++            qname = NULL;
++        
++                property_Ids  = NULL;
++              
++            isValidIds  = false;
++        
++            isValidPartialMatches  = false;
++        
++            isValidIncludeJobSummaries  = false;
++        
++                  qname =  axutil_qname_create (Environment::getEnv(),
++                        "GetSubmissionSummary",
++                        "http://query.aviary.grid.redhat.com",
++                        NULL);
++                
++        }
++
++       AviaryQuery::GetSubmissionSummary::GetSubmissionSummary(std::vector<AviaryCommon::SubmissionID*>* arg_Ids,bool arg_PartialMatches,bool arg_IncludeJobSummaries)
++        {
++             
++                   qname = NULL;
++             
++               property_Ids  = NULL;
++             
++            isValidIds  = true;
++            
++            isValidPartialMatches  = true;
++            
++            isValidIncludeJobSummaries  = true;
++            
++                 qname =  axutil_qname_create (Environment::getEnv(),
++                       "GetSubmissionSummary",
++                       "http://query.aviary.grid.redhat.com",
++                       NULL);
++               
++                    property_Ids = arg_Ids;
++            
++                    property_PartialMatches = arg_PartialMatches;
++            
++                    property_IncludeJobSummaries = arg_IncludeJobSummaries;
++            
++        }
++        AviaryQuery::GetSubmissionSummary::~GetSubmissionSummary()
++        {
++
++        }
++
++        
++
++        bool WSF_CALL
++        AviaryQuery::GetSubmissionSummary::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++          
++          axiom_attribute_t *parent_attri = NULL;
++          axiom_element_t *parent_element = NULL;
++          axis2_char_t *attrib_text = NULL;
++
++          axutil_hash_t *attribute_hash = NULL;
++
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++               int i = 0;
++            
++               int sequence_broken = 0;
++               axiom_node_t *tmp_node = NULL;
++            
++            axutil_qname_t *element_qname = NULL; 
++            
++               axiom_node_t *first_node = NULL;
++               bool is_early_node_valid = true;
++               axiom_node_t *current_node = NULL;
++               axiom_element_t *current_element = NULL;
++            
++              
++              while(parent && axiom_node_get_node_type(parent, Environment::getEnv()) != AXIOM_ELEMENT)
++              {
++                  parent = axiom_node_get_next_sibling(parent, Environment::getEnv());
++              }
++              if (NULL == parent)
++              {   
++                return AXIS2_FAILURE;
++              }
++              
++
++                    current_element = (axiom_element_t *)axiom_node_get_data_element(parent, Environment::getEnv());
++                    mqname = axiom_element_get_qname(current_element, Environment::getEnv(), parent);
++                    if (axutil_qname_equals(mqname, Environment::getEnv(), this->qname))
++                    {
++                        
++                          first_node = axiom_node_get_first_child(parent, Environment::getEnv());
++                          
++                    }
++                    else
++                    {
++                        WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI,
++                              "Failed in building adb object for GetSubmissionSummary : "
++                              "Expected %s but returned %s",
++                              axutil_qname_to_string(qname, Environment::getEnv()),
++                              axutil_qname_to_string(mqname, Environment::getEnv()));
++                        
++                        return AXIS2_FAILURE;
++                    }
++                    
++                 parent_element = (axiom_element_t *)axiom_node_get_data_element(parent, Environment::getEnv());
++                 attribute_hash = axiom_element_get_all_attributes(parent_element, Environment::getEnv());
++              
++                       { 
++                    /*
++                     * building Ids array
++                     */
++                       std::vector<AviaryCommon::SubmissionID*>* arr_list =new std::vector<AviaryCommon::SubmissionID*>();
++                   
++
++                     
++                     /*
++                      * building ids element
++                      */
++                     
++                     
++                     
++                                    element_qname = axutil_qname_create(Environment::getEnv(), "ids", NULL, NULL);
++                                  
++                               
++                               for (i = 0, sequence_broken = 0, current_node = first_node; !sequence_broken && current_node != NULL;)
++                                             
++                               {
++                                  if(axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                  {
++                                     current_node =axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                     is_early_node_valid = false;
++                                     continue;
++                                  }
++                                  
++                                  current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                  mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++
++                                  if (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("ids", axiom_element_get_localname(current_element, Environment::getEnv())))
++                                  {
++                                  
++                                      is_early_node_valid = true;
++                                      
++                                     AviaryCommon::SubmissionID* element = new AviaryCommon::SubmissionID();
++                                          
++                                          status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                          
++                                          if(AXIS2_FAILURE ==  status)
++                                          {
++					  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "failed in building element ids ");
++                                          }
++                                          else
++                                          {
++                                            arr_list->push_back(element);
++                                            
++                                          }
++                                        
++                                     if(AXIS2_FAILURE ==  status)
++                                     {
++                                         WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in setting the value for ids ");
++                                         if(element_qname)
++                                         {
++                                            axutil_qname_free(element_qname, Environment::getEnv());
++                                         }
++                                         if(arr_list)
++                                         {
++                                            delete arr_list;
++                                         }
++                                         return false;
++                                     }
++
++                                     i++;
++                                    current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                  }
++                                  else
++                                  {
++                                      is_early_node_valid = false;
++                                      sequence_broken = 1;
++                                  }
++                                  
++                               }
++
++                               
++                                   if (i < 0)
++                                   {
++                                     /* found element out of order */
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"ids (@minOccurs = '0') only have %d elements", i);
++                                     if(element_qname)
++                                     {
++                                        axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     if(arr_list)
++                                     {
++                                        delete arr_list;
++                                     }
++                                     return false;
++                                   }
++                               
++
++                               if(0 == arr_list->size())
++                               {
++                                    delete arr_list;
++                               }
++                               else
++                               {
++                                    status = setIds(arr_list);
++                               }
++
++                              
++                            } 
++                        
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++                
++                
++                  parent_attri = NULL;
++                  attrib_text = NULL;
++                  if(attribute_hash)
++                  {
++                       axutil_hash_index_t *hi;
++                       void *val;
++                       const void *key;
++
++                       for (hi = axutil_hash_first(attribute_hash, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                       {
++                           axutil_hash_this(hi, &key, NULL, &val);
++                           
++                           
++                               if(!strcmp((axis2_char_t*)key, "partialMatches"))
++                             
++                               {
++                                   parent_attri = (axiom_attribute_t*)val;
++                                   break;
++                               }
++                       }
++                  }
++
++                  if(parent_attri)
++                  {
++                    attrib_text = axiom_attribute_get_value(parent_attri, Environment::getEnv());
++                  }
++                  else
++                  {
++                    /* this is hoping that attribute is stored in "partialMatches", this happnes when name is in default namespace */
++                    attrib_text = axiom_element_get_attribute_value_by_name(parent_element, Environment::getEnv(), "partialMatches");
++                  }
++
++                  if(attrib_text != NULL)
++                  {
++                      
++                      
++                           if (!axutil_strcmp(attrib_text, "TRUE") || !axutil_strcmp(attrib_text, "true"))
++                           {
++                               setPartialMatches(true);
++                           }
++                           else
++                           {
++                               setPartialMatches(false);
++                           }
++                        
++                    }
++                  
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++                
++                
++                  parent_attri = NULL;
++                  attrib_text = NULL;
++                  if(attribute_hash)
++                  {
++                       axutil_hash_index_t *hi;
++                       void *val;
++                       const void *key;
++
++                       for (hi = axutil_hash_first(attribute_hash, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                       {
++                           axutil_hash_this(hi, &key, NULL, &val);
++                           
++                           
++                               if(!strcmp((axis2_char_t*)key, "includeJobSummaries"))
++                             
++                               {
++                                   parent_attri = (axiom_attribute_t*)val;
++                                   break;
++                               }
++                       }
++                  }
++
++                  if(parent_attri)
++                  {
++                    attrib_text = axiom_attribute_get_value(parent_attri, Environment::getEnv());
++                  }
++                  else
++                  {
++                    /* this is hoping that attribute is stored in "includeJobSummaries", this happnes when name is in default namespace */
++                    attrib_text = axiom_element_get_attribute_value_by_name(parent_element, Environment::getEnv(), "includeJobSummaries");
++                  }
++
++                  if(attrib_text != NULL)
++                  {
++                      
++                      
++                           if (!axutil_strcmp(attrib_text, "TRUE") || !axutil_strcmp(attrib_text, "true"))
++                           {
++                               setIncludeJobSummaries(true);
++                           }
++                           else
++                           {
++                               setIncludeJobSummaries(false);
++                           }
++                        
++                    }
++                  
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryQuery::GetSubmissionSummary::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryQuery::GetSubmissionSummary::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryQuery::GetSubmissionSummary::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++               axiom_attribute_t *text_attri = NULL;
++             
++             axis2_char_t *string_to_stream;
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++                axiom_namespace_t *ns1 = NULL;
++
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                axis2_char_t *p_prefix = NULL;
++            
++               int i = 0;
++               int count = 0;
++               void *element = NULL;
++             
++                    axis2_char_t text_value_1[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++                    axis2_char_t text_value_2[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++                    axis2_char_t text_value_3[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++                axis2_char_t *text_value = NULL;
++             
++               axis2_char_t *start_input_str = NULL;
++               axis2_char_t *end_input_str = NULL;
++               unsigned int start_input_str_len = 0;
++               unsigned int end_input_str_len = 0;
++            
++            
++               axiom_data_source_t *data_source = NULL;
++               axutil_stream_t *stream = NULL;
++
++             
++                int next_ns_index_value = 0;
++             
++                    namespaces = axutil_hash_make(Environment::getEnv());
++                    next_ns_index = &next_ns_index_value;
++                     
++                           ns1 = axiom_namespace_create (Environment::getEnv(),
++                                             "http://query.aviary.grid.redhat.com",
++                                             "n"); 
++                           axutil_hash_set(namespaces, "http://query.aviary.grid.redhat.com", AXIS2_HASH_KEY_STRING, axutil_strdup(Environment::getEnv(), "n"));
++                       
++                     
++                    parent_element = axiom_element_create (Environment::getEnv(), NULL, "GetSubmissionSummary", ns1 , &parent);
++                    
++                    
++                    axiom_element_set_namespace(parent_element, Environment::getEnv(), ns1, parent);
++
++
++            
++                    data_source = axiom_data_source_create(Environment::getEnv(), parent, &current_node);
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv());
++                  
++            if(!parent_tag_closed)
++            {
++            
++                if(isValidPartialMatches)
++                {
++                
++                        p_prefix = NULL;
++                      
++                           
++                           text_value = (axis2_char_t*)((property_PartialMatches)?"true":"false");
++                           string_to_stream = (axis2_char_t*) AXIS2_MALLOC (Environment::getEnv()-> allocator, sizeof (axis2_char_t) *
++                                                            (5  + ADB_DEFAULT_NAMESPACE_PREFIX_LIMIT +
++                                                             axutil_strlen(text_value) + 
++                                                             axutil_strlen("partialMatches")));
++                           sprintf(string_to_stream, " %s%s%s=\"%s\"", p_prefix?p_prefix:"", (p_prefix && axutil_strcmp(p_prefix, ""))?":":"",
++                                                "partialMatches",  text_value);
++                           axutil_stream_write(stream, Environment::getEnv(), string_to_stream, axutil_strlen(string_to_stream));
++                           AXIS2_FREE(Environment::getEnv()-> allocator, string_to_stream);
++                        
++                   }
++                   
++                if(isValidIncludeJobSummaries)
++                {
++                
++                        p_prefix = NULL;
++                      
++                           
++                           text_value = (axis2_char_t*)((property_IncludeJobSummaries)?"true":"false");
++                           string_to_stream = (axis2_char_t*) AXIS2_MALLOC (Environment::getEnv()-> allocator, sizeof (axis2_char_t) *
++                                                            (5  + ADB_DEFAULT_NAMESPACE_PREFIX_LIMIT +
++                                                             axutil_strlen(text_value) + 
++                                                             axutil_strlen("includeJobSummaries")));
++                           sprintf(string_to_stream, " %s%s%s=\"%s\"", p_prefix?p_prefix:"", (p_prefix && axutil_strcmp(p_prefix, ""))?":":"",
++                                                "includeJobSummaries",  text_value);
++                           axutil_stream_write(stream, Environment::getEnv(), string_to_stream, axutil_strlen(string_to_stream));
++                           AXIS2_FREE(Environment::getEnv()-> allocator, string_to_stream);
++                        
++                   }
++                   
++            }
++            
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidIds)
++                   {
++                      
++                           /* no need to complain for minoccurs=0 element */
++                            
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("ids"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("ids")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     /*
++                      * Parsing Ids array
++                      */
++                     if (property_Ids != NULL)
++                     {
++                        
++
++                            sprintf(start_input_str, "<%s%sids",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                         start_input_str_len = axutil_strlen(start_input_str);
++
++                         sprintf(end_input_str, "</%s%sids>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                         end_input_str_len = axutil_strlen(end_input_str);
++
++                         count = property_Ids->size();
++                         for(i = 0; i < count; i++)
++                         {
++                            AviaryCommon::SubmissionID* element = (*property_Ids)[i];
++
++                            if(NULL == element) 
++                            {
++                                continue;
++                            }
++
++                    
++                     
++                     /*
++                      * parsing ids element
++                      */
++
++                    
++                     
++                            if(!element->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                            }
++                            element->serialize(current_node, parent_element,
++                                                                                 element->isParticle() || false, namespaces, next_ns_index);
++                            
++                            if(!element->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                            }
++                            
++                         }
++                     }
++                   
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                    
++                    if(parent_tag_closed)
++                    {
++                       if(isValidPartialMatches)
++                       {
++                       
++                           p_prefix = NULL;
++                           ns1 = NULL;
++                         
++                           
++                           text_value =  (axis2_char_t*)((property_PartialMatches)?axutil_strdup(Environment::getEnv(), "true"):axutil_strdup(Environment::getEnv(), "false"));
++                           text_attri = axiom_attribute_create (Environment::getEnv(), "partialMatches", text_value, ns1);
++                           axiom_element_add_attribute (parent_element, Environment::getEnv(), text_attri, parent);
++                           AXIS2_FREE(Environment::getEnv()->allocator, text_value);
++                        
++                      }
++                       
++                  }
++                
++                    
++                    if(parent_tag_closed)
++                    {
++                       if(isValidIncludeJobSummaries)
++                       {
++                       
++                           p_prefix = NULL;
++                           ns1 = NULL;
++                         
++                           
++                           text_value =  (axis2_char_t*)((property_IncludeJobSummaries)?axutil_strdup(Environment::getEnv(), "true"):axutil_strdup(Environment::getEnv(), "false"));
++                           text_attri = axiom_attribute_create (Environment::getEnv(), "includeJobSummaries", text_value, ns1);
++                           axiom_element_add_attribute (parent_element, Environment::getEnv(), text_attri, parent);
++                           AXIS2_FREE(Environment::getEnv()->allocator, text_value);
++                        
++                      }
++                       
++                  }
++                
++                   if(namespaces)
++                   {
++                       axutil_hash_index_t *hi;
++                       void *val;
++                       for (hi = axutil_hash_first(namespaces, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                       {
++                           axutil_hash_this(hi, NULL, NULL, &val);
++                           AXIS2_FREE(Environment::getEnv()->allocator, val);
++                       }
++                       axutil_hash_free(namespaces, Environment::getEnv());
++                   }
++                
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for ids by  Property Number 1
++             */
++            std::vector<AviaryCommon::SubmissionID*>* WSF_CALL
++            AviaryQuery::GetSubmissionSummary::getProperty1()
++            {
++                return getIds();
++            }
++
++            /**
++             * getter for ids.
++             */
++            std::vector<AviaryCommon::SubmissionID*>* WSF_CALL
++            AviaryQuery::GetSubmissionSummary::getIds()
++             {
++                return property_Ids;
++             }
++
++            /**
++             * setter for ids
++             */
++            bool WSF_CALL
++            AviaryQuery::GetSubmissionSummary::setIds(
++                    std::vector<AviaryCommon::SubmissionID*>*  arg_Ids)
++             {
++                
++                 int size = 0;
++                 int i = 0;
++                 bool non_nil_exists = false;
++                
++
++                if(isValidIds &&
++                        arg_Ids == property_Ids)
++                {
++                    
++                    return true;
++                }
++
++                
++                 size = arg_Ids->size();
++                 
++                 if (size < 0)
++                 {
++                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"ids has less than minOccurs(0)");
++                     return false;
++                 }
++                 for(i = 0; i < size; i ++ )
++                 {
++                     if(NULL != (*arg_Ids)[i])
++                     {
++                         non_nil_exists = true;
++                         break;
++                     }
++                 }
++
++                 
++
++                
++                resetIds();
++
++                
++                    if(NULL == arg_Ids)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_Ids = arg_Ids;
++                        if(non_nil_exists)
++                        {
++                            isValidIds = true;
++                        }
++                        
++                    
++                return true;
++             }
++
++            
++            /**
++             * Get ith element of ids.
++             */
++            AviaryCommon::SubmissionID* WSF_CALL
++            AviaryQuery::GetSubmissionSummary::getIdsAt(int i)
++            {
++                AviaryCommon::SubmissionID* ret_val;
++                if(property_Ids == NULL)
++                {
++                    return (AviaryCommon::SubmissionID*)0;
++                }
++                ret_val =   (*property_Ids)[i];
++                
++                    return ret_val;
++                  
++            }
++
++            /**
++             * Set the ith element of ids.
++             */
++           bool WSF_CALL
++            AviaryQuery::GetSubmissionSummary::setIdsAt(int i,
++                    AviaryCommon::SubmissionID* arg_Ids)
++            {
++                 AviaryCommon::SubmissionID* element;
++                int size = 0;
++
++                int non_nil_count;
++                bool non_nil_exists = false;
++
++                 
++
++                if( isValidIds &&
++                    property_Ids &&
++                  
++                    arg_Ids == (*property_Ids)[i])
++                  
++                 {
++                    
++                    return AXIS2_SUCCESS; 
++                }
++
++                   
++                     non_nil_exists = true;
++                  
++
++                if(property_Ids == NULL)
++                {
++                    property_Ids = new std::vector<AviaryCommon::SubmissionID*>();
++                }
++                else{
++                /* check whether there already exist an element */
++                element = (*property_Ids)[i];
++                }
++
++                
++                        if(NULL != element)
++                        {
++                          
++                          
++                          
++                                delete element;
++                             
++                        }
++                        
++                    
++                    if(!non_nil_exists)
++                    {
++                        
++                        isValidIds = true;
++                        (*property_Ids)[i]= NULL;
++                        
++                        return AXIS2_SUCCESS;
++                    }
++                
++                    (*property_Ids)[i] = arg_Ids;
++                  
++
++               isValidIds = true;
++                
++                return AXIS2_SUCCESS;
++            }
++
++            /**
++             * Add to ids.
++             */
++            bool WSF_CALL
++            AviaryQuery::GetSubmissionSummary::addIds(
++                    AviaryCommon::SubmissionID* arg_Ids)
++             {
++
++                
++                    if( NULL == arg_Ids
++                     )
++                    {
++                      
++                           return true; 
++                        
++                    }
++                  
++
++                if(property_Ids == NULL)
++                {
++                    property_Ids = new std::vector<AviaryCommon::SubmissionID*>();
++                }
++              
++               property_Ids->push_back(arg_Ids);
++              
++                isValidIds = true;
++                return true;
++             }
++
++            /**
++             * Get the size of the ids array.
++             */
++            int WSF_CALL
++            AviaryQuery::GetSubmissionSummary::sizeofIds()
++            {
++
++                if(property_Ids == NULL)
++                {
++                    return 0;
++                }
++                return property_Ids->size();
++            }
++
++            /**
++             * remove the ith element, same as set_nil_at.
++             */
++            bool WSF_CALL
++            AviaryQuery::GetSubmissionSummary::removeIdsAt(int i)
++            {
++                return setIdsNilAt(i);
++            }
++
++            
++
++           /**
++            * resetter for ids
++            */
++           bool WSF_CALL
++           AviaryQuery::GetSubmissionSummary::resetIds()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++                if (property_Ids != NULL)
++                {
++                  std::vector<AviaryCommon::SubmissionID*>::iterator it =  property_Ids->begin();
++                  for( ; it <  property_Ids->end() ; ++it)
++                  {
++                     AviaryCommon::SubmissionID* element = *it;
++                
++            
++                
++
++                if(element != NULL)
++                {
++                   
++                   
++                         delete  element;
++                     
++
++                   }
++
++                
++                
++                
++               }
++
++             }
++                
++                    if(NULL != property_Ids)
++                 delete property_Ids;
++                
++               isValidIds = false; 
++               return true;
++           }
++
++           /**
++            * Check whether ids is nill
++            */
++           bool WSF_CALL
++           AviaryQuery::GetSubmissionSummary::isIdsNil()
++           {
++               return !isValidIds;
++           }
++
++           /**
++            * Set ids to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryQuery::GetSubmissionSummary::setIdsNil()
++           {
++               return resetIds();
++           }
++
++           
++           /**
++            * Check whether ids is nill at i
++            */
++           bool WSF_CALL
++           AviaryQuery::GetSubmissionSummary::isIdsNilAt(int i)
++           {
++               return (isValidIds == false ||
++                       NULL == property_Ids ||
++                     NULL == (*property_Ids)[i]);
++            }
++
++           /**
++            * Set ids to nil at i
++            */
++           bool WSF_CALL
++           AviaryQuery::GetSubmissionSummary::setIdsNilAt(int i)
++           {
++                int size = 0;
++                int j;
++                bool non_nil_exists = false;
++
++                int k = 0;
++
++                if(property_Ids == NULL ||
++                            isValidIds == false)
++                {
++                    
++                    non_nil_exists = false;
++                }
++                else
++                {
++                    size = property_Ids->size();
++                    for(j = 0, k = 0; j < size; j ++ )
++                    {
++                        if(i == j) continue; 
++                        if(NULL != (*property_Ids)[i])
++                        {
++                            k++;
++                            non_nil_exists = true;
++                            if( k >= 0)
++                            {
++                                break;
++                            }
++                        }
++                    }
++                }
++                
++
++                if( k < 0)
++                {
++                       WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "Size of the array of ids is beinng set to be smaller than the specificed number of minOccurs(0)");
++                       return AXIS2_FAILURE;
++                }
++ 
++                if(property_Ids == NULL)
++                {
++                    isValidIds = false;
++                    
++                    return true;
++                }
++                 
++                 /* check whether there already exist an element */
++                 AviaryCommon::SubmissionID* element = (*property_Ids)[i];
++                if(NULL != element)
++                {
++                  
++                  
++                  
++                        delete element;
++                     
++                 }
++                 
++                    if(!non_nil_exists)
++                    {
++                        
++                        isValidIds = false;
++                        (*property_Ids)[i] = NULL;
++                        return AXIS2_SUCCESS;
++                    }
++                
++
++                
++                (*property_Ids)[i] = NULL;
++                
++                return AXIS2_SUCCESS;
++
++           }
++
++           
++
++            /**
++             * Getter for partialMatches by  Property Number 2
++             */
++            bool WSF_CALL
++            AviaryQuery::GetSubmissionSummary::getProperty2()
++            {
++                return getPartialMatches();
++            }
++
++            /**
++             * getter for partialMatches.
++             */
++            bool WSF_CALL
++            AviaryQuery::GetSubmissionSummary::getPartialMatches()
++             {
++                return property_PartialMatches;
++             }
++
++            /**
++             * setter for partialMatches
++             */
++            bool WSF_CALL
++            AviaryQuery::GetSubmissionSummary::setPartialMatches(
++                    bool  arg_PartialMatches)
++             {
++                
++
++                if(isValidPartialMatches &&
++                        arg_PartialMatches == property_PartialMatches)
++                {
++                    
++                    return true;
++                }
++
++                
++
++                
++                resetPartialMatches();
++
++                
++                        property_PartialMatches = arg_PartialMatches;
++                        isValidPartialMatches = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for partialMatches
++            */
++           bool WSF_CALL
++           AviaryQuery::GetSubmissionSummary::resetPartialMatches()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidPartialMatches = false; 
++               return true;
++           }
++
++           /**
++            * Check whether partialMatches is nill
++            */
++           bool WSF_CALL
++           AviaryQuery::GetSubmissionSummary::isPartialMatchesNil()
++           {
++               return !isValidPartialMatches;
++           }
++
++           /**
++            * Set partialMatches to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryQuery::GetSubmissionSummary::setPartialMatchesNil()
++           {
++               return resetPartialMatches();
++           }
++
++           
++
++            /**
++             * Getter for includeJobSummaries by  Property Number 3
++             */
++            bool WSF_CALL
++            AviaryQuery::GetSubmissionSummary::getProperty3()
++            {
++                return getIncludeJobSummaries();
++            }
++
++            /**
++             * getter for includeJobSummaries.
++             */
++            bool WSF_CALL
++            AviaryQuery::GetSubmissionSummary::getIncludeJobSummaries()
++             {
++                return property_IncludeJobSummaries;
++             }
++
++            /**
++             * setter for includeJobSummaries
++             */
++            bool WSF_CALL
++            AviaryQuery::GetSubmissionSummary::setIncludeJobSummaries(
++                    bool  arg_IncludeJobSummaries)
++             {
++                
++
++                if(isValidIncludeJobSummaries &&
++                        arg_IncludeJobSummaries == property_IncludeJobSummaries)
++                {
++                    
++                    return true;
++                }
++
++                
++
++                
++                resetIncludeJobSummaries();
++
++                
++                        property_IncludeJobSummaries = arg_IncludeJobSummaries;
++                        isValidIncludeJobSummaries = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for includeJobSummaries
++            */
++           bool WSF_CALL
++           AviaryQuery::GetSubmissionSummary::resetIncludeJobSummaries()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidIncludeJobSummaries = false; 
++               return true;
++           }
++
++           /**
++            * Check whether includeJobSummaries is nill
++            */
++           bool WSF_CALL
++           AviaryQuery::GetSubmissionSummary::isIncludeJobSummariesNil()
++           {
++               return !isValidIncludeJobSummaries;
++           }
++
++           /**
++            * Set includeJobSummaries to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryQuery::GetSubmissionSummary::setIncludeJobSummariesNil()
++           {
++               return resetIncludeJobSummaries();
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/codegen/query/src/AviaryQuery_GetSubmissionSummaryResponse.cpp b/src/condor_contrib/aviary/codegen/query/src/AviaryQuery_GetSubmissionSummaryResponse.cpp
+new file mode 100644
+index 0000000..b780821
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/query/src/AviaryQuery_GetSubmissionSummaryResponse.cpp
+@@ -0,0 +1,776 @@
++
++
++        /**
++         * GetSubmissionSummaryResponse.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryQuery_GetSubmissionSummaryResponse.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryQuery;
++        
++               /*
++                * Implementation of the GetSubmissionSummaryResponse|http://query.aviary.grid.redhat.com Element
++                */
++           AviaryQuery::GetSubmissionSummaryResponse::GetSubmissionSummaryResponse()
++        {
++
++        
++            qname = NULL;
++        
++                property_Submissions  = NULL;
++              
++            isValidSubmissions  = false;
++        
++                  qname =  axutil_qname_create (Environment::getEnv(),
++                        "GetSubmissionSummaryResponse",
++                        "http://query.aviary.grid.redhat.com",
++                        NULL);
++                
++        }
++
++       AviaryQuery::GetSubmissionSummaryResponse::GetSubmissionSummaryResponse(std::vector<AviaryCommon::SubmissionSummary*>* arg_Submissions)
++        {
++             
++                   qname = NULL;
++             
++               property_Submissions  = NULL;
++             
++            isValidSubmissions  = true;
++            
++                 qname =  axutil_qname_create (Environment::getEnv(),
++                       "GetSubmissionSummaryResponse",
++                       "http://query.aviary.grid.redhat.com",
++                       NULL);
++               
++                    property_Submissions = arg_Submissions;
++            
++        }
++        AviaryQuery::GetSubmissionSummaryResponse::~GetSubmissionSummaryResponse()
++        {
++
++        }
++
++        
++
++        bool WSF_CALL
++        AviaryQuery::GetSubmissionSummaryResponse::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++               int i = 0;
++            
++               int sequence_broken = 0;
++               axiom_node_t *tmp_node = NULL;
++            
++            axutil_qname_t *element_qname = NULL; 
++            
++               axiom_node_t *first_node = NULL;
++               bool is_early_node_valid = true;
++               axiom_node_t *current_node = NULL;
++               axiom_element_t *current_element = NULL;
++            
++              
++              while(parent && axiom_node_get_node_type(parent, Environment::getEnv()) != AXIOM_ELEMENT)
++              {
++                  parent = axiom_node_get_next_sibling(parent, Environment::getEnv());
++              }
++              if (NULL == parent)
++              {   
++                return AXIS2_FAILURE;
++              }
++              
++
++                    current_element = (axiom_element_t *)axiom_node_get_data_element(parent, Environment::getEnv());
++                    mqname = axiom_element_get_qname(current_element, Environment::getEnv(), parent);
++                    if (axutil_qname_equals(mqname, Environment::getEnv(), this->qname))
++                    {
++                        
++                          first_node = axiom_node_get_first_child(parent, Environment::getEnv());
++                          
++                    }
++                    else
++                    {
++                        WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI,
++                              "Failed in building adb object for GetSubmissionSummaryResponse : "
++                              "Expected %s but returned %s",
++                              axutil_qname_to_string(qname, Environment::getEnv()),
++                              axutil_qname_to_string(mqname, Environment::getEnv()));
++                        
++                        return AXIS2_FAILURE;
++                    }
++                    
++                       { 
++                    /*
++                     * building Submissions array
++                     */
++                       std::vector<AviaryCommon::SubmissionSummary*>* arr_list =new std::vector<AviaryCommon::SubmissionSummary*>();
++                   
++
++                     
++                     /*
++                      * building submissions element
++                      */
++                     
++                     
++                     
++                                    element_qname = axutil_qname_create(Environment::getEnv(), "submissions", NULL, NULL);
++                                  
++                               
++                               for (i = 0, sequence_broken = 0, current_node = first_node; !sequence_broken && current_node != NULL;)
++                                             
++                               {
++                                  if(axiom_node_get_node_type(current_node, Environment::getEnv()) != AXIOM_ELEMENT)
++                                  {
++                                     current_node =axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                     is_early_node_valid = false;
++                                     continue;
++                                  }
++                                  
++                                  current_element = (axiom_element_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                                  mqname = axiom_element_get_qname(current_element, Environment::getEnv(), current_node);
++
++                                  if (axutil_qname_equals(element_qname, Environment::getEnv(), mqname) || !axutil_strcmp("submissions", axiom_element_get_localname(current_element, Environment::getEnv())))
++                                  {
++                                  
++                                      is_early_node_valid = true;
++                                      
++                                     AviaryCommon::SubmissionSummary* element = new AviaryCommon::SubmissionSummary();
++                                          
++                                          status =  element->deserialize(&current_node, &is_early_node_valid, false);
++                                          
++                                          if(AXIS2_FAILURE ==  status)
++                                          {
++					  WSF_LOG_ERROR_MSG(Environment::getEnv()->log,WSF_LOG_SI, "failed in building element submissions ");
++                                          }
++                                          else
++                                          {
++                                            arr_list->push_back(element);
++                                            
++                                          }
++                                        
++                                     if(AXIS2_FAILURE ==  status)
++                                     {
++                                         WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "failed in setting the value for submissions ");
++                                         if(element_qname)
++                                         {
++                                            axutil_qname_free(element_qname, Environment::getEnv());
++                                         }
++                                         if(arr_list)
++                                         {
++                                            delete arr_list;
++                                         }
++                                         return false;
++                                     }
++
++                                     i++;
++                                    current_node = axiom_node_get_next_sibling(current_node, Environment::getEnv());
++                                  }
++                                  else
++                                  {
++                                      is_early_node_valid = false;
++                                      sequence_broken = 1;
++                                  }
++                                  
++                               }
++
++                               
++                                   if (i < 0)
++                                   {
++                                     /* found element out of order */
++                                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"submissions (@minOccurs = '0') only have %d elements", i);
++                                     if(element_qname)
++                                     {
++                                        axutil_qname_free(element_qname, Environment::getEnv());
++                                     }
++                                     if(arr_list)
++                                     {
++                                        delete arr_list;
++                                     }
++                                     return false;
++                                   }
++                               
++
++                               if(0 == arr_list->size())
++                               {
++                                    delete arr_list;
++                               }
++                               else
++                               {
++                                    status = setSubmissions(arr_list);
++                               }
++
++                              
++                            } 
++                        
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryQuery::GetSubmissionSummaryResponse::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryQuery::GetSubmissionSummaryResponse::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryQuery::GetSubmissionSummaryResponse::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++                axiom_namespace_t *ns1 = NULL;
++
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                axis2_char_t *p_prefix = NULL;
++            
++               int i = 0;
++               int count = 0;
++               void *element = NULL;
++             
++                    axis2_char_t text_value_1[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++               axis2_char_t *start_input_str = NULL;
++               axis2_char_t *end_input_str = NULL;
++               unsigned int start_input_str_len = 0;
++               unsigned int end_input_str_len = 0;
++            
++            
++               axiom_data_source_t *data_source = NULL;
++               axutil_stream_t *stream = NULL;
++
++             
++                int next_ns_index_value = 0;
++             
++                    namespaces = axutil_hash_make(Environment::getEnv());
++                    next_ns_index = &next_ns_index_value;
++                     
++                           ns1 = axiom_namespace_create (Environment::getEnv(),
++                                             "http://query.aviary.grid.redhat.com",
++                                             "n"); 
++                           axutil_hash_set(namespaces, "http://query.aviary.grid.redhat.com", AXIS2_HASH_KEY_STRING, axutil_strdup(Environment::getEnv(), "n"));
++                       
++                     
++                    parent_element = axiom_element_create (Environment::getEnv(), NULL, "GetSubmissionSummaryResponse", ns1 , &parent);
++                    
++                    
++                    axiom_element_set_namespace(parent_element, Environment::getEnv(), ns1, parent);
++
++
++            
++                    data_source = axiom_data_source_create(Environment::getEnv(), parent, &current_node);
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv());
++                  
++                       p_prefix = NULL;
++                      
++
++                   if (!isValidSubmissions)
++                   {
++                      
++                           /* no need to complain for minoccurs=0 element */
++                            
++                          
++                   }
++                   else
++                   {
++                     start_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (4 + axutil_strlen(p_prefix) + 
++                                  axutil_strlen("submissions"))); 
++                                 
++                                 /* axutil_strlen("<:>") + 1 = 4 */
++                     end_input_str = (axis2_char_t*)AXIS2_MALLOC(Environment::getEnv()->allocator, sizeof(axis2_char_t) *
++                                 (5 + axutil_strlen(p_prefix) + axutil_strlen("submissions")));
++                                  /* axutil_strlen("</:>") + 1 = 5 */
++                                  
++                     
++
++                   
++                   
++                     /*
++                      * Parsing Submissions array
++                      */
++                     if (property_Submissions != NULL)
++                     {
++                        
++
++                            sprintf(start_input_str, "<%s%ssubmissions",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                            
++                         start_input_str_len = axutil_strlen(start_input_str);
++
++                         sprintf(end_input_str, "</%s%ssubmissions>",
++                                 p_prefix?p_prefix:"",
++                                 (p_prefix && axutil_strcmp(p_prefix, ""))?":":"");
++                         end_input_str_len = axutil_strlen(end_input_str);
++
++                         count = property_Submissions->size();
++                         for(i = 0; i < count; i++)
++                         {
++                            AviaryCommon::SubmissionSummary* element = (*property_Submissions)[i];
++
++                            if(NULL == element) 
++                            {
++                                continue;
++                            }
++
++                    
++                     
++                     /*
++                      * parsing submissions element
++                      */
++
++                    
++                     
++                            if(!element->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), start_input_str, start_input_str_len);
++                            }
++                            element->serialize(current_node, parent_element,
++                                                                                 element->isParticle() || false, namespaces, next_ns_index);
++                            
++                            if(!element->isParticle())
++                            {
++                                axutil_stream_write(stream, Environment::getEnv(), end_input_str, end_input_str_len);
++                            }
++                            
++                         }
++                     }
++                   
++                     
++                     AXIS2_FREE(Environment::getEnv()->allocator,start_input_str);
++                     AXIS2_FREE(Environment::getEnv()->allocator,end_input_str);
++                 } 
++
++                 
++                   if(namespaces)
++                   {
++                       axutil_hash_index_t *hi;
++                       void *val;
++                       for (hi = axutil_hash_first(namespaces, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                       {
++                           axutil_hash_this(hi, NULL, NULL, &val);
++                           AXIS2_FREE(Environment::getEnv()->allocator, val);
++                       }
++                       axutil_hash_free(namespaces, Environment::getEnv());
++                   }
++                
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for submissions by  Property Number 1
++             */
++            std::vector<AviaryCommon::SubmissionSummary*>* WSF_CALL
++            AviaryQuery::GetSubmissionSummaryResponse::getProperty1()
++            {
++                return getSubmissions();
++            }
++
++            /**
++             * getter for submissions.
++             */
++            std::vector<AviaryCommon::SubmissionSummary*>* WSF_CALL
++            AviaryQuery::GetSubmissionSummaryResponse::getSubmissions()
++             {
++                return property_Submissions;
++             }
++
++            /**
++             * setter for submissions
++             */
++            bool WSF_CALL
++            AviaryQuery::GetSubmissionSummaryResponse::setSubmissions(
++                    std::vector<AviaryCommon::SubmissionSummary*>*  arg_Submissions)
++             {
++                
++                 int size = 0;
++                 int i = 0;
++                 bool non_nil_exists = false;
++                
++
++                if(isValidSubmissions &&
++                        arg_Submissions == property_Submissions)
++                {
++                    
++                    return true;
++                }
++
++                
++                 size = arg_Submissions->size();
++                 
++                 if (size < 0)
++                 {
++                     WSF_LOG_ERROR_MSG( Environment::getEnv()->log,WSF_LOG_SI,"submissions has less than minOccurs(0)");
++                     return false;
++                 }
++                 for(i = 0; i < size; i ++ )
++                 {
++                     if(NULL != (*arg_Submissions)[i])
++                     {
++                         non_nil_exists = true;
++                         break;
++                     }
++                 }
++
++                 
++
++                
++                resetSubmissions();
++
++                
++                    if(NULL == arg_Submissions)
++                         
++                {
++                    /* We are already done */
++                    return true;
++                }
++                
++                        property_Submissions = arg_Submissions;
++                        if(non_nil_exists)
++                        {
++                            isValidSubmissions = true;
++                        }
++                        
++                    
++                return true;
++             }
++
++            
++            /**
++             * Get ith element of submissions.
++             */
++            AviaryCommon::SubmissionSummary* WSF_CALL
++            AviaryQuery::GetSubmissionSummaryResponse::getSubmissionsAt(int i)
++            {
++                AviaryCommon::SubmissionSummary* ret_val;
++                if(property_Submissions == NULL)
++                {
++                    return (AviaryCommon::SubmissionSummary*)0;
++                }
++                ret_val =   (*property_Submissions)[i];
++                
++                    return ret_val;
++                  
++            }
++
++            /**
++             * Set the ith element of submissions.
++             */
++           bool WSF_CALL
++            AviaryQuery::GetSubmissionSummaryResponse::setSubmissionsAt(int i,
++                    AviaryCommon::SubmissionSummary* arg_Submissions)
++            {
++                 AviaryCommon::SubmissionSummary* element;
++                int size = 0;
++
++                int non_nil_count;
++                bool non_nil_exists = false;
++
++                 
++
++                if( isValidSubmissions &&
++                    property_Submissions &&
++                  
++                    arg_Submissions == (*property_Submissions)[i])
++                  
++                 {
++                    
++                    return AXIS2_SUCCESS; 
++                }
++
++                   
++                     non_nil_exists = true;
++                  
++
++                if(property_Submissions == NULL)
++                {
++                    property_Submissions = new std::vector<AviaryCommon::SubmissionSummary*>();
++                }
++                else{
++                /* check whether there already exist an element */
++                element = (*property_Submissions)[i];
++                }
++
++                
++                        if(NULL != element)
++                        {
++                          
++                          
++                          
++                                delete element;
++                             
++                        }
++                        
++                    
++                    if(!non_nil_exists)
++                    {
++                        
++                        isValidSubmissions = true;
++                        (*property_Submissions)[i]= NULL;
++                        
++                        return AXIS2_SUCCESS;
++                    }
++                
++                    (*property_Submissions)[i] = arg_Submissions;
++                  
++
++               isValidSubmissions = true;
++                
++                return AXIS2_SUCCESS;
++            }
++
++            /**
++             * Add to submissions.
++             */
++            bool WSF_CALL
++            AviaryQuery::GetSubmissionSummaryResponse::addSubmissions(
++                    AviaryCommon::SubmissionSummary* arg_Submissions)
++             {
++
++                
++                    if( NULL == arg_Submissions
++                     )
++                    {
++                      
++                           return true; 
++                        
++                    }
++                  
++
++                if(property_Submissions == NULL)
++                {
++                    property_Submissions = new std::vector<AviaryCommon::SubmissionSummary*>();
++                }
++              
++               property_Submissions->push_back(arg_Submissions);
++              
++                isValidSubmissions = true;
++                return true;
++             }
++
++            /**
++             * Get the size of the submissions array.
++             */
++            int WSF_CALL
++            AviaryQuery::GetSubmissionSummaryResponse::sizeofSubmissions()
++            {
++
++                if(property_Submissions == NULL)
++                {
++                    return 0;
++                }
++                return property_Submissions->size();
++            }
++
++            /**
++             * remove the ith element, same as set_nil_at.
++             */
++            bool WSF_CALL
++            AviaryQuery::GetSubmissionSummaryResponse::removeSubmissionsAt(int i)
++            {
++                return setSubmissionsNilAt(i);
++            }
++
++            
++
++           /**
++            * resetter for submissions
++            */
++           bool WSF_CALL
++           AviaryQuery::GetSubmissionSummaryResponse::resetSubmissions()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++                if (property_Submissions != NULL)
++                {
++                  std::vector<AviaryCommon::SubmissionSummary*>::iterator it =  property_Submissions->begin();
++                  for( ; it <  property_Submissions->end() ; ++it)
++                  {
++                     AviaryCommon::SubmissionSummary* element = *it;
++                
++            
++                
++
++                if(element != NULL)
++                {
++                   
++                   
++                         delete  element;
++                     
++
++                   }
++
++                
++                
++                
++               }
++
++             }
++                
++                    if(NULL != property_Submissions)
++                 delete property_Submissions;
++                
++               isValidSubmissions = false; 
++               return true;
++           }
++
++           /**
++            * Check whether submissions is nill
++            */
++           bool WSF_CALL
++           AviaryQuery::GetSubmissionSummaryResponse::isSubmissionsNil()
++           {
++               return !isValidSubmissions;
++           }
++
++           /**
++            * Set submissions to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryQuery::GetSubmissionSummaryResponse::setSubmissionsNil()
++           {
++               return resetSubmissions();
++           }
++
++           
++           /**
++            * Check whether submissions is nill at i
++            */
++           bool WSF_CALL
++           AviaryQuery::GetSubmissionSummaryResponse::isSubmissionsNilAt(int i)
++           {
++               return (isValidSubmissions == false ||
++                       NULL == property_Submissions ||
++                     NULL == (*property_Submissions)[i]);
++            }
++
++           /**
++            * Set submissions to nil at i
++            */
++           bool WSF_CALL
++           AviaryQuery::GetSubmissionSummaryResponse::setSubmissionsNilAt(int i)
++           {
++                int size = 0;
++                int j;
++                bool non_nil_exists = false;
++
++                int k = 0;
++
++                if(property_Submissions == NULL ||
++                            isValidSubmissions == false)
++                {
++                    
++                    non_nil_exists = false;
++                }
++                else
++                {
++                    size = property_Submissions->size();
++                    for(j = 0, k = 0; j < size; j ++ )
++                    {
++                        if(i == j) continue; 
++                        if(NULL != (*property_Submissions)[i])
++                        {
++                            k++;
++                            non_nil_exists = true;
++                            if( k >= 0)
++                            {
++                                break;
++                            }
++                        }
++                    }
++                }
++                
++
++                if( k < 0)
++                {
++                       WSF_LOG_ERROR_MSG(Environment::getEnv()->log, WSF_LOG_SI, "Size of the array of submissions is beinng set to be smaller than the specificed number of minOccurs(0)");
++                       return AXIS2_FAILURE;
++                }
++ 
++                if(property_Submissions == NULL)
++                {
++                    isValidSubmissions = false;
++                    
++                    return true;
++                }
++                 
++                 /* check whether there already exist an element */
++                 AviaryCommon::SubmissionSummary* element = (*property_Submissions)[i];
++                if(NULL != element)
++                {
++                  
++                  
++                  
++                        delete element;
++                     
++                 }
++                 
++                    if(!non_nil_exists)
++                    {
++                        
++                        isValidSubmissions = false;
++                        (*property_Submissions)[i] = NULL;
++                        return AXIS2_SUCCESS;
++                    }
++                
++
++                
++                (*property_Submissions)[i] = NULL;
++                
++                return AXIS2_SUCCESS;
++
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/codegen/query/src/AviaryQuery_QueryRequestType.cpp b/src/condor_contrib/aviary/codegen/query/src/AviaryQuery_QueryRequestType.cpp
+new file mode 100644
+index 0000000..f59b227
+--- /dev/null
++++ b/src/condor_contrib/aviary/codegen/query/src/AviaryQuery_QueryRequestType.cpp
+@@ -0,0 +1,346 @@
++
++
++        /**
++         * QueryRequestType.cpp
++         *
++         * This file was auto-generated from WSDL
++         * by the Apache Axis2/C version: SNAPSHOT  Built on : Mar 10, 2008 (08:35:52 GMT+00:00)
++         */
++
++        #include "AviaryQuery_QueryRequestType.h"
++        #include <Environment.h>
++        #include <WSFError.h>
++
++
++        using namespace wso2wsf;
++        using namespace std;
++        
++        using namespace AviaryQuery;
++        
++                /*
++                 * This type was generated from the piece of schema that had
++                 * name = QueryRequestType
++                 * Namespace URI = http://query.aviary.grid.redhat.com
++                 * Namespace Prefix = ns2
++                 */
++           AviaryQuery::QueryRequestType::QueryRequestType()
++        {
++
++        
++            isValidAllowPartialMatching  = false;
++        
++        }
++
++       AviaryQuery::QueryRequestType::QueryRequestType(bool arg_AllowPartialMatching)
++        {
++             
++            isValidAllowPartialMatching  = true;
++            
++                    property_AllowPartialMatching = arg_AllowPartialMatching;
++            
++        }
++        AviaryQuery::QueryRequestType::~QueryRequestType()
++        {
++
++        }
++
++        
++
++        bool WSF_CALL
++        AviaryQuery::QueryRequestType::deserialize(axiom_node_t** dp_parent,bool *dp_is_early_node_valid, bool dont_care_minoccurs)
++        {
++          axiom_node_t *parent = *dp_parent;
++          
++          bool status = AXIS2_SUCCESS;
++          
++          axiom_attribute_t *parent_attri = NULL;
++          axiom_element_t *parent_element = NULL;
++          axis2_char_t *attrib_text = NULL;
++
++          axutil_hash_t *attribute_hash = NULL;
++
++           
++         const axis2_char_t* text_value = NULL;
++         axutil_qname_t *mqname = NULL;
++          
++            axutil_qname_t *element_qname = NULL; 
++            
++               axiom_node_t *first_node = NULL;
++               bool is_early_node_valid = true;
++               axiom_node_t *current_node = NULL;
++               axiom_element_t *current_element = NULL;
++            
++              
++              while(parent && axiom_node_get_node_type(parent, Environment::getEnv()) != AXIOM_ELEMENT)
++              {
++                  parent = axiom_node_get_next_sibling(parent, Environment::getEnv());
++              }
++              if (NULL == parent)
++              {   
++                return AXIS2_FAILURE;
++              }
++              
++                      
++                      first_node = axiom_node_get_first_child(parent, Environment::getEnv());
++                      
++                    
++                 parent_element = (axiom_element_t *)axiom_node_get_data_element(parent, Environment::getEnv());
++                 attribute_hash = axiom_element_get_all_attributes(parent_element, Environment::getEnv());
++              
++                
++                
++                  parent_attri = NULL;
++                  attrib_text = NULL;
++                  if(attribute_hash)
++                  {
++                       axutil_hash_index_t *hi;
++                       void *val;
++                       const void *key;
++
++                       for (hi = axutil_hash_first(attribute_hash, Environment::getEnv()); hi; hi = axutil_hash_next(Environment::getEnv(), hi))
++                       {
++                           axutil_hash_this(hi, &key, NULL, &val);
++                           
++                           
++                               if(!strcmp((axis2_char_t*)key, "allowPartialMatching"))
++                             
++                               {
++                                   parent_attri = (axiom_attribute_t*)val;
++                                   break;
++                               }
++                       }
++                  }
++
++                  if(parent_attri)
++                  {
++                    attrib_text = axiom_attribute_get_value(parent_attri, Environment::getEnv());
++                  }
++                  else
++                  {
++                    /* this is hoping that attribute is stored in "allowPartialMatching", this happnes when name is in default namespace */
++                    attrib_text = axiom_element_get_attribute_value_by_name(parent_element, Environment::getEnv(), "allowPartialMatching");
++                  }
++
++                  if(attrib_text != NULL)
++                  {
++                      
++                      
++                           if (!axutil_strcmp(attrib_text, "TRUE") || !axutil_strcmp(attrib_text, "true"))
++                           {
++                               setAllowPartialMatching(true);
++                           }
++                           else
++                           {
++                               setAllowPartialMatching(false);
++                           }
++                        
++                    }
++                  
++                  if(element_qname)
++                  {
++                     axutil_qname_free(element_qname, Environment::getEnv());
++                     element_qname = NULL;
++                  }
++                 
++          return status;
++       }
++
++          bool WSF_CALL
++          AviaryQuery::QueryRequestType::isParticle()
++          {
++            
++                 return false;
++              
++          }
++
++
++          void WSF_CALL
++          AviaryQuery::QueryRequestType::declareParentNamespaces(
++                    axiom_element_t *parent_element,
++                    axutil_hash_t *namespaces, int *next_ns_index)
++          {
++            
++                  /* Here this is an empty function, Nothing to declare */
++                 
++          }
++
++        
++        
++        axiom_node_t* WSF_CALL
++	AviaryQuery::QueryRequestType::serialize(axiom_node_t *parent, 
++			axiom_element_t *parent_element, 
++			int parent_tag_closed, 
++			axutil_hash_t *namespaces, 
++			int *next_ns_index)
++        {
++            
++            
++               axiom_attribute_t *text_attri = NULL;
++             
++             axis2_char_t *string_to_stream;
++            
++         
++         axiom_node_t *current_node = NULL;
++         int tag_closed = 0;
++
++         
++         
++                axiom_namespace_t *ns1 = NULL;
++
++                axis2_char_t *qname_uri = NULL;
++                axis2_char_t *qname_prefix = NULL;
++                axis2_char_t *p_prefix = NULL;
++            
++                    axis2_char_t text_value_1[ADB_DEFAULT_DIGIT_LIMIT];
++                    
++                axis2_char_t *text_value = NULL;
++             
++            
++               axiom_data_source_t *data_source = NULL;
++               axutil_stream_t *stream = NULL;
++
++            
++                    current_node = parent;
++                    data_source = (axiom_data_source_t *)axiom_node_get_data_element(current_node, Environment::getEnv());
++                    if (!data_source)
++                        return NULL;
++                    stream = axiom_data_source_get_stream(data_source, Environment::getEnv()); /* assume parent is of type data source */
++                    if (!stream)
++                        return NULL;
++                  
++            if(!parent_tag_closed)
++            {
++            
++                if(isValidAllowPartialMatching)
++                {
++                
++                        p_prefix = NULL;
++                      
++                           
++                           text_value = (axis2_char_t*)((property_AllowPartialMatching)?"true":"false");
++                           string_to_stream = (axis2_char_t*) AXIS2_MALLOC (Environment::getEnv()-> allocator, sizeof (axis2_char_t) *
++                                                            (5  + ADB_DEFAULT_NAMESPACE_PREFIX_LIMIT +
++                                                             axutil_strlen(text_value) + 
++                                                             axutil_strlen("allowPartialMatching")));
++                           sprintf(string_to_stream, " %s%s%s=\"%s\"", p_prefix?p_prefix:"", (p_prefix && axutil_strcmp(p_prefix, ""))?":":"",
++                                                "allowPartialMatching",  text_value);
++                           axutil_stream_write(stream, Environment::getEnv(), string_to_stream, axutil_strlen(string_to_stream));
++                           AXIS2_FREE(Environment::getEnv()-> allocator, string_to_stream);
++                        
++                   }
++                   
++              string_to_stream = ">"; 
++              axutil_stream_write(stream, Environment::getEnv(), string_to_stream, axutil_strlen(string_to_stream));
++              tag_closed = 1;
++            
++            }
++            
++                    
++                    if(parent_tag_closed)
++                    {
++                       if(isValidAllowPartialMatching)
++                       {
++                       
++                           p_prefix = NULL;
++                           ns1 = NULL;
++                         
++                           
++                           text_value =  (axis2_char_t*)((property_AllowPartialMatching)?axutil_strdup(Environment::getEnv(), "true"):axutil_strdup(Environment::getEnv(), "false"));
++                           text_attri = axiom_attribute_create (Environment::getEnv(), "allowPartialMatching", text_value, ns1);
++                           axiom_element_add_attribute (parent_element, Environment::getEnv(), text_attri, parent);
++                           AXIS2_FREE(Environment::getEnv()->allocator, text_value);
++                        
++                      }
++                       
++                  }
++                
++
++            return parent;
++        }
++
++
++        
++
++            /**
++             * Getter for allowPartialMatching by  Property Number 1
++             */
++            bool WSF_CALL
++            AviaryQuery::QueryRequestType::getProperty1()
++            {
++                return getAllowPartialMatching();
++            }
++
++            /**
++             * getter for allowPartialMatching.
++             */
++            bool WSF_CALL
++            AviaryQuery::QueryRequestType::getAllowPartialMatching()
++             {
++                return property_AllowPartialMatching;
++             }
++
++            /**
++             * setter for allowPartialMatching
++             */
++            bool WSF_CALL
++            AviaryQuery::QueryRequestType::setAllowPartialMatching(
++                    bool  arg_AllowPartialMatching)
++             {
++                
++
++                if(isValidAllowPartialMatching &&
++                        arg_AllowPartialMatching == property_AllowPartialMatching)
++                {
++                    
++                    return true;
++                }
++
++                
++
++                
++                resetAllowPartialMatching();
++
++                
++                        property_AllowPartialMatching = arg_AllowPartialMatching;
++                        isValidAllowPartialMatching = true;
++                    
++                return true;
++             }
++
++             
++
++           /**
++            * resetter for allowPartialMatching
++            */
++           bool WSF_CALL
++           AviaryQuery::QueryRequestType::resetAllowPartialMatching()
++           {
++               int i = 0;
++               int count = 0;
++
++
++               
++               isValidAllowPartialMatching = false; 
++               return true;
++           }
++
++           /**
++            * Check whether allowPartialMatching is nill
++            */
++           bool WSF_CALL
++           AviaryQuery::QueryRequestType::isAllowPartialMatchingNil()
++           {
++               return !isValidAllowPartialMatching;
++           }
++
++           /**
++            * Set allowPartialMatching to nill (currently the same as reset)
++            */
++           bool WSF_CALL
++           AviaryQuery::QueryRequestType::setAllowPartialMatchingNil()
++           {
++               return resetAllowPartialMatching();
++           }
++
++           
++
+diff --git a/src/condor_contrib/aviary/etc/61aviary.config b/src/condor_contrib/aviary/etc/61aviary.config
+new file mode 100644
+index 0000000..5fdc884
+--- /dev/null
++++ b/src/condor_contrib/aviary/etc/61aviary.config
+@@ -0,0 +1,34 @@
++# Base configuration for Aviary
++#
++# Included is the Schedd plugin, AviaryScheddPlugin-plugin.so, and the aviary_query_server
++
++# The general Aviary config file for Axis2
++# axis2.xml has parameters that point to lib and services dir
++WSFCPP_HOME=/var/lib/condor/aviary/axis2.xml
++
++# Aviary Schedd plugin, provides submission and job control endpoint
++SCHEDD.PLUGINS = $(SCHEDD.PLUGINS) $(LIB)/plugins/AviaryScheddPlugin-plugin.so
++
++# Port the Aviary Schedd plugin listens on, default 9090
++#SCHEDD.HTTP_PORT = 9090
++
++# Aviary query server, provides endpoint for job and submission queries
++QUERY_SERVER = $(SBIN)/aviary_query_server
++QUERY_SERVER_ARGS = -f
++QUERY_SERVER.QUERY_SERVER_LOG = $(LOG)/QueryServerLog
++QUERY_SERVER.QUERY_SERVER_DEBUG = D_ALWAYS
++DAEMON_LIST = $(DAEMON_LIST), QUERY_SERVER
++
++# Port the QueryServer listens on, default 9091
++#QUERY_SERVER.HTTP_PORT = 9091
++
++# HISTORY_INTERVAL specifies the number of seconds between polls of the HISTORY file, default 120
++#QUERY_SERVER.HISTORY_INTERVAL = 120
++
++# If there is more than one Schedd on the system or if the Schedd and
++# QueryServer reside on different systems, it is necessary to tell the
++# QueryServer the name of the Schedd it is working with via
++# QUERY_SERVER.SCHEDD_NAME. This allows the QueryServer to provide
++# fully-qualified job ids, i.e. cluster.proc:pool:scheduler. Default
++# is constructed in the same way the Schedd constructs its name.
++#QUERY_SERVER.SCHEDD_NAME =
+diff --git a/src/condor_contrib/aviary/etc/aviary-common.xsd b/src/condor_contrib/aviary/etc/aviary-common.xsd
+new file mode 100644
+index 0000000..30f20be
+--- /dev/null
++++ b/src/condor_contrib/aviary/etc/aviary-common.xsd
+@@ -0,0 +1,203 @@
++<?xml version="1.0" encoding="utf-8"?>
++<!--
++/*
++ * Copyright 2000-2011 Red Hat, Inc.
++ *
++ * 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.
++ */
++-->
++<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://common.aviary.grid.redhat.com" targetNamespace="http://common.aviary.grid.redhat.com">
++	<!-- common types should make use of simple and complex types for reuse -->
++	<xs:simpleType name="StatusCodeType">
++		<xs:restriction base="xs:string">
++			<xs:enumeration value="OK"/>
++			<xs:enumeration value="FAIL"/>
++			<xs:enumeration value="NO_MATCH"/>
++			<xs:enumeration value="INVALID_OFFSET"/>
++			<xs:enumeration value="UNIMPLEMENTED"/>
++			<xs:enumeration value="UNAVAILABLE"/>
++		</xs:restriction>
++	</xs:simpleType>
++	<xs:complexType name="Status">
++		<xs:sequence>
++			<xs:element name="code" type="tns:StatusCodeType"/>
++			<xs:element name="text" type="xs:string" minOccurs="0"/>
++		</xs:sequence>
++	</xs:complexType>
++	<xs:simpleType name="AttributeType">
++		<xs:restriction base="xs:string">
++			<xs:enumeration value="INTEGER"/>
++			<xs:enumeration value="FLOAT"/>
++			<xs:enumeration value="STRING"/>
++			<xs:enumeration value="EXPRESSION"/>
++			<xs:enumeration value="BOOLEAN"/>
++			<xs:enumeration value="UNDEFINED"/>
++			<xs:enumeration value="ERROR"/>
++		</xs:restriction>
++	</xs:simpleType>
++	<xs:complexType name="Attribute">
++		<xs:sequence>
++			<xs:element name="name" type="xs:string"/>
++			<xs:element name="type" type="tns:AttributeType"/>
++			<xs:element name="value" type="xs:string"/>
++		</xs:sequence>
++	</xs:complexType>
++	<!-- might just want to use the following just for returning data like in getJobDetails -->
++	<xs:complexType name="Attributes">
++		<xs:sequence>
++			<xs:element name="attrs" type="tns:Attribute" minOccurs="0" maxOccurs="unbounded"/>
++		</xs:sequence>
++	</xs:complexType>
++	<xs:simpleType name="OSType">
++		<xs:restriction base="xs:string">
++			<xs:enumeration value="LINUX"/>
++			<xs:enumeration value="WINDOWS"/>
++			<!-- can expand later -->
++		</xs:restriction>
++	</xs:simpleType>
++	<xs:simpleType name="ArchType">
++		<xs:restriction base="xs:string">
++			<xs:enumeration value="INTEL"/>
++			<xs:enumeration value="X86_64"/>
++			<!-- can expand later -->
++		</xs:restriction>
++	</xs:simpleType>
++	<xs:simpleType name="ResourceConstraintType">
++		<xs:restriction base="xs:string">
++			<xs:enumeration value="OS"/>
++			<xs:enumeration value="ARCH"/>
++			<xs:enumeration value="MEMORY"/>
++			<xs:enumeration value="DISK"/>
++			<xs:enumeration value="FILESYSTEM"/>
++			<!-- when we say MEMORY or DISK we always mean at least the amount provided -->
++		</xs:restriction>
++	</xs:simpleType>
++	<xs:complexType name="ResourceConstraint">
++		<xs:sequence>
++			<xs:element name="type" type="tns:ResourceConstraintType"/>
++			<xs:element name="value" type="xs:string"/>
++		</xs:sequence>
++	</xs:complexType>
++	<xs:simpleType name="JobConstraintType">
++		<xs:restriction base="xs:string">
++			<xs:enumeration value="CMD"/>
++			<xs:enumeration value="ARGS"/>
++			<xs:enumeration value="OWNER"/>
++		</xs:restriction>
++	</xs:simpleType>
++	<xs:complexType name="JobConstraint">
++		<xs:sequence>
++			<xs:element name="type" type="tns:JobConstraintType"/>
++			<xs:element name="value" type="xs:string"/>
++		</xs:sequence>
++	</xs:complexType>
++	<xs:complexType name="SubmissionID">
++		<xs:sequence>
++			<xs:element name="name" type="xs:string" minOccurs="0"/>
++			<xs:element name="owner" type="xs:string" minOccurs="0"/>
++		</xs:sequence>
++	</xs:complexType>
++	<xs:complexType name="JobID">
++		<xs:sequence>
++			<xs:element name="job" type="xs:string"/>
++			<xs:element name="pool" type="xs:string" minOccurs="0"/>
++			<xs:element name="scheduler" type="xs:string" minOccurs="0"/>
++			<xs:element name="submission" type="tns:SubmissionID" minOccurs="0"/>
++		</xs:sequence>
++	</xs:complexType>
++	<xs:simpleType name="JobStatusType">
++		<xs:restriction base="xs:string">
++			<xs:enumeration value="IDLE"/>
++			<xs:enumeration value="RUNNING"/>
++			<xs:enumeration value="REMOVED"/>
++			<xs:enumeration value="COMPLETED"/>
++			<xs:enumeration value="HELD"/>
++		</xs:restriction>
++	</xs:simpleType>
++	<!-- reuse through extension not available for the following related types -->
++	<xs:complexType name="JobStatus">
++		<xs:sequence>
++			<xs:element name="id" type="tns:JobID"/>
++			<xs:element name="status" type="tns:Status"/>
++			<xs:element name="job_status" type="tns:JobStatusType" minOccurs="0"/>
++		</xs:sequence>
++	</xs:complexType>
++	<xs:complexType name="JobSummary">
++		<xs:sequence>
++			<xs:element name="id" type="tns:JobID"/>
++			<xs:element name="status" type="tns:Status"/>
++			<xs:element name="queued" type="xs:dateTime"/>
++			<xs:element name="last_update" type="xs:dateTime"/>
++			<xs:element name="job_status" type="tns:JobStatusType"/>
++			<xs:element name="cmd" type="xs:string"/>
++			<xs:element name="args1" type="xs:string" minOccurs="0"/>
++			<xs:element name="args2" type="xs:string" minOccurs="0"/>
++			<xs:element name="held" type="xs:string" minOccurs="0"/>
++			<xs:element name="released" type="xs:string" minOccurs="0"/>
++			<xs:element name="removed" type="xs:string" minOccurs="0"/>
++		</xs:sequence>
++	</xs:complexType>
++		<xs:complexType name="SubmissionSummary">
++		<xs:sequence>
++			<xs:element name="id" type="tns:SubmissionID"/>
++			<xs:element name="status" type="tns:Status"/>
++			<xs:element name="completed" type="xs:int"/>
++			<xs:element name="held" type="xs:int"/>
++			<xs:element name="idle" type="xs:int"/>
++			<xs:element name="removed" type="xs:int"/>
++			<xs:element name="running" type="xs:int"/>
++			<xs:element name="jobs" type="tns:JobSummary" minOccurs="0" maxOccurs="unbounded"/>
++		</xs:sequence>
++	</xs:complexType>
++	<xs:complexType name="JobDetails">
++		<xs:sequence>
++			<xs:element name="id" type="tns:JobID"/>
++			<xs:element name="status" type="tns:Status"/>
++			<xs:element name="details" type="tns:Attributes" minOccurs="0"/>
++		</xs:sequence>
++	</xs:complexType>
++	<xs:simpleType name="JobDataType">
++		<xs:restriction base="xs:string">
++			<xs:enumeration value="ERR"/>
++			<xs:enumeration value="LOG"/>
++			<xs:enumeration value="OUT"/>
++		</xs:restriction>
++	</xs:simpleType>
++	<xs:complexType name="JobData">
++		<xs:sequence>
++			<xs:element name="id" type="tns:JobID"/>
++			<xs:element name="type" type="tns:JobDataType"/>
++		</xs:sequence>
++	</xs:complexType>
++	<xs:simpleType name="ResourceType">
++		<xs:restriction base="xs:string">
++			<xs:enumeration value="COLLECTOR"/>
++			<xs:enumeration value="EXECUTOR"/>
++			<xs:enumeration value="EVENT_SERVER"/>
++			<xs:enumeration value="JOB_SERVER"/>
++			<xs:enumeration value="LOW_LATENCY"/>
++			<xs:enumeration value="MASTER"/>
++			<xs:enumeration value="NEGOTIATOR"/>
++			<xs:enumeration value="SCHEDULER"/>
++			<xs:enumeration value="CUSTOM"/>
++		</xs:restriction>
++	</xs:simpleType>
++	<xs:complexType name="ResourceID">
++		<xs:sequence>
++			<xs:element name="subsystem_type" type="tns:ResourceType"/>
++			<xs:element name="pool" type="xs:string"/>
++			<xs:element name="name" type="xs:string"/>
++			<xs:element name="custom_name" type="xs:string" minOccurs="0"/>
++		</xs:sequence>
++	</xs:complexType>
++</xs:schema>
+diff --git a/src/condor_contrib/aviary/etc/aviary-job.wsdl b/src/condor_contrib/aviary/etc/aviary-job.wsdl
+new file mode 100644
+index 0000000..c401778
+--- /dev/null
++++ b/src/condor_contrib/aviary/etc/aviary-job.wsdl
+@@ -0,0 +1,130 @@
++<?xml version="1.0" encoding="UTF-8" standalone="no"?>
++<!--
++/*
++ * Copyright 2000-2011 Red Hat, Inc.
++ *
++ * 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.
++ */
++-->
++<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://grid.redhat.com/aviary-job/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:job="http://job.aviary.grid.redhat.com" xmlns:ns="http://common.aviary.grid.redhat.com" targetNamespace="http://grid.redhat.com/aviary-job/" name="aviary-job">
++	<wsdl:types>
++		<xsd:schema targetNamespace="http://grid.redhat.com/aviary-job/">
++			<xsd:import schemaLocation="aviary-job.xsd" namespace="http://job.aviary.grid.redhat.com"/>
++		</xsd:schema>
++	</wsdl:types>
++	<wsdl:message name="SubmitJobRequest">
++		<wsdl:part name="parameters" element="job:SubmitJob"/>
++	</wsdl:message>
++	<wsdl:message name="SubmitJobResponse">
++		<wsdl:part name="parameters" element="job:SubmitJobResponse"/>
++	</wsdl:message>
++	<wsdl:message name="HoldJobRequest">
++		<wsdl:part name="parameters" element="job:HoldJob"/>
++	</wsdl:message>
++	<wsdl:message name="HoldJobResponse">
++		<wsdl:part name="parameters" element="job:HoldJobResponse"/>
++	</wsdl:message>
++	<wsdl:message name="ReleaseJobRequest">
++		<wsdl:part name="parameters" element="job:ReleaseJob"/>
++	</wsdl:message>
++	<wsdl:message name="ReleaseJobResponse">
++		<wsdl:part name="parameters" element="job:ReleaseJobResponse"/>
++	</wsdl:message>
++	<wsdl:message name="RemoveJobRequest">
++		<wsdl:part name="parameters" element="job:RemoveJob"/>
++	</wsdl:message>
++	<wsdl:message name="RemoveJobResponse">
++		<wsdl:part name="parameters" element="job:RemoveJobResponse"/>
++	</wsdl:message>
++	<wsdl:message name="SetJobAttributeRequest">
++		<wsdl:part name="parameters" element="job:SetJobAttribute"/>
++	</wsdl:message>
++	<wsdl:message name="SetJobAttributeResponse">
++		<wsdl:part name="parameters" element="job:SetJobAttributeResponse"/>
++	</wsdl:message>
++	<wsdl:portType name="AviaryJob">
++		<wsdl:operation name="submitJob">
++			<wsdl:input message="tns:SubmitJobRequest"/>
++			<wsdl:output message="tns:SubmitJobResponse"/>
++		</wsdl:operation>
++		<wsdl:operation name="holdJob">
++			<wsdl:input message="tns:HoldJobRequest"/>
++			<wsdl:output message="tns:HoldJobResponse"/>
++		</wsdl:operation>
++		<wsdl:operation name="releaseJob">
++			<wsdl:input message="tns:ReleaseJobRequest"/>
++			<wsdl:output message="tns:ReleaseJobResponse"/>
++		</wsdl:operation>
++		<wsdl:operation name="removeJob">
++			<wsdl:input message="tns:RemoveJobRequest"/>
++			<wsdl:output message="tns:RemoveJobResponse"/>
++		</wsdl:operation>
++		<wsdl:operation name="setJobAttribute">
++			<wsdl:input message="tns:SetJobAttributeRequest"/>
++			<wsdl:output message="tns:SetJobAttributeResponse"/>
++		</wsdl:operation>
++	</wsdl:portType>
++	<wsdl:binding name="AviaryJobSOAPBinding" type="tns:AviaryJob">
++		<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
++		<wsdl:operation name="submitJob">
++			<soap:operation soapAction="http://grid.redhat.com/aviary-job/submit"/>
++			<wsdl:input>
++				<soap:body use="literal"/>
++			</wsdl:input>
++			<wsdl:output>
++				<soap:body use="literal"/>
++			</wsdl:output>
++		</wsdl:operation>
++		<wsdl:operation name="holdJob">
++			<soap:operation soapAction="http://grid.redhat.com/aviary-job/hold"/>
++			<wsdl:input>
++				<soap:body use="literal"/>
++			</wsdl:input>
++			<wsdl:output>
++				<soap:body use="literal"/>
++			</wsdl:output>
++		</wsdl:operation>
++		<wsdl:operation name="releaseJob">
++			<soap:operation soapAction="http://grid.redhat.com/aviary-job/release"/>
++			<wsdl:input>
++				<soap:body use="literal"/>
++			</wsdl:input>
++			<wsdl:output>
++				<soap:body use="literal"/>
++			</wsdl:output>
++		</wsdl:operation>
++		<wsdl:operation name="removeJob">
++			<soap:operation soapAction="http://grid.redhat.com/aviary-job/remove"/>
++			<wsdl:input>
++				<soap:body use="literal"/>
++			</wsdl:input>
++			<wsdl:output>
++				<soap:body use="literal"/>
++			</wsdl:output>
++		</wsdl:operation>
++		<wsdl:operation name="setJobAttribute">
++			<soap:operation soapAction="http://grid.redhat.com/aviary-job/set-attr"/>
++			<wsdl:input>
++				<soap:body use="literal"/>
++			</wsdl:input>
++			<wsdl:output>
++				<soap:body use="literal"/>
++			</wsdl:output>
++		</wsdl:operation>
++	</wsdl:binding>
++	<wsdl:service name="AviaryJobService">
++		<wsdl:port name="AviaryJobSOAPPort" binding="tns:AviaryJobSOAPBinding">
++			<soap:address location="http://localhost"/>
++		</wsdl:port>
++	</wsdl:service>
++</wsdl:definitions>
+diff --git a/src/condor_contrib/aviary/etc/aviary-job.xsd b/src/condor_contrib/aviary/etc/aviary-job.xsd
+new file mode 100644
+index 0000000..d00b63b
+--- /dev/null
++++ b/src/condor_contrib/aviary/etc/aviary-job.xsd
+@@ -0,0 +1,71 @@
++<?xml version="1.0" encoding="utf-8"?>
++<!--
++/*
++ * Copyright 2000-2011 Red Hat, Inc.
++ *
++ * 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.
++ */
++-->
++<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:job="http://job.aviary.grid.redhat.com" xmlns:mrg="http://common.aviary.grid.redhat.com" targetNamespace="http://job.aviary.grid.redhat.com">
++	<xs:import namespace="http://common.aviary.grid.redhat.com" schemaLocation="aviary-common.xsd"/>
++	<!-- declare message-level elements using anonymous complex types for simpler generated types -->
++	<xs:element name="SubmitJob">
++		<xs:complexType>
++			<xs:sequence>
++				<xs:element name="cmd" type="xs:string"/>
++				<xs:element name="args" type="xs:string" minOccurs="0"/>
++				<xs:element name="owner" type="xs:string"/>
++				<xs:element name="iwd" type="xs:string"/>
++				<xs:element name="submission_name" type="xs:string" minOccurs="0"/>
++				<xs:element name="requirements" type="mrg:ResourceConstraint"  minOccurs="0" maxOccurs="unbounded"/>
++				<xs:element name="extra" type="mrg:Attribute" minOccurs="0" maxOccurs="unbounded"/>
++			</xs:sequence>
++			<xs:attribute name="allowOverrides" type="xs:boolean" default="false"/>
++		</xs:complexType>
++	</xs:element>
++	<xs:element name="SubmitJobResponse">
++		<xs:complexType>
++			<xs:sequence>
++				<xs:element name="id" type="mrg:JobID" minOccurs="0"/>
++				<xs:element name="status" type="mrg:Status"/>
++			</xs:sequence>
++		</xs:complexType>
++	</xs:element>
++	<xs:complexType name="ControlJob">
++		<xs:sequence>
++			<xs:element name="id" type="mrg:JobID"/>
++			<xs:element name="reason" type="xs:string"/>
++		</xs:sequence>
++	</xs:complexType>
++	<xs:complexType name="ControlJobResponse">
++		<xs:sequence>
++			<xs:element name="status" type="mrg:Status"/>
++		</xs:sequence>
++	</xs:complexType>
++	<!-- these all follow the same type pattern so reuse -->
++	<xs:element name="HoldJob" type="job:ControlJob"/>
++	<xs:element name="HoldJobResponse" type="job:ControlJobResponse"/>
++	<xs:element name="ReleaseJob" type="job:ControlJob"/>
++	<xs:element name="ReleaseJobResponse" type="job:ControlJobResponse"/>
++	<xs:element name="RemoveJob" type="job:ControlJob"/>
++	<xs:element name="RemoveJobResponse" type="job:ControlJobResponse"/>
++	<xs:element name="SetJobAttribute">
++		<xs:complexType>
++			<xs:sequence>
++				<xs:element name="id" type="mrg:JobID"/>
++				<xs:element name="attribute" type="mrg:Attribute"/>
++			</xs:sequence>
++		</xs:complexType>
++	</xs:element>
++	<xs:element name="SetJobAttributeResponse" type="job:ControlJobResponse"/>
++</xs:schema>
+diff --git a/src/condor_contrib/aviary/etc/aviary-query.wsdl b/src/condor_contrib/aviary/etc/aviary-query.wsdl
+new file mode 100644
+index 0000000..3769e05
+--- /dev/null
++++ b/src/condor_contrib/aviary/etc/aviary-query.wsdl
+@@ -0,0 +1,130 @@
++<?xml version="1.0" encoding="UTF-8" standalone="no"?>
++<!--
++/*
++ * Copyright 2000-2011 Red Hat, Inc.
++ *
++ * 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.
++ */
++-->
++<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://grid.redhat.com/aviary-query/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:qry="http://query.aviary.grid.redhat.com" xmlns:ns="http://common.aviary.grid.redhat.com" targetNamespace="http://grid.redhat.com/aviary-query/" name="aviary-query">
++	<wsdl:types>
++		<xsd:schema targetNamespace="http://grid.redhat.com/aviary-query/">
++			<xsd:import schemaLocation="aviary-query.xsd" namespace="http://query.aviary.grid.redhat.com"/>
++		</xsd:schema>
++	</wsdl:types>
++	<wsdl:message name="GetJobSummaryRequest">
++		<wsdl:part name="parameters" element="qry:GetJobSummary"/>
++	</wsdl:message>
++	<wsdl:message name="GetJobSummaryResponse">
++		<wsdl:part name="parameters" element="qry:GetJobSummaryResponse"/>
++	</wsdl:message>
++	<wsdl:message name="GetJobStatusRequest">
++		<wsdl:part name="parameters" element="qry:GetJobStatus"/>
++	</wsdl:message>
++	<wsdl:message name="GetJobStatusResponse">
++		<wsdl:part name="parameters" element="qry:GetJobStatusResponse"/>
++	</wsdl:message>
++	<wsdl:message name="GetJobDetailsRequest">
++		<wsdl:part name="parameters" element="qry:GetJobDetails"/>
++	</wsdl:message>
++	<wsdl:message name="GetJobDetailsResponse">
++		<wsdl:part name="parameters" element="qry:GetJobDetailsResponse"/>
++	</wsdl:message>
++	<wsdl:message name="GetJobDataRequest">
++		<wsdl:part name="parameters" element="qry:GetJobData"/>
++	</wsdl:message>
++	<wsdl:message name="GetJobDataResponse">
++		<wsdl:part name="parameters" element="qry:GetJobDataResponse"/>
++	</wsdl:message>
++	<wsdl:message name="GetSubmissionSummaryRequest">
++		<wsdl:part name="parameters" element="qry:GetSubmissionSummary"/>
++	</wsdl:message>
++	<wsdl:message name="GetSubmissionSummaryResponse">
++		<wsdl:part name="parameters" element="qry:GetSubmissionSummaryResponse"/>
++	</wsdl:message>
++	<wsdl:portType name="AviaryQuery">
++		<wsdl:operation name="getJobSummary">
++			<wsdl:input message="tns:GetJobSummaryRequest"/>
++			<wsdl:output message="tns:GetJobSummaryResponse"/>
++		</wsdl:operation>
++		<wsdl:operation name="getJobStatus">
++			<wsdl:input message="tns:GetJobStatusRequest"/>
++			<wsdl:output message="tns:GetJobStatusResponse"/>
++		</wsdl:operation>
++		<wsdl:operation name="getJobDetails">
++			<wsdl:input message="tns:GetJobDetailsRequest"/>
++			<wsdl:output message="tns:GetJobDetailsResponse"/>
++		</wsdl:operation>
++		<wsdl:operation name="getJobData">
++			<wsdl:input message="tns:GetJobDataRequest"/>
++			<wsdl:output message="tns:GetJobDataResponse"/>
++		</wsdl:operation>
++		<wsdl:operation name="getSubmissionSummary">
++			<wsdl:input message="tns:GetSubmissionSummaryRequest"/>
++			<wsdl:output message="tns:GetSubmissionSummaryResponse"/>
++		</wsdl:operation>
++	</wsdl:portType>
++	<wsdl:binding name="AviaryQuerySOAPBinding" type="tns:AviaryQuery">
++		<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
++		<wsdl:operation name="getJobSummary">
++			<soap:operation soapAction="http://grid.redhat.com/aviary-query/job/summary"/>
++			<wsdl:input>
++				<soap:body use="literal"/>
++			</wsdl:input>
++			<wsdl:output>
++				<soap:body use="literal"/>
++			</wsdl:output>
++		</wsdl:operation>
++		<wsdl:operation name="getJobStatus">
++			<soap:operation soapAction="http://grid.redhat.com/aviary-query/job/status"/>
++			<wsdl:input>
++				<soap:body use="literal"/>
++			</wsdl:input>
++			<wsdl:output>
++				<soap:body use="literal"/>
++			</wsdl:output>
++		</wsdl:operation>
++		<wsdl:operation name="getJobDetails">
++			<soap:operation soapAction="http://grid.redhat.com/aviary-query/job/details"/>
++			<wsdl:input>
++				<soap:body use="literal"/>
++			</wsdl:input>
++			<wsdl:output>
++				<soap:body use="literal"/>
++			</wsdl:output>
++		</wsdl:operation>
++		<wsdl:operation name="getJobData">
++			<soap:operation soapAction="http://grid.redhat.com/aviary-query/job/data"/>
++			<wsdl:input>
++				<soap:body use="literal"/>
++			</wsdl:input>
++			<wsdl:output>
++				<soap:body use="literal"/>
++			</wsdl:output>
++		</wsdl:operation>
++		<wsdl:operation name="getSubmissionSummary">
++			<soap:operation soapAction="http://grid.redhat.com/aviary-query/job/submission"/>
++			<wsdl:input>
++				<soap:body use="literal"/>
++			</wsdl:input>
++			<wsdl:output>
++				<soap:body use="literal"/>
++			</wsdl:output>
++		</wsdl:operation>
++	</wsdl:binding>
++	<wsdl:service name="AviaryQueryService">
++		<wsdl:port name="AviaryQuerySOAPPort" binding="tns:AviaryQuerySOAPBinding">
++			<soap:address location="http://localhost"/>
++		</wsdl:port>
++	</wsdl:service>
++</wsdl:definitions>
+diff --git a/src/condor_contrib/aviary/etc/aviary-query.xsd b/src/condor_contrib/aviary/etc/aviary-query.xsd
+new file mode 100644
+index 0000000..a46ceb8
+--- /dev/null
++++ b/src/condor_contrib/aviary/etc/aviary-query.xsd
+@@ -0,0 +1,106 @@
++<?xml version="1.0" encoding="utf-8"?>
++<!--
++/*
++ * Copyright 2000-2011 Red Hat, Inc.
++ *
++ * 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.
++ */
++-->
++<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:qry="http://query.aviary.grid.redhat.com" xmlns:mrg="http://common.aviary.grid.redhat.com" targetNamespace="http://query.aviary.grid.redhat.com">
++	<xs:import namespace="http://common.aviary.grid.redhat.com" schemaLocation="aviary-common.xsd"/>
++
++	<!-- declare  message-level elements using anonymous complex types for simpler generated types -->
++	<!-- use of refs, inheritance into anonymous types, etc. eschewed for simplicity and interop -->
++	<xs:element name="GetJobSummary">
++		<xs:complexType>
++			<xs:sequence>
++				<xs:element name="ids" type="mrg:JobID" minOccurs="0" maxOccurs="unbounded"/>
++			</xs:sequence>
++			<xs:attribute name="partialMatches" type="xs:boolean" default="true"/>
++		</xs:complexType>
++	</xs:element>
++	<xs:element name="GetJobSummaryResponse">
++		<xs:complexType>
++			<xs:sequence>
++				<xs:element name="jobs" type="mrg:JobSummary" minOccurs="0" maxOccurs="unbounded"/>
++			</xs:sequence>
++		</xs:complexType>
++	</xs:element>
++	<xs:element name="GetJobStatus">
++		<xs:complexType>
++			<xs:sequence>
++				<xs:element name="ids" type="mrg:JobID" minOccurs="0" maxOccurs="unbounded"/>
++			</xs:sequence>
++			<xs:attribute name="partialMatches" type="xs:boolean" default="true"/>
++		</xs:complexType>
++	</xs:element>
++	<xs:element name="GetJobStatusResponse">
++		<xs:complexType>
++			<xs:sequence>
++				<xs:element name="jobs" type="mrg:JobStatus" minOccurs="0" maxOccurs="unbounded"/>
++			</xs:sequence>
++		</xs:complexType>
++	</xs:element>
++	<xs:element name="GetJobDetails">
++		<xs:complexType>
++			<xs:sequence>
++				<xs:element name="ids" type="mrg:JobID" minOccurs="0" maxOccurs="unbounded"/>
++			</xs:sequence>
++			<xs:attribute name="partialMatches" type="xs:boolean" default="true"/>
++		</xs:complexType>
++	</xs:element>
++	<xs:element name="GetJobDetailsResponse">
++		<xs:complexType>
++			<xs:sequence>
++				<xs:element name="jobs" type="mrg:JobDetails" minOccurs="0" maxOccurs="unbounded"/>
++			</xs:sequence>
++		</xs:complexType>
++	</xs:element>
++	<xs:element name="GetJobData">
++		<xs:complexType>
++			<xs:sequence>
++				<xs:element name="data" type="mrg:JobData"/>
++				<xs:element name="max_bytes" type="xs:integer" default="1024"/>
++				<xs:element name="from_end" type="xs:boolean" minOccurs="0" default="false"/>
++			</xs:sequence>
++		</xs:complexType>
++	</xs:element>
++	<xs:element name="GetJobDataResponse">
++		<xs:complexType>
++			<xs:sequence>
++				<xs:element name="data" type="mrg:JobData"/>
++				<xs:element name="status" type="mrg:Status"/>
++				<xs:element name="file_name" type="xs:string" minOccurs="0"/>
++				<xs:element name="file_size" type="xs:integer" minOccurs="0"/>
++				<!-- string for file content...we probably want to keep line feeds, etc. TODO: need to revisit this-->
++				<xs:element name="content" type="xs:string" minOccurs="0"/>
++			</xs:sequence>
++		</xs:complexType>
++	</xs:element>
++	<xs:element name="GetSubmissionSummary">
++		<xs:complexType>
++			<xs:sequence>
++				<xs:element name="ids" type="mrg:SubmissionID" minOccurs="0" maxOccurs="unbounded"/>
++			</xs:sequence>
++			<xs:attribute name="partialMatches" type="xs:boolean" default="true"/>
++			<xs:attribute name="includeJobSummaries" type="xs:boolean" default="false"/>
++		</xs:complexType>
++	</xs:element>
++	<xs:element name="GetSubmissionSummaryResponse">
++		<xs:complexType>
++			<xs:sequence>
++				<xs:element name="submissions" type="mrg:SubmissionSummary" minOccurs="0" maxOccurs="unbounded"/>
++			</xs:sequence>
++		</xs:complexType>
++	</xs:element>
++</xs:schema>
+diff --git a/src/condor_contrib/aviary/etc/axis2.xml.in b/src/condor_contrib/aviary/etc/axis2.xml.in
+new file mode 100644
+index 0000000..4e06bbd
+--- /dev/null
++++ b/src/condor_contrib/aviary/etc/axis2.xml.in
+@@ -0,0 +1,102 @@
++<!--
++/*
++ * Copyright 2000-2011 Red Hat, Inc.
++ *
++ * 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.
++ */
++-->
++
++<!-- Aviary-specific axis2.xml -->
++<axisconfig name="Axis2/C">
++	<!-- ================================================= -->
++	<!-- Parameters -->
++	<!-- ================================================= -->
++	<parameter name="libDir">@WS02_LIB_ROOT@</parameter>
++	<parameter name="servicesDir">/var/lib/condor/aviary/services</parameter>
++	<parameter name="enableREST" locked="false">true</parameter>
++	<parameter name="persistOperationContext" locked="false">true</parameter>
++
++	<!-- ================================================= -->
++	<!-- Transport Ins -->
++	<!-- ================================================= -->
++	<transportReceiver name="http" class="libaxis2_http_receiver.so.0">
++		<parameter name="port" locked="false">6060</parameter>
++	</transportReceiver>
++
++    <!-- applies to Axis2/C clients only -->
++	<transportReceiver name="https" class="libaxis2_http_receiver.so.0">
++		<parameter name="port" locked="false">6060</parameter>
++	</transportReceiver>
++	<!--transportReceiver name="tcp" class="axis2_tcp_receiver"-->
++	<!--parameter name="port" locked="false">6060</parameter-->
++	<!--/transportReceiver-->
++
++	<!-- ================================================= -->
++	<!-- Transport Outs -->
++	<!-- ================================================= -->
++
++	<transportSender name="http" class="libaxis2_http_sender.so.0">
++		<parameter name="PROTOCOL" locked="false">HTTP/1.1</parameter>
++		<parameter name="xml-declaration" insert="false"/>
++		<!--parameter name="Transfer-Encoding">chunked</parameter-->
++		<!--parameter name="PROXY" proxy_host="127.0.0.1" proxy_port="8080" locked="true"/-->
++	</transportSender>
++
++    <!-- applies to Axis2/C clients only -->
++	<transportSender name="https" class="libaxis2_http_sender.so.0">
++		<parameter name="PROTOCOL" locked="false">HTTP/1.1</parameter>
++		<parameter name="xml-declaration" insert="false"/>
++	</transportSender>
++
++	<!-- ================================================= -->
++	<!-- SSL  -->
++	<!-- ================================================= -->
++	<!-- NOTE: server-side SSL support currently unavailable for aviary components -->
++	<!-- alternatives include the use of a SSL-enabled proxy server such as squid; -->
++	<!-- the following settings would apply to Axis2/C clients only if enabled -->
++	<!-- set the server's SSL certificate here -->
++	<!--parameter name="SERVER_CERT">/path/to/ca/certificate</parameter-->
++	<!-- set the client's SSL key file and passphrase here for client auth -->
++	<!--parameter name="KEY_FILE">/path/to/client/certificate/chain/file</parameter-->
++	<!--parameter name="SSL_PASSPHRASE">passphrase</parameter-->
++
++	<!-- ================================================= -->
++	<!-- Phases  -->
++	<!-- ================================================= -->
++	<phaseOrder type="inflow">
++		<!-- System pre defined phases -->
++		<phase name="Transport"/>
++		<phase name="PreDispatch"/>
++		<phase name="Dispatch"/>
++		<phase name="PostDispatch"/>
++		<!-- End system pre defined phases -->
++		<!-- After PostDispatch phase, module or service author can add any phase as required  -->
++		<!-- User defined phases could be added here -->
++		<phase name="Security"/>
++		<phase name="Rahas"/>
++	</phaseOrder>
++	<phaseOrder type="outflow">
++		<!-- User defined phases could be added here -->
++		<phase name="MessageOut"/>
++		<phase name="Security"/>
++	</phaseOrder>
++	<phaseOrder type="INfaultflow">
++		<!-- User defined phases could be added here -->
++		<!--phase name="userphase1"/-->
++	</phaseOrder>
++	<phaseOrder type="Outfaultflow">
++		<!-- User defined phases could be added here -->
++		<!--phase name="userphase1"/-->
++		<phase name="MessageOut"/>
++	</phaseOrder>
++</axisconfig>
+diff --git a/src/condor_contrib/aviary/gen-xsd-cpp.sh b/src/condor_contrib/aviary/gen-xsd-cpp.sh
+new file mode 100755
+index 0000000..2740157
+--- /dev/null
++++ b/src/condor_contrib/aviary/gen-xsd-cpp.sh
+@@ -0,0 +1,51 @@
++#!/bin/sh
++
++#
++# Copyright 2009-2011 Red Hat, Inc.
++#
++# 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.
++#
++
++# codegen to provide WSDL/XSD CPP headers and source
++
++WSFCPP_HOME=/usr
++if [ -z "$1" ]; then
++    echo No arg - using default
++else
++    WSFCPP_HOME=$1
++fi
++echo WSFCPP_HOME=$WSFCPP_HOME
++
++# generate our cpp types from WSDL
++WSDL2CPP.sh -uri etc/aviary-job.wsdl -or -d adb -ss -g -ns2p http://common.aviary.grid.redhat.com=AviaryCommon,http://job.aviary.grid.redhat.com=AviaryJob -o codegen/job
++WSDL2CPP.sh -uri etc/aviary-query.wsdl -or -d adb -ss -g -ns2p http://common.aviary.grid.redhat.com=AviaryCommon,http://query.aviary.grid.redhat.com=AviaryQuery -o codegen/query
++
++# get rid of the extraneous stuff that WSDL2CPP won't let us turn off
++rm -f codegen/job/*AviaryJob*Service*.{h,cpp,vcproj}
++rm -f codegen/query/*AviaryQuery*Service*.{h,cpp,vcproj}
++
++# setup our include dir
++if ! test -d include; then
++    mkdir include;
++fi
++
++# stow the headers for others steps in the build 
++mv codegen/job/src/*.h include;
++mv codegen/query/src/*.h include;
++
++# WSDLCPP should do this for us but break out common
++if ! test -d codegen/common/src; then
++    mkdir -p codegen/common/src;
++fi
++mv codegen/query/src/AviaryCommon*.cpp codegen/common/src
++rm -f codegen/job/src/AviaryCommon*.cpp
+diff --git a/src/condor_contrib/aviary/include/AviaryCommon_ArchType.h b/src/condor_contrib/aviary/include/AviaryCommon_ArchType.h
+new file mode 100644
+index 0000000..89aa5c2
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryCommon_ArchType.h
+@@ -0,0 +1,245 @@
++
++
++        #ifndef AviaryCommon_ARCHTYPE_H
++        #define AviaryCommon_ARCHTYPE_H
++
++       /**
++        * ArchType.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  ArchType class
++        */
++
++        namespace AviaryCommon{
++            class ArchType;
++        }
++        
++
++        
++        #include <axutil_qname.h>
++        
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryCommon
++{
++        
++        /* Enumeration for this type */
++        typedef enum {
++            ArchType_INTEL,
++            ArchType_X86_64
++        } ADBArchTypeEnum;
++        
++        
++
++        class ArchType {
++
++        private:
++             
++                axutil_qname_t* qname;
++            std::string property_ArchType;
++
++                
++                bool isValidArchType;
++            
++
++        /*** Private methods ***/
++          
++
++        bool WSF_CALL
++        setArchTypeNil();
++            
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class ArchType
++         */
++
++        ArchType();
++
++        /**
++         * Destructor ArchType
++         */
++        ~ArchType();
++
++
++       
++
++        /**
++         * Constructor for creating ArchType
++         * @param 
++         * @param ArchType std::string
++         * @return newly created ArchType object
++         */
++        ArchType(std::string arg_ArchType);
++        
++        
++        /********************************** Class get set methods **************************************/
++        
++        
++
++        /**
++         * Getter for ArchType. 
++         * @return std::string*
++         */
++        WSF_EXTERN std::string WSF_CALL
++        getArchType();
++
++        /**
++         * Setter for ArchType.
++         * @param arg_ArchType std::string*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setArchType(const std::string  arg_ArchType);
++
++        /**
++         * Re setter for ArchType
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetArchType();
++        
++            
++            /************************** Getters and Setters For Enumerations ********************************/
++            /********************* Enumeration Specific Operations: get_enum, set_enum **********************/
++            
++            /**
++            * Enum getter for ArchType.
++            * @return ADBArchTypeEnum; -1 on failure
++            */
++            ADBArchTypeEnum WSF_CALL
++            getArchTypeEnum();
++            
++            /**
++            * Enum setter for ArchType.
++            * @param arg_ArchType ADBArchTypeEnum
++            * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
++            */
++            bool WSF_CALL
++            setArchTypeEnum(
++            const ADBArchTypeEnum arg_ArchType);
++            
++          
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether ArchType is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isArchTypeNil();
++
++
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the content from a string to an ADB object
++         * @param node_value to deserialize
++         * @param parent_element The parent element if it is an element, NULL otherwise
++         * @return true on success, false otherwise
++         */
++       bool WSF_CALL
++       deserializeFromString(const axis2_char_t *node_value, axiom_node_t *parent);
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++        /**
++         * Serialize ADB object to a string
++         * @param namespaces hash which contains a mapping of namespace uris to prefixes
++         * @return serialized string
++         */
++         char* WSF_CALL
++         serializeToString(axutil_hash_t *namespaces);
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param ArchType_om_node node to serialize from
++         * @param ArchType_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* ArchType_om_node, axiom_element_t *ArchType_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the ArchType is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for ArchType by property number (1)
++         * @return std::string
++         */
++
++        std::string WSF_CALL
++        getProperty1();
++
++    
++
++};
++
++}        
++ #endif /* ARCHTYPE_H */
++    
++
+diff --git a/src/condor_contrib/aviary/include/AviaryCommon_Attribute.h b/src/condor_contrib/aviary/include/AviaryCommon_Attribute.h
+new file mode 100644
+index 0000000..1f47890
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryCommon_Attribute.h
+@@ -0,0 +1,307 @@
++
++
++        #ifndef AviaryCommon_ATTRIBUTE_H
++        #define AviaryCommon_ATTRIBUTE_H
++
++       /**
++        * Attribute.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  Attribute class
++        */
++
++        namespace AviaryCommon{
++            class Attribute;
++        }
++        
++
++        
++       #include "AviaryCommon_AttributeType.h"
++          
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryCommon
++{
++        
++        
++
++        class Attribute {
++
++        private:
++             std::string property_Name;
++
++                
++                bool isValidName;
++            AviaryCommon::AttributeType* property_Type;
++
++                
++                bool isValidType;
++            std::string property_Value;
++
++                
++                bool isValidValue;
++            
++
++        /*** Private methods ***/
++          
++
++        bool WSF_CALL
++        setNameNil();
++            
++
++        bool WSF_CALL
++        setTypeNil();
++            
++
++        bool WSF_CALL
++        setValueNil();
++            
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class Attribute
++         */
++
++        Attribute();
++
++        /**
++         * Destructor Attribute
++         */
++        ~Attribute();
++
++
++       
++
++        /**
++         * Constructor for creating Attribute
++         * @param 
++         * @param Name std::string
++         * @param Type AviaryCommon::AttributeType*
++         * @param Value std::string
++         * @return newly created Attribute object
++         */
++        Attribute(std::string arg_Name,AviaryCommon::AttributeType* arg_Type,std::string arg_Value);
++        
++        
++        /********************************** Class get set methods **************************************/
++        
++        
++
++        /**
++         * Getter for name. 
++         * @return std::string*
++         */
++        WSF_EXTERN std::string WSF_CALL
++        getName();
++
++        /**
++         * Setter for name.
++         * @param arg_Name std::string*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setName(const std::string  arg_Name);
++
++        /**
++         * Re setter for name
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetName();
++        
++        
++
++        /**
++         * Getter for type. 
++         * @return AviaryCommon::AttributeType*
++         */
++        WSF_EXTERN AviaryCommon::AttributeType* WSF_CALL
++        getType();
++
++        /**
++         * Setter for type.
++         * @param arg_Type AviaryCommon::AttributeType*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setType(AviaryCommon::AttributeType*  arg_Type);
++
++        /**
++         * Re setter for type
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetType();
++        
++        
++
++        /**
++         * Getter for value. 
++         * @return std::string*
++         */
++        WSF_EXTERN std::string WSF_CALL
++        getValue();
++
++        /**
++         * Setter for value.
++         * @param arg_Value std::string*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setValue(const std::string  arg_Value);
++
++        /**
++         * Re setter for value
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetValue();
++        
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether name is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isNameNil();
++
++
++        
++
++        /**
++         * Check whether type is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isTypeNil();
++
++
++        
++
++        /**
++         * Check whether value is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isValueNil();
++
++
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param Attribute_om_node node to serialize from
++         * @param Attribute_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* Attribute_om_node, axiom_element_t *Attribute_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the Attribute is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for name by property number (1)
++         * @return std::string
++         */
++
++        std::string WSF_CALL
++        getProperty1();
++
++    
++        
++
++        /**
++         * Getter for type by property number (2)
++         * @return AviaryCommon::AttributeType
++         */
++
++        AviaryCommon::AttributeType* WSF_CALL
++        getProperty2();
++
++    
++        
++
++        /**
++         * Getter for value by property number (3)
++         * @return std::string
++         */
++
++        std::string WSF_CALL
++        getProperty3();
++
++    
++
++};
++
++}        
++ #endif /* ATTRIBUTE_H */
++    
++
+diff --git a/src/condor_contrib/aviary/include/AviaryCommon_AttributeType.h b/src/condor_contrib/aviary/include/AviaryCommon_AttributeType.h
+new file mode 100644
+index 0000000..34d7c36
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryCommon_AttributeType.h
+@@ -0,0 +1,250 @@
++
++
++        #ifndef AviaryCommon_ATTRIBUTETYPE_H
++        #define AviaryCommon_ATTRIBUTETYPE_H
++
++       /**
++        * AttributeType.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  AttributeType class
++        */
++
++        namespace AviaryCommon{
++            class AttributeType;
++        }
++        
++
++        
++        #include <axutil_qname.h>
++        
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryCommon
++{
++        
++        /* Enumeration for this type */
++        typedef enum {
++            AttributeType_INTEGER,
++            AttributeType_FLOAT,
++            AttributeType_STRING,
++            AttributeType_EXPRESSION,
++            AttributeType_BOOLEAN,
++            AttributeType_UNDEFINED,
++            AttributeType_ERROR
++        } ADBAttributeTypeEnum;
++        
++        
++
++        class AttributeType {
++
++        private:
++             
++                axutil_qname_t* qname;
++            std::string property_AttributeType;
++
++                
++                bool isValidAttributeType;
++            
++
++        /*** Private methods ***/
++          
++
++        bool WSF_CALL
++        setAttributeTypeNil();
++            
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class AttributeType
++         */
++
++        AttributeType();
++
++        /**
++         * Destructor AttributeType
++         */
++        ~AttributeType();
++
++
++       
++
++        /**
++         * Constructor for creating AttributeType
++         * @param 
++         * @param AttributeType std::string
++         * @return newly created AttributeType object
++         */
++        AttributeType(std::string arg_AttributeType);
++        
++        
++        /********************************** Class get set methods **************************************/
++        
++        
++
++        /**
++         * Getter for AttributeType. 
++         * @return std::string*
++         */
++        WSF_EXTERN std::string WSF_CALL
++        getAttributeType();
++
++        /**
++         * Setter for AttributeType.
++         * @param arg_AttributeType std::string*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setAttributeType(const std::string  arg_AttributeType);
++
++        /**
++         * Re setter for AttributeType
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetAttributeType();
++        
++            
++            /************************** Getters and Setters For Enumerations ********************************/
++            /********************* Enumeration Specific Operations: get_enum, set_enum **********************/
++            
++            /**
++            * Enum getter for AttributeType.
++            * @return ADBAttributeTypeEnum; -1 on failure
++            */
++            ADBAttributeTypeEnum WSF_CALL
++            getAttributeTypeEnum();
++            
++            /**
++            * Enum setter for AttributeType.
++            * @param arg_AttributeType ADBAttributeTypeEnum
++            * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
++            */
++            bool WSF_CALL
++            setAttributeTypeEnum(
++            const ADBAttributeTypeEnum arg_AttributeType);
++            
++          
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether AttributeType is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isAttributeTypeNil();
++
++
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the content from a string to an ADB object
++         * @param node_value to deserialize
++         * @param parent_element The parent element if it is an element, NULL otherwise
++         * @return true on success, false otherwise
++         */
++       bool WSF_CALL
++       deserializeFromString(const axis2_char_t *node_value, axiom_node_t *parent);
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++        /**
++         * Serialize ADB object to a string
++         * @param namespaces hash which contains a mapping of namespace uris to prefixes
++         * @return serialized string
++         */
++         char* WSF_CALL
++         serializeToString(axutil_hash_t *namespaces);
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param AttributeType_om_node node to serialize from
++         * @param AttributeType_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* AttributeType_om_node, axiom_element_t *AttributeType_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the AttributeType is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for AttributeType by property number (1)
++         * @return std::string
++         */
++
++        std::string WSF_CALL
++        getProperty1();
++
++    
++
++};
++
++}        
++ #endif /* ATTRIBUTETYPE_H */
++    
++
+diff --git a/src/condor_contrib/aviary/include/AviaryCommon_Attributes.h b/src/condor_contrib/aviary/include/AviaryCommon_Attributes.h
+new file mode 100644
+index 0000000..d3c9823
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryCommon_Attributes.h
+@@ -0,0 +1,296 @@
++
++
++        #ifndef AviaryCommon_ATTRIBUTES_H
++        #define AviaryCommon_ATTRIBUTES_H
++
++       /**
++        * Attributes.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  Attributes class
++        */
++
++        namespace AviaryCommon{
++            class Attributes;
++        }
++        
++
++        
++       #include "AviaryCommon_Attribute.h"
++          
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryCommon
++{
++        
++        
++
++        class Attributes {
++
++        private:
++             std::vector<AviaryCommon::Attribute*>* property_Attrs;
++
++                
++                bool isValidAttrs;
++            
++
++        /*** Private methods ***/
++          
++
++        bool WSF_CALL
++        setAttrsNil();
++            
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class Attributes
++         */
++
++        Attributes();
++
++        /**
++         * Destructor Attributes
++         */
++        ~Attributes();
++
++
++       
++
++        /**
++         * Constructor for creating Attributes
++         * @param 
++         * @param Attrs std::vector<AviaryCommon::Attribute*>*
++         * @return newly created Attributes object
++         */
++        Attributes(std::vector<AviaryCommon::Attribute*>* arg_Attrs);
++        
++        
++        /********************************** Class get set methods **************************************/
++        /******** Deprecated for array types, Use 'Getters and Setters for Arrays' instead ***********/
++        
++
++        /**
++         * Getter for attrs. Deprecated for array types, Use getAttrsAt instead
++         * @return Array of AviaryCommon::Attribute*s.
++         */
++        WSF_EXTERN std::vector<AviaryCommon::Attribute*>* WSF_CALL
++        getAttrs();
++
++        /**
++         * Setter for attrs.Deprecated for array types, Use setAttrsAt
++         * or addAttrs instead.
++         * @param arg_Attrs Array of AviaryCommon::Attribute*s.
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setAttrs(std::vector<AviaryCommon::Attribute*>*  arg_Attrs);
++
++        /**
++         * Re setter for attrs
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetAttrs();
++        
++        /****************************** Get Set methods for Arrays **********************************/
++        /************ Array Specific Operations: get_at, set_at, add, remove_at, sizeof *****************/
++
++        /**
++         * E.g. use of get_at, set_at, add and sizeof
++         *
++         * for(i = 0; i < adb_element->sizeofProperty(); i ++ )
++         * {
++         *     // Getting ith value to property_object variable
++         *     property_object = adb_element->getPropertyAt(i);
++         *
++         *     // Setting ith value from property_object variable
++         *     adb_element->setPropertyAt(i, property_object);
++         *
++         *     // Appending the value to the end of the array from property_object variable
++         *     adb_element->addProperty(property_object);
++         *
++         *     // Removing the ith value from an array
++         *     adb_element->removePropertyAt(i);
++         *     
++         * }
++         *
++         */
++
++        
++        
++        /**
++         * Get the ith element of attrs.
++        * @param i index of the item to be obtained
++         * @return ith AviaryCommon::Attribute* of the array
++         */
++        WSF_EXTERN AviaryCommon::Attribute* WSF_CALL
++        getAttrsAt(int i);
++
++        /**
++         * Set the ith element of attrs. (If the ith already exist, it will be replaced)
++         * @param i index of the item to return
++         * @param arg_Attrs element to set AviaryCommon::Attribute* to the array
++         * @return ith AviaryCommon::Attribute* of the array
++         */
++        WSF_EXTERN bool WSF_CALL
++        setAttrsAt(int i,
++                AviaryCommon::Attribute* arg_Attrs);
++
++
++        /**
++         * Add to attrs.
++         * @param arg_Attrs element to add AviaryCommon::Attribute* to the array
++         * @return true on success, false otherwise.
++         */
++        WSF_EXTERN bool WSF_CALL
++        addAttrs(
++            AviaryCommon::Attribute* arg_Attrs);
++
++        /**
++         * Get the size of the attrs array.
++         * @return the size of the attrs array.
++         */
++        WSF_EXTERN int WSF_CALL
++        sizeofAttrs();
++
++        /**
++         * Remove the ith element of attrs.
++         * @param i index of the item to remove
++         * @return true on success, false otherwise.
++         */
++        WSF_EXTERN bool WSF_CALL
++        removeAttrsAt(int i);
++
++        
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        /* Use 'Checking and Setting NIL values for Arrays' to check and set nil for individual elements */
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether attrs is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isAttrsNil();
++
++
++        
++
++        /*************************** Checking and Setting 'NIL' values in Arrays *****************************/
++
++        /**
++         * NOTE: You may set this to remove specific elements in the array
++         *       But you can not remove elements, if the specific property is declared to be non-nillable or sizeof(array) < minOccurs
++         */
++        
++        /**
++         * Check whether attrs is Nill at position i
++         * @param i index of the item to return.
++         * @return true if the value is Nil at position i, false otherwise
++         */
++        bool WSF_CALL
++        isAttrsNilAt(int i);
++ 
++       
++        /**
++         * Set attrs to NILL at the  position i.
++         * @param i . The index of the item to be set Nill.
++         * @return true on success, false otherwise.
++         */
++        bool WSF_CALL
++        setAttrsNilAt(int i);
++
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param Attributes_om_node node to serialize from
++         * @param Attributes_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* Attributes_om_node, axiom_element_t *Attributes_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the Attributes is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for attrs by property number (1)
++         * @return Array of AviaryCommon::Attributes.
++         */
++
++        std::vector<AviaryCommon::Attribute*>* WSF_CALL
++        getProperty1();
++
++    
++
++};
++
++}        
++ #endif /* ATTRIBUTES_H */
++    
++
+diff --git a/src/condor_contrib/aviary/include/AviaryCommon_JobConstraint.h b/src/condor_contrib/aviary/include/AviaryCommon_JobConstraint.h
+new file mode 100644
+index 0000000..80f3da0
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryCommon_JobConstraint.h
+@@ -0,0 +1,253 @@
++
++
++        #ifndef AviaryCommon_JOBCONSTRAINT_H
++        #define AviaryCommon_JOBCONSTRAINT_H
++
++       /**
++        * JobConstraint.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  JobConstraint class
++        */
++
++        namespace AviaryCommon{
++            class JobConstraint;
++        }
++        
++
++        
++       #include "AviaryCommon_JobConstraintType.h"
++          
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryCommon
++{
++        
++        
++
++        class JobConstraint {
++
++        private:
++             AviaryCommon::JobConstraintType* property_Type;
++
++                
++                bool isValidType;
++            std::string property_Value;
++
++                
++                bool isValidValue;
++            
++
++        /*** Private methods ***/
++          
++
++        bool WSF_CALL
++        setTypeNil();
++            
++
++        bool WSF_CALL
++        setValueNil();
++            
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class JobConstraint
++         */
++
++        JobConstraint();
++
++        /**
++         * Destructor JobConstraint
++         */
++        ~JobConstraint();
++
++
++       
++
++        /**
++         * Constructor for creating JobConstraint
++         * @param 
++         * @param Type AviaryCommon::JobConstraintType*
++         * @param Value std::string
++         * @return newly created JobConstraint object
++         */
++        JobConstraint(AviaryCommon::JobConstraintType* arg_Type,std::string arg_Value);
++        
++        
++        /********************************** Class get set methods **************************************/
++        
++        
++
++        /**
++         * Getter for type. 
++         * @return AviaryCommon::JobConstraintType*
++         */
++        WSF_EXTERN AviaryCommon::JobConstraintType* WSF_CALL
++        getType();
++
++        /**
++         * Setter for type.
++         * @param arg_Type AviaryCommon::JobConstraintType*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setType(AviaryCommon::JobConstraintType*  arg_Type);
++
++        /**
++         * Re setter for type
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetType();
++        
++        
++
++        /**
++         * Getter for value. 
++         * @return std::string*
++         */
++        WSF_EXTERN std::string WSF_CALL
++        getValue();
++
++        /**
++         * Setter for value.
++         * @param arg_Value std::string*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setValue(const std::string  arg_Value);
++
++        /**
++         * Re setter for value
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetValue();
++        
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether type is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isTypeNil();
++
++
++        
++
++        /**
++         * Check whether value is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isValueNil();
++
++
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param JobConstraint_om_node node to serialize from
++         * @param JobConstraint_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* JobConstraint_om_node, axiom_element_t *JobConstraint_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the JobConstraint is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for type by property number (1)
++         * @return AviaryCommon::JobConstraintType
++         */
++
++        AviaryCommon::JobConstraintType* WSF_CALL
++        getProperty1();
++
++    
++        
++
++        /**
++         * Getter for value by property number (2)
++         * @return std::string
++         */
++
++        std::string WSF_CALL
++        getProperty2();
++
++    
++
++};
++
++}        
++ #endif /* JOBCONSTRAINT_H */
++    
++
+diff --git a/src/condor_contrib/aviary/include/AviaryCommon_JobConstraintType.h b/src/condor_contrib/aviary/include/AviaryCommon_JobConstraintType.h
+new file mode 100644
+index 0000000..032c481
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryCommon_JobConstraintType.h
+@@ -0,0 +1,246 @@
++
++
++        #ifndef AviaryCommon_JOBCONSTRAINTTYPE_H
++        #define AviaryCommon_JOBCONSTRAINTTYPE_H
++
++       /**
++        * JobConstraintType.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  JobConstraintType class
++        */
++
++        namespace AviaryCommon{
++            class JobConstraintType;
++        }
++        
++
++        
++        #include <axutil_qname.h>
++        
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryCommon
++{
++        
++        /* Enumeration for this type */
++        typedef enum {
++            JobConstraintType_CMD,
++            JobConstraintType_ARGS,
++            JobConstraintType_OWNER
++        } ADBJobConstraintTypeEnum;
++        
++        
++
++        class JobConstraintType {
++
++        private:
++             
++                axutil_qname_t* qname;
++            std::string property_JobConstraintType;
++
++                
++                bool isValidJobConstraintType;
++            
++
++        /*** Private methods ***/
++          
++
++        bool WSF_CALL
++        setJobConstraintTypeNil();
++            
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class JobConstraintType
++         */
++
++        JobConstraintType();
++
++        /**
++         * Destructor JobConstraintType
++         */
++        ~JobConstraintType();
++
++
++       
++
++        /**
++         * Constructor for creating JobConstraintType
++         * @param 
++         * @param JobConstraintType std::string
++         * @return newly created JobConstraintType object
++         */
++        JobConstraintType(std::string arg_JobConstraintType);
++        
++        
++        /********************************** Class get set methods **************************************/
++        
++        
++
++        /**
++         * Getter for JobConstraintType. 
++         * @return std::string*
++         */
++        WSF_EXTERN std::string WSF_CALL
++        getJobConstraintType();
++
++        /**
++         * Setter for JobConstraintType.
++         * @param arg_JobConstraintType std::string*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setJobConstraintType(const std::string  arg_JobConstraintType);
++
++        /**
++         * Re setter for JobConstraintType
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetJobConstraintType();
++        
++            
++            /************************** Getters and Setters For Enumerations ********************************/
++            /********************* Enumeration Specific Operations: get_enum, set_enum **********************/
++            
++            /**
++            * Enum getter for JobConstraintType.
++            * @return ADBJobConstraintTypeEnum; -1 on failure
++            */
++            ADBJobConstraintTypeEnum WSF_CALL
++            getJobConstraintTypeEnum();
++            
++            /**
++            * Enum setter for JobConstraintType.
++            * @param arg_JobConstraintType ADBJobConstraintTypeEnum
++            * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
++            */
++            bool WSF_CALL
++            setJobConstraintTypeEnum(
++            const ADBJobConstraintTypeEnum arg_JobConstraintType);
++            
++          
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether JobConstraintType is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isJobConstraintTypeNil();
++
++
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the content from a string to an ADB object
++         * @param node_value to deserialize
++         * @param parent_element The parent element if it is an element, NULL otherwise
++         * @return true on success, false otherwise
++         */
++       bool WSF_CALL
++       deserializeFromString(const axis2_char_t *node_value, axiom_node_t *parent);
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++        /**
++         * Serialize ADB object to a string
++         * @param namespaces hash which contains a mapping of namespace uris to prefixes
++         * @return serialized string
++         */
++         char* WSF_CALL
++         serializeToString(axutil_hash_t *namespaces);
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param JobConstraintType_om_node node to serialize from
++         * @param JobConstraintType_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* JobConstraintType_om_node, axiom_element_t *JobConstraintType_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the JobConstraintType is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for JobConstraintType by property number (1)
++         * @return std::string
++         */
++
++        std::string WSF_CALL
++        getProperty1();
++
++    
++
++};
++
++}        
++ #endif /* JOBCONSTRAINTTYPE_H */
++    
++
+diff --git a/src/condor_contrib/aviary/include/AviaryCommon_JobData.h b/src/condor_contrib/aviary/include/AviaryCommon_JobData.h
+new file mode 100644
+index 0000000..970bc6c
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryCommon_JobData.h
+@@ -0,0 +1,255 @@
++
++
++        #ifndef AviaryCommon_JOBDATA_H
++        #define AviaryCommon_JOBDATA_H
++
++       /**
++        * JobData.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  JobData class
++        */
++
++        namespace AviaryCommon{
++            class JobData;
++        }
++        
++
++        
++       #include "AviaryCommon_JobID.h"
++          
++       #include "AviaryCommon_JobDataType.h"
++          
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryCommon
++{
++        
++        
++
++        class JobData {
++
++        private:
++             AviaryCommon::JobID* property_Id;
++
++                
++                bool isValidId;
++            AviaryCommon::JobDataType* property_Type;
++
++                
++                bool isValidType;
++            
++
++        /*** Private methods ***/
++          
++
++        bool WSF_CALL
++        setIdNil();
++            
++
++        bool WSF_CALL
++        setTypeNil();
++            
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class JobData
++         */
++
++        JobData();
++
++        /**
++         * Destructor JobData
++         */
++        ~JobData();
++
++
++       
++
++        /**
++         * Constructor for creating JobData
++         * @param 
++         * @param Id AviaryCommon::JobID*
++         * @param Type AviaryCommon::JobDataType*
++         * @return newly created JobData object
++         */
++        JobData(AviaryCommon::JobID* arg_Id,AviaryCommon::JobDataType* arg_Type);
++        
++        
++        /********************************** Class get set methods **************************************/
++        
++        
++
++        /**
++         * Getter for id. 
++         * @return AviaryCommon::JobID*
++         */
++        WSF_EXTERN AviaryCommon::JobID* WSF_CALL
++        getId();
++
++        /**
++         * Setter for id.
++         * @param arg_Id AviaryCommon::JobID*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setId(AviaryCommon::JobID*  arg_Id);
++
++        /**
++         * Re setter for id
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetId();
++        
++        
++
++        /**
++         * Getter for type. 
++         * @return AviaryCommon::JobDataType*
++         */
++        WSF_EXTERN AviaryCommon::JobDataType* WSF_CALL
++        getType();
++
++        /**
++         * Setter for type.
++         * @param arg_Type AviaryCommon::JobDataType*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setType(AviaryCommon::JobDataType*  arg_Type);
++
++        /**
++         * Re setter for type
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetType();
++        
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether id is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isIdNil();
++
++
++        
++
++        /**
++         * Check whether type is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isTypeNil();
++
++
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param JobData_om_node node to serialize from
++         * @param JobData_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* JobData_om_node, axiom_element_t *JobData_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the JobData is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for id by property number (1)
++         * @return AviaryCommon::JobID
++         */
++
++        AviaryCommon::JobID* WSF_CALL
++        getProperty1();
++
++    
++        
++
++        /**
++         * Getter for type by property number (2)
++         * @return AviaryCommon::JobDataType
++         */
++
++        AviaryCommon::JobDataType* WSF_CALL
++        getProperty2();
++
++    
++
++};
++
++}        
++ #endif /* JOBDATA_H */
++    
++
+diff --git a/src/condor_contrib/aviary/include/AviaryCommon_JobDataType.h b/src/condor_contrib/aviary/include/AviaryCommon_JobDataType.h
+new file mode 100644
+index 0000000..94e2873
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryCommon_JobDataType.h
+@@ -0,0 +1,246 @@
++
++
++        #ifndef AviaryCommon_JOBDATATYPE_H
++        #define AviaryCommon_JOBDATATYPE_H
++
++       /**
++        * JobDataType.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  JobDataType class
++        */
++
++        namespace AviaryCommon{
++            class JobDataType;
++        }
++        
++
++        
++        #include <axutil_qname.h>
++        
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryCommon
++{
++        
++        /* Enumeration for this type */
++        typedef enum {
++            JobDataType_ERR,
++            JobDataType_LOG,
++            JobDataType_OUT
++        } ADBJobDataTypeEnum;
++        
++        
++
++        class JobDataType {
++
++        private:
++             
++                axutil_qname_t* qname;
++            std::string property_JobDataType;
++
++                
++                bool isValidJobDataType;
++            
++
++        /*** Private methods ***/
++          
++
++        bool WSF_CALL
++        setJobDataTypeNil();
++            
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class JobDataType
++         */
++
++        JobDataType();
++
++        /**
++         * Destructor JobDataType
++         */
++        ~JobDataType();
++
++
++       
++
++        /**
++         * Constructor for creating JobDataType
++         * @param 
++         * @param JobDataType std::string
++         * @return newly created JobDataType object
++         */
++        JobDataType(std::string arg_JobDataType);
++        
++        
++        /********************************** Class get set methods **************************************/
++        
++        
++
++        /**
++         * Getter for JobDataType. 
++         * @return std::string*
++         */
++        WSF_EXTERN std::string WSF_CALL
++        getJobDataType();
++
++        /**
++         * Setter for JobDataType.
++         * @param arg_JobDataType std::string*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setJobDataType(const std::string  arg_JobDataType);
++
++        /**
++         * Re setter for JobDataType
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetJobDataType();
++        
++            
++            /************************** Getters and Setters For Enumerations ********************************/
++            /********************* Enumeration Specific Operations: get_enum, set_enum **********************/
++            
++            /**
++            * Enum getter for JobDataType.
++            * @return ADBJobDataTypeEnum; -1 on failure
++            */
++            ADBJobDataTypeEnum WSF_CALL
++            getJobDataTypeEnum();
++            
++            /**
++            * Enum setter for JobDataType.
++            * @param arg_JobDataType ADBJobDataTypeEnum
++            * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
++            */
++            bool WSF_CALL
++            setJobDataTypeEnum(
++            const ADBJobDataTypeEnum arg_JobDataType);
++            
++          
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether JobDataType is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isJobDataTypeNil();
++
++
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the content from a string to an ADB object
++         * @param node_value to deserialize
++         * @param parent_element The parent element if it is an element, NULL otherwise
++         * @return true on success, false otherwise
++         */
++       bool WSF_CALL
++       deserializeFromString(const axis2_char_t *node_value, axiom_node_t *parent);
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++        /**
++         * Serialize ADB object to a string
++         * @param namespaces hash which contains a mapping of namespace uris to prefixes
++         * @return serialized string
++         */
++         char* WSF_CALL
++         serializeToString(axutil_hash_t *namespaces);
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param JobDataType_om_node node to serialize from
++         * @param JobDataType_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* JobDataType_om_node, axiom_element_t *JobDataType_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the JobDataType is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for JobDataType by property number (1)
++         * @return std::string
++         */
++
++        std::string WSF_CALL
++        getProperty1();
++
++    
++
++};
++
++}        
++ #endif /* JOBDATATYPE_H */
++    
++
+diff --git a/src/condor_contrib/aviary/include/AviaryCommon_JobDetails.h b/src/condor_contrib/aviary/include/AviaryCommon_JobDetails.h
+new file mode 100644
+index 0000000..6012bdb
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryCommon_JobDetails.h
+@@ -0,0 +1,311 @@
++
++
++        #ifndef AviaryCommon_JOBDETAILS_H
++        #define AviaryCommon_JOBDETAILS_H
++
++       /**
++        * JobDetails.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  JobDetails class
++        */
++
++        namespace AviaryCommon{
++            class JobDetails;
++        }
++        
++
++        
++       #include "AviaryCommon_JobID.h"
++          
++       #include "AviaryCommon_Status.h"
++          
++       #include "AviaryCommon_Attributes.h"
++          
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryCommon
++{
++        
++        
++
++        class JobDetails {
++
++        private:
++             AviaryCommon::JobID* property_Id;
++
++                
++                bool isValidId;
++            AviaryCommon::Status* property_Status;
++
++                
++                bool isValidStatus;
++            AviaryCommon::Attributes* property_Details;
++
++                
++                bool isValidDetails;
++            
++
++        /*** Private methods ***/
++          
++
++        bool WSF_CALL
++        setIdNil();
++            
++
++        bool WSF_CALL
++        setStatusNil();
++            
++
++        bool WSF_CALL
++        setDetailsNil();
++            
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class JobDetails
++         */
++
++        JobDetails();
++
++        /**
++         * Destructor JobDetails
++         */
++        ~JobDetails();
++
++
++       
++
++        /**
++         * Constructor for creating JobDetails
++         * @param 
++         * @param Id AviaryCommon::JobID*
++         * @param Status AviaryCommon::Status*
++         * @param Details AviaryCommon::Attributes*
++         * @return newly created JobDetails object
++         */
++        JobDetails(AviaryCommon::JobID* arg_Id,AviaryCommon::Status* arg_Status,AviaryCommon::Attributes* arg_Details);
++        
++        
++        /********************************** Class get set methods **************************************/
++        
++        
++
++        /**
++         * Getter for id. 
++         * @return AviaryCommon::JobID*
++         */
++        WSF_EXTERN AviaryCommon::JobID* WSF_CALL
++        getId();
++
++        /**
++         * Setter for id.
++         * @param arg_Id AviaryCommon::JobID*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setId(AviaryCommon::JobID*  arg_Id);
++
++        /**
++         * Re setter for id
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetId();
++        
++        
++
++        /**
++         * Getter for status. 
++         * @return AviaryCommon::Status*
++         */
++        WSF_EXTERN AviaryCommon::Status* WSF_CALL
++        getStatus();
++
++        /**
++         * Setter for status.
++         * @param arg_Status AviaryCommon::Status*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setStatus(AviaryCommon::Status*  arg_Status);
++
++        /**
++         * Re setter for status
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetStatus();
++        
++        
++
++        /**
++         * Getter for details. 
++         * @return AviaryCommon::Attributes*
++         */
++        WSF_EXTERN AviaryCommon::Attributes* WSF_CALL
++        getDetails();
++
++        /**
++         * Setter for details.
++         * @param arg_Details AviaryCommon::Attributes*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setDetails(AviaryCommon::Attributes*  arg_Details);
++
++        /**
++         * Re setter for details
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetDetails();
++        
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether id is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isIdNil();
++
++
++        
++
++        /**
++         * Check whether status is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isStatusNil();
++
++
++        
++
++        /**
++         * Check whether details is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isDetailsNil();
++
++
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param JobDetails_om_node node to serialize from
++         * @param JobDetails_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* JobDetails_om_node, axiom_element_t *JobDetails_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the JobDetails is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for id by property number (1)
++         * @return AviaryCommon::JobID
++         */
++
++        AviaryCommon::JobID* WSF_CALL
++        getProperty1();
++
++    
++        
++
++        /**
++         * Getter for status by property number (2)
++         * @return AviaryCommon::Status
++         */
++
++        AviaryCommon::Status* WSF_CALL
++        getProperty2();
++
++    
++        
++
++        /**
++         * Getter for details by property number (3)
++         * @return AviaryCommon::Attributes
++         */
++
++        AviaryCommon::Attributes* WSF_CALL
++        getProperty3();
++
++    
++
++};
++
++}        
++ #endif /* JOBDETAILS_H */
++    
++
+diff --git a/src/condor_contrib/aviary/include/AviaryCommon_JobID.h b/src/condor_contrib/aviary/include/AviaryCommon_JobID.h
+new file mode 100644
+index 0000000..4c62c81
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryCommon_JobID.h
+@@ -0,0 +1,361 @@
++
++
++        #ifndef AviaryCommon_JOBID_H
++        #define AviaryCommon_JOBID_H
++
++       /**
++        * JobID.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  JobID class
++        */
++
++        namespace AviaryCommon{
++            class JobID;
++        }
++        
++
++        
++       #include "AviaryCommon_SubmissionID.h"
++          
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryCommon
++{
++        
++        
++
++        class JobID {
++
++        private:
++             std::string property_Job;
++
++                
++                bool isValidJob;
++            std::string property_Pool;
++
++                
++                bool isValidPool;
++            std::string property_Scheduler;
++
++                
++                bool isValidScheduler;
++            AviaryCommon::SubmissionID* property_Submission;
++
++                
++                bool isValidSubmission;
++            
++
++        /*** Private methods ***/
++          
++
++        bool WSF_CALL
++        setJobNil();
++            
++
++        bool WSF_CALL
++        setPoolNil();
++            
++
++        bool WSF_CALL
++        setSchedulerNil();
++            
++
++        bool WSF_CALL
++        setSubmissionNil();
++            
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class JobID
++         */
++
++        JobID();
++
++        /**
++         * Destructor JobID
++         */
++        ~JobID();
++
++
++       
++
++        /**
++         * Constructor for creating JobID
++         * @param 
++         * @param Job std::string
++         * @param Pool std::string
++         * @param Scheduler std::string
++         * @param Submission AviaryCommon::SubmissionID*
++         * @return newly created JobID object
++         */
++        JobID(std::string arg_Job,std::string arg_Pool,std::string arg_Scheduler,AviaryCommon::SubmissionID* arg_Submission);
++        
++        
++        /********************************** Class get set methods **************************************/
++        
++        
++
++        /**
++         * Getter for job. 
++         * @return std::string*
++         */
++        WSF_EXTERN std::string WSF_CALL
++        getJob();
++
++        /**
++         * Setter for job.
++         * @param arg_Job std::string*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setJob(const std::string  arg_Job);
++
++        /**
++         * Re setter for job
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetJob();
++        
++        
++
++        /**
++         * Getter for pool. 
++         * @return std::string*
++         */
++        WSF_EXTERN std::string WSF_CALL
++        getPool();
++
++        /**
++         * Setter for pool.
++         * @param arg_Pool std::string*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setPool(const std::string  arg_Pool);
++
++        /**
++         * Re setter for pool
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetPool();
++        
++        
++
++        /**
++         * Getter for scheduler. 
++         * @return std::string*
++         */
++        WSF_EXTERN std::string WSF_CALL
++        getScheduler();
++
++        /**
++         * Setter for scheduler.
++         * @param arg_Scheduler std::string*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setScheduler(const std::string  arg_Scheduler);
++
++        /**
++         * Re setter for scheduler
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetScheduler();
++        
++        
++
++        /**
++         * Getter for submission. 
++         * @return AviaryCommon::SubmissionID*
++         */
++        WSF_EXTERN AviaryCommon::SubmissionID* WSF_CALL
++        getSubmission();
++
++        /**
++         * Setter for submission.
++         * @param arg_Submission AviaryCommon::SubmissionID*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setSubmission(AviaryCommon::SubmissionID*  arg_Submission);
++
++        /**
++         * Re setter for submission
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetSubmission();
++        
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether job is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isJobNil();
++
++
++        
++
++        /**
++         * Check whether pool is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isPoolNil();
++
++
++        
++
++        /**
++         * Check whether scheduler is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isSchedulerNil();
++
++
++        
++
++        /**
++         * Check whether submission is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isSubmissionNil();
++
++
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param JobID_om_node node to serialize from
++         * @param JobID_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* JobID_om_node, axiom_element_t *JobID_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the JobID is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for job by property number (1)
++         * @return std::string
++         */
++
++        std::string WSF_CALL
++        getProperty1();
++
++    
++        
++
++        /**
++         * Getter for pool by property number (2)
++         * @return std::string
++         */
++
++        std::string WSF_CALL
++        getProperty2();
++
++    
++        
++
++        /**
++         * Getter for scheduler by property number (3)
++         * @return std::string
++         */
++
++        std::string WSF_CALL
++        getProperty3();
++
++    
++        
++
++        /**
++         * Getter for submission by property number (4)
++         * @return AviaryCommon::SubmissionID
++         */
++
++        AviaryCommon::SubmissionID* WSF_CALL
++        getProperty4();
++
++    
++
++};
++
++}        
++ #endif /* JOBID_H */
++    
++
+diff --git a/src/condor_contrib/aviary/include/AviaryCommon_JobStatus.h b/src/condor_contrib/aviary/include/AviaryCommon_JobStatus.h
+new file mode 100644
+index 0000000..999d200
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryCommon_JobStatus.h
+@@ -0,0 +1,311 @@
++
++
++        #ifndef AviaryCommon_JOBSTATUS_H
++        #define AviaryCommon_JOBSTATUS_H
++
++       /**
++        * JobStatus.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  JobStatus class
++        */
++
++        namespace AviaryCommon{
++            class JobStatus;
++        }
++        
++
++        
++       #include "AviaryCommon_JobID.h"
++          
++       #include "AviaryCommon_Status.h"
++          
++       #include "AviaryCommon_JobStatusType.h"
++          
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryCommon
++{
++        
++        
++
++        class JobStatus {
++
++        private:
++             AviaryCommon::JobID* property_Id;
++
++                
++                bool isValidId;
++            AviaryCommon::Status* property_Status;
++
++                
++                bool isValidStatus;
++            AviaryCommon::JobStatusType* property_Job_status;
++
++                
++                bool isValidJob_status;
++            
++
++        /*** Private methods ***/
++          
++
++        bool WSF_CALL
++        setIdNil();
++            
++
++        bool WSF_CALL
++        setStatusNil();
++            
++
++        bool WSF_CALL
++        setJob_statusNil();
++            
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class JobStatus
++         */
++
++        JobStatus();
++
++        /**
++         * Destructor JobStatus
++         */
++        ~JobStatus();
++
++
++       
++
++        /**
++         * Constructor for creating JobStatus
++         * @param 
++         * @param Id AviaryCommon::JobID*
++         * @param Status AviaryCommon::Status*
++         * @param Job_status AviaryCommon::JobStatusType*
++         * @return newly created JobStatus object
++         */
++        JobStatus(AviaryCommon::JobID* arg_Id,AviaryCommon::Status* arg_Status,AviaryCommon::JobStatusType* arg_Job_status);
++        
++        
++        /********************************** Class get set methods **************************************/
++        
++        
++
++        /**
++         * Getter for id. 
++         * @return AviaryCommon::JobID*
++         */
++        WSF_EXTERN AviaryCommon::JobID* WSF_CALL
++        getId();
++
++        /**
++         * Setter for id.
++         * @param arg_Id AviaryCommon::JobID*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setId(AviaryCommon::JobID*  arg_Id);
++
++        /**
++         * Re setter for id
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetId();
++        
++        
++
++        /**
++         * Getter for status. 
++         * @return AviaryCommon::Status*
++         */
++        WSF_EXTERN AviaryCommon::Status* WSF_CALL
++        getStatus();
++
++        /**
++         * Setter for status.
++         * @param arg_Status AviaryCommon::Status*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setStatus(AviaryCommon::Status*  arg_Status);
++
++        /**
++         * Re setter for status
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetStatus();
++        
++        
++
++        /**
++         * Getter for job_status. 
++         * @return AviaryCommon::JobStatusType*
++         */
++        WSF_EXTERN AviaryCommon::JobStatusType* WSF_CALL
++        getJob_status();
++
++        /**
++         * Setter for job_status.
++         * @param arg_Job_status AviaryCommon::JobStatusType*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setJob_status(AviaryCommon::JobStatusType*  arg_Job_status);
++
++        /**
++         * Re setter for job_status
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetJob_status();
++        
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether id is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isIdNil();
++
++
++        
++
++        /**
++         * Check whether status is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isStatusNil();
++
++
++        
++
++        /**
++         * Check whether job_status is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isJob_statusNil();
++
++
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param JobStatus_om_node node to serialize from
++         * @param JobStatus_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* JobStatus_om_node, axiom_element_t *JobStatus_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the JobStatus is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for id by property number (1)
++         * @return AviaryCommon::JobID
++         */
++
++        AviaryCommon::JobID* WSF_CALL
++        getProperty1();
++
++    
++        
++
++        /**
++         * Getter for status by property number (2)
++         * @return AviaryCommon::Status
++         */
++
++        AviaryCommon::Status* WSF_CALL
++        getProperty2();
++
++    
++        
++
++        /**
++         * Getter for job_status by property number (3)
++         * @return AviaryCommon::JobStatusType
++         */
++
++        AviaryCommon::JobStatusType* WSF_CALL
++        getProperty3();
++
++    
++
++};
++
++}        
++ #endif /* JOBSTATUS_H */
++    
++
+diff --git a/src/condor_contrib/aviary/include/AviaryCommon_JobStatusType.h b/src/condor_contrib/aviary/include/AviaryCommon_JobStatusType.h
+new file mode 100644
+index 0000000..076191a
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryCommon_JobStatusType.h
+@@ -0,0 +1,248 @@
++
++
++        #ifndef AviaryCommon_JOBSTATUSTYPE_H
++        #define AviaryCommon_JOBSTATUSTYPE_H
++
++       /**
++        * JobStatusType.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  JobStatusType class
++        */
++
++        namespace AviaryCommon{
++            class JobStatusType;
++        }
++        
++
++        
++        #include <axutil_qname.h>
++        
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryCommon
++{
++        
++        /* Enumeration for this type */
++        typedef enum {
++            JobStatusType_IDLE,
++            JobStatusType_RUNNING,
++            JobStatusType_REMOVED,
++            JobStatusType_COMPLETED,
++            JobStatusType_HELD
++        } ADBJobStatusTypeEnum;
++        
++        
++
++        class JobStatusType {
++
++        private:
++             
++                axutil_qname_t* qname;
++            std::string property_JobStatusType;
++
++                
++                bool isValidJobStatusType;
++            
++
++        /*** Private methods ***/
++          
++
++        bool WSF_CALL
++        setJobStatusTypeNil();
++            
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class JobStatusType
++         */
++
++        JobStatusType();
++
++        /**
++         * Destructor JobStatusType
++         */
++        ~JobStatusType();
++
++
++       
++
++        /**
++         * Constructor for creating JobStatusType
++         * @param 
++         * @param JobStatusType std::string
++         * @return newly created JobStatusType object
++         */
++        JobStatusType(std::string arg_JobStatusType);
++        
++        
++        /********************************** Class get set methods **************************************/
++        
++        
++
++        /**
++         * Getter for JobStatusType. 
++         * @return std::string*
++         */
++        WSF_EXTERN std::string WSF_CALL
++        getJobStatusType();
++
++        /**
++         * Setter for JobStatusType.
++         * @param arg_JobStatusType std::string*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setJobStatusType(const std::string  arg_JobStatusType);
++
++        /**
++         * Re setter for JobStatusType
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetJobStatusType();
++        
++            
++            /************************** Getters and Setters For Enumerations ********************************/
++            /********************* Enumeration Specific Operations: get_enum, set_enum **********************/
++            
++            /**
++            * Enum getter for JobStatusType.
++            * @return ADBJobStatusTypeEnum; -1 on failure
++            */
++            ADBJobStatusTypeEnum WSF_CALL
++            getJobStatusTypeEnum();
++            
++            /**
++            * Enum setter for JobStatusType.
++            * @param arg_JobStatusType ADBJobStatusTypeEnum
++            * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
++            */
++            bool WSF_CALL
++            setJobStatusTypeEnum(
++            const ADBJobStatusTypeEnum arg_JobStatusType);
++            
++          
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether JobStatusType is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isJobStatusTypeNil();
++
++
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the content from a string to an ADB object
++         * @param node_value to deserialize
++         * @param parent_element The parent element if it is an element, NULL otherwise
++         * @return true on success, false otherwise
++         */
++       bool WSF_CALL
++       deserializeFromString(const axis2_char_t *node_value, axiom_node_t *parent);
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++        /**
++         * Serialize ADB object to a string
++         * @param namespaces hash which contains a mapping of namespace uris to prefixes
++         * @return serialized string
++         */
++         char* WSF_CALL
++         serializeToString(axutil_hash_t *namespaces);
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param JobStatusType_om_node node to serialize from
++         * @param JobStatusType_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* JobStatusType_om_node, axiom_element_t *JobStatusType_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the JobStatusType is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for JobStatusType by property number (1)
++         * @return std::string
++         */
++
++        std::string WSF_CALL
++        getProperty1();
++
++    
++
++};
++
++}        
++ #endif /* JOBSTATUSTYPE_H */
++    
++
+diff --git a/src/condor_contrib/aviary/include/AviaryCommon_JobSummary.h b/src/condor_contrib/aviary/include/AviaryCommon_JobSummary.h
+new file mode 100644
+index 0000000..b6128a6
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryCommon_JobSummary.h
+@@ -0,0 +1,745 @@
++
++
++        #ifndef AviaryCommon_JOBSUMMARY_H
++        #define AviaryCommon_JOBSUMMARY_H
++
++       /**
++        * JobSummary.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  JobSummary class
++        */
++
++        namespace AviaryCommon{
++            class JobSummary;
++        }
++        
++
++        
++       #include "AviaryCommon_JobID.h"
++          
++       #include "AviaryCommon_Status.h"
++          
++       #include "AviaryCommon_JobStatusType.h"
++          
++        #include <axutil_date_time.h>
++          
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryCommon
++{
++        
++        
++
++        class JobSummary {
++
++        private:
++             AviaryCommon::JobID* property_Id;
++
++                
++                bool isValidId;
++            AviaryCommon::Status* property_Status;
++
++                
++                bool isValidStatus;
++            axutil_date_time_t* property_Queued;
++
++                
++                bool isValidQueued;
++            axutil_date_time_t* property_Last_update;
++
++                
++                bool isValidLast_update;
++            AviaryCommon::JobStatusType* property_Job_status;
++
++                
++                bool isValidJob_status;
++            std::string property_Cmd;
++
++                
++                bool isValidCmd;
++            std::string property_Args1;
++
++                
++                bool isValidArgs1;
++            std::string property_Args2;
++
++                
++                bool isValidArgs2;
++            std::string property_Held;
++
++                
++                bool isValidHeld;
++            std::string property_Released;
++
++                
++                bool isValidReleased;
++            std::string property_Removed;
++
++                
++                bool isValidRemoved;
++            
++
++        /*** Private methods ***/
++          
++
++        bool WSF_CALL
++        setIdNil();
++            
++
++        bool WSF_CALL
++        setStatusNil();
++            
++
++        bool WSF_CALL
++        setQueuedNil();
++            
++
++        bool WSF_CALL
++        setLast_updateNil();
++            
++
++        bool WSF_CALL
++        setJob_statusNil();
++            
++
++        bool WSF_CALL
++        setCmdNil();
++            
++
++        bool WSF_CALL
++        setArgs1Nil();
++            
++
++        bool WSF_CALL
++        setArgs2Nil();
++            
++
++        bool WSF_CALL
++        setHeldNil();
++            
++
++        bool WSF_CALL
++        setReleasedNil();
++            
++
++        bool WSF_CALL
++        setRemovedNil();
++            
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class JobSummary
++         */
++
++        JobSummary();
++
++        /**
++         * Destructor JobSummary
++         */
++        ~JobSummary();
++
++
++       
++
++        /**
++         * Constructor for creating JobSummary
++         * @param 
++         * @param Id AviaryCommon::JobID*
++         * @param Status AviaryCommon::Status*
++         * @param Queued axutil_date_time_t*
++         * @param Last_update axutil_date_time_t*
++         * @param Job_status AviaryCommon::JobStatusType*
++         * @param Cmd std::string
++         * @param Args1 std::string
++         * @param Args2 std::string
++         * @param Held std::string
++         * @param Released std::string
++         * @param Removed std::string
++         * @return newly created JobSummary object
++         */
++        JobSummary(AviaryCommon::JobID* arg_Id,AviaryCommon::Status* arg_Status,axutil_date_time_t* arg_Queued,axutil_date_time_t* arg_Last_update,AviaryCommon::JobStatusType* arg_Job_status,std::string arg_Cmd,std::string arg_Args1,std::string arg_Args2,std::string arg_Held,std::string arg_Released,std::string arg_Removed);
++        
++        
++        /********************************** Class get set methods **************************************/
++        
++        
++
++        /**
++         * Getter for id. 
++         * @return AviaryCommon::JobID*
++         */
++        WSF_EXTERN AviaryCommon::JobID* WSF_CALL
++        getId();
++
++        /**
++         * Setter for id.
++         * @param arg_Id AviaryCommon::JobID*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setId(AviaryCommon::JobID*  arg_Id);
++
++        /**
++         * Re setter for id
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetId();
++        
++        
++
++        /**
++         * Getter for status. 
++         * @return AviaryCommon::Status*
++         */
++        WSF_EXTERN AviaryCommon::Status* WSF_CALL
++        getStatus();
++
++        /**
++         * Setter for status.
++         * @param arg_Status AviaryCommon::Status*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setStatus(AviaryCommon::Status*  arg_Status);
++
++        /**
++         * Re setter for status
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetStatus();
++        
++        
++
++        /**
++         * Getter for queued. 
++         * @return axutil_date_time_t*
++         */
++        WSF_EXTERN axutil_date_time_t* WSF_CALL
++        getQueued();
++
++        /**
++         * Setter for queued.
++         * @param arg_Queued axutil_date_time_t*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setQueued(axutil_date_time_t*  arg_Queued);
++
++        /**
++         * Re setter for queued
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetQueued();
++        
++        
++
++        /**
++         * Getter for last_update. 
++         * @return axutil_date_time_t*
++         */
++        WSF_EXTERN axutil_date_time_t* WSF_CALL
++        getLast_update();
++
++        /**
++         * Setter for last_update.
++         * @param arg_Last_update axutil_date_time_t*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setLast_update(axutil_date_time_t*  arg_Last_update);
++
++        /**
++         * Re setter for last_update
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetLast_update();
++        
++        
++
++        /**
++         * Getter for job_status. 
++         * @return AviaryCommon::JobStatusType*
++         */
++        WSF_EXTERN AviaryCommon::JobStatusType* WSF_CALL
++        getJob_status();
++
++        /**
++         * Setter for job_status.
++         * @param arg_Job_status AviaryCommon::JobStatusType*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setJob_status(AviaryCommon::JobStatusType*  arg_Job_status);
++
++        /**
++         * Re setter for job_status
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetJob_status();
++        
++        
++
++        /**
++         * Getter for cmd. 
++         * @return std::string*
++         */
++        WSF_EXTERN std::string WSF_CALL
++        getCmd();
++
++        /**
++         * Setter for cmd.
++         * @param arg_Cmd std::string*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setCmd(const std::string  arg_Cmd);
++
++        /**
++         * Re setter for cmd
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetCmd();
++        
++        
++
++        /**
++         * Getter for args1. 
++         * @return std::string*
++         */
++        WSF_EXTERN std::string WSF_CALL
++        getArgs1();
++
++        /**
++         * Setter for args1.
++         * @param arg_Args1 std::string*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setArgs1(const std::string  arg_Args1);
++
++        /**
++         * Re setter for args1
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetArgs1();
++        
++        
++
++        /**
++         * Getter for args2. 
++         * @return std::string*
++         */
++        WSF_EXTERN std::string WSF_CALL
++        getArgs2();
++
++        /**
++         * Setter for args2.
++         * @param arg_Args2 std::string*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setArgs2(const std::string  arg_Args2);
++
++        /**
++         * Re setter for args2
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetArgs2();
++        
++        
++
++        /**
++         * Getter for held. 
++         * @return std::string*
++         */
++        WSF_EXTERN std::string WSF_CALL
++        getHeld();
++
++        /**
++         * Setter for held.
++         * @param arg_Held std::string*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setHeld(const std::string  arg_Held);
++
++        /**
++         * Re setter for held
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetHeld();
++        
++        
++
++        /**
++         * Getter for released. 
++         * @return std::string*
++         */
++        WSF_EXTERN std::string WSF_CALL
++        getReleased();
++
++        /**
++         * Setter for released.
++         * @param arg_Released std::string*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setReleased(const std::string  arg_Released);
++
++        /**
++         * Re setter for released
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetReleased();
++        
++        
++
++        /**
++         * Getter for removed. 
++         * @return std::string*
++         */
++        WSF_EXTERN std::string WSF_CALL
++        getRemoved();
++
++        /**
++         * Setter for removed.
++         * @param arg_Removed std::string*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setRemoved(const std::string  arg_Removed);
++
++        /**
++         * Re setter for removed
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetRemoved();
++        
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether id is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isIdNil();
++
++
++        
++
++        /**
++         * Check whether status is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isStatusNil();
++
++
++        
++
++        /**
++         * Check whether queued is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isQueuedNil();
++
++
++        
++
++        /**
++         * Check whether last_update is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isLast_updateNil();
++
++
++        
++
++        /**
++         * Check whether job_status is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isJob_statusNil();
++
++
++        
++
++        /**
++         * Check whether cmd is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isCmdNil();
++
++
++        
++
++        /**
++         * Check whether args1 is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isArgs1Nil();
++
++
++        
++
++        /**
++         * Check whether args2 is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isArgs2Nil();
++
++
++        
++
++        /**
++         * Check whether held is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isHeldNil();
++
++
++        
++
++        /**
++         * Check whether released is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isReleasedNil();
++
++
++        
++
++        /**
++         * Check whether removed is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isRemovedNil();
++
++
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param JobSummary_om_node node to serialize from
++         * @param JobSummary_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* JobSummary_om_node, axiom_element_t *JobSummary_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the JobSummary is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for id by property number (1)
++         * @return AviaryCommon::JobID
++         */
++
++        AviaryCommon::JobID* WSF_CALL
++        getProperty1();
++
++    
++        
++
++        /**
++         * Getter for status by property number (2)
++         * @return AviaryCommon::Status
++         */
++
++        AviaryCommon::Status* WSF_CALL
++        getProperty2();
++
++    
++        
++
++        /**
++         * Getter for queued by property number (3)
++         * @return axutil_date_time_t*
++         */
++
++        axutil_date_time_t* WSF_CALL
++        getProperty3();
++
++    
++        
++
++        /**
++         * Getter for last_update by property number (4)
++         * @return axutil_date_time_t*
++         */
++
++        axutil_date_time_t* WSF_CALL
++        getProperty4();
++
++    
++        
++
++        /**
++         * Getter for job_status by property number (5)
++         * @return AviaryCommon::JobStatusType
++         */
++
++        AviaryCommon::JobStatusType* WSF_CALL
++        getProperty5();
++
++    
++        
++
++        /**
++         * Getter for cmd by property number (6)
++         * @return std::string
++         */
++
++        std::string WSF_CALL
++        getProperty6();
++
++    
++        
++
++        /**
++         * Getter for args1 by property number (7)
++         * @return std::string
++         */
++
++        std::string WSF_CALL
++        getProperty7();
++
++    
++        
++
++        /**
++         * Getter for args2 by property number (8)
++         * @return std::string
++         */
++
++        std::string WSF_CALL
++        getProperty8();
++
++    
++        
++
++        /**
++         * Getter for held by property number (9)
++         * @return std::string
++         */
++
++        std::string WSF_CALL
++        getProperty9();
++
++    
++        
++
++        /**
++         * Getter for released by property number (10)
++         * @return std::string
++         */
++
++        std::string WSF_CALL
++        getProperty10();
++
++    
++        
++
++        /**
++         * Getter for removed by property number (11)
++         * @return std::string
++         */
++
++        std::string WSF_CALL
++        getProperty11();
++
++    
++
++};
++
++}        
++ #endif /* JOBSUMMARY_H */
++    
++
+diff --git a/src/condor_contrib/aviary/include/AviaryCommon_OSType.h b/src/condor_contrib/aviary/include/AviaryCommon_OSType.h
+new file mode 100644
+index 0000000..3322a71
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryCommon_OSType.h
+@@ -0,0 +1,245 @@
++
++
++        #ifndef AviaryCommon_OSTYPE_H
++        #define AviaryCommon_OSTYPE_H
++
++       /**
++        * OSType.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  OSType class
++        */
++
++        namespace AviaryCommon{
++            class OSType;
++        }
++        
++
++        
++        #include <axutil_qname.h>
++        
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryCommon
++{
++        
++        /* Enumeration for this type */
++        typedef enum {
++            OSType_LINUX,
++            OSType_WINDOWS
++        } ADBOSTypeEnum;
++        
++        
++
++        class OSType {
++
++        private:
++             
++                axutil_qname_t* qname;
++            std::string property_OSType;
++
++                
++                bool isValidOSType;
++            
++
++        /*** Private methods ***/
++          
++
++        bool WSF_CALL
++        setOSTypeNil();
++            
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class OSType
++         */
++
++        OSType();
++
++        /**
++         * Destructor OSType
++         */
++        ~OSType();
++
++
++       
++
++        /**
++         * Constructor for creating OSType
++         * @param 
++         * @param OSType std::string
++         * @return newly created OSType object
++         */
++        OSType(std::string arg_OSType);
++        
++        
++        /********************************** Class get set methods **************************************/
++        
++        
++
++        /**
++         * Getter for OSType. 
++         * @return std::string*
++         */
++        WSF_EXTERN std::string WSF_CALL
++        getOSType();
++
++        /**
++         * Setter for OSType.
++         * @param arg_OSType std::string*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setOSType(const std::string  arg_OSType);
++
++        /**
++         * Re setter for OSType
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetOSType();
++        
++            
++            /************************** Getters and Setters For Enumerations ********************************/
++            /********************* Enumeration Specific Operations: get_enum, set_enum **********************/
++            
++            /**
++            * Enum getter for OSType.
++            * @return ADBOSTypeEnum; -1 on failure
++            */
++            ADBOSTypeEnum WSF_CALL
++            getOSTypeEnum();
++            
++            /**
++            * Enum setter for OSType.
++            * @param arg_OSType ADBOSTypeEnum
++            * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
++            */
++            bool WSF_CALL
++            setOSTypeEnum(
++            const ADBOSTypeEnum arg_OSType);
++            
++          
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether OSType is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isOSTypeNil();
++
++
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the content from a string to an ADB object
++         * @param node_value to deserialize
++         * @param parent_element The parent element if it is an element, NULL otherwise
++         * @return true on success, false otherwise
++         */
++       bool WSF_CALL
++       deserializeFromString(const axis2_char_t *node_value, axiom_node_t *parent);
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++        /**
++         * Serialize ADB object to a string
++         * @param namespaces hash which contains a mapping of namespace uris to prefixes
++         * @return serialized string
++         */
++         char* WSF_CALL
++         serializeToString(axutil_hash_t *namespaces);
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param OSType_om_node node to serialize from
++         * @param OSType_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* OSType_om_node, axiom_element_t *OSType_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the OSType is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for OSType by property number (1)
++         * @return std::string
++         */
++
++        std::string WSF_CALL
++        getProperty1();
++
++    
++
++};
++
++}        
++ #endif /* OSTYPE_H */
++    
++
+diff --git a/src/condor_contrib/aviary/include/AviaryCommon_ResourceConstraint.h b/src/condor_contrib/aviary/include/AviaryCommon_ResourceConstraint.h
+new file mode 100644
+index 0000000..12557d8
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryCommon_ResourceConstraint.h
+@@ -0,0 +1,253 @@
++
++
++        #ifndef AviaryCommon_RESOURCECONSTRAINT_H
++        #define AviaryCommon_RESOURCECONSTRAINT_H
++
++       /**
++        * ResourceConstraint.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  ResourceConstraint class
++        */
++
++        namespace AviaryCommon{
++            class ResourceConstraint;
++        }
++        
++
++        
++       #include "AviaryCommon_ResourceConstraintType.h"
++          
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryCommon
++{
++        
++        
++
++        class ResourceConstraint {
++
++        private:
++             AviaryCommon::ResourceConstraintType* property_Type;
++
++                
++                bool isValidType;
++            std::string property_Value;
++
++                
++                bool isValidValue;
++            
++
++        /*** Private methods ***/
++          
++
++        bool WSF_CALL
++        setTypeNil();
++            
++
++        bool WSF_CALL
++        setValueNil();
++            
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class ResourceConstraint
++         */
++
++        ResourceConstraint();
++
++        /**
++         * Destructor ResourceConstraint
++         */
++        ~ResourceConstraint();
++
++
++       
++
++        /**
++         * Constructor for creating ResourceConstraint
++         * @param 
++         * @param Type AviaryCommon::ResourceConstraintType*
++         * @param Value std::string
++         * @return newly created ResourceConstraint object
++         */
++        ResourceConstraint(AviaryCommon::ResourceConstraintType* arg_Type,std::string arg_Value);
++        
++        
++        /********************************** Class get set methods **************************************/
++        
++        
++
++        /**
++         * Getter for type. 
++         * @return AviaryCommon::ResourceConstraintType*
++         */
++        WSF_EXTERN AviaryCommon::ResourceConstraintType* WSF_CALL
++        getType();
++
++        /**
++         * Setter for type.
++         * @param arg_Type AviaryCommon::ResourceConstraintType*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setType(AviaryCommon::ResourceConstraintType*  arg_Type);
++
++        /**
++         * Re setter for type
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetType();
++        
++        
++
++        /**
++         * Getter for value. 
++         * @return std::string*
++         */
++        WSF_EXTERN std::string WSF_CALL
++        getValue();
++
++        /**
++         * Setter for value.
++         * @param arg_Value std::string*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setValue(const std::string  arg_Value);
++
++        /**
++         * Re setter for value
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetValue();
++        
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether type is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isTypeNil();
++
++
++        
++
++        /**
++         * Check whether value is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isValueNil();
++
++
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param ResourceConstraint_om_node node to serialize from
++         * @param ResourceConstraint_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* ResourceConstraint_om_node, axiom_element_t *ResourceConstraint_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the ResourceConstraint is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for type by property number (1)
++         * @return AviaryCommon::ResourceConstraintType
++         */
++
++        AviaryCommon::ResourceConstraintType* WSF_CALL
++        getProperty1();
++
++    
++        
++
++        /**
++         * Getter for value by property number (2)
++         * @return std::string
++         */
++
++        std::string WSF_CALL
++        getProperty2();
++
++    
++
++};
++
++}        
++ #endif /* RESOURCECONSTRAINT_H */
++    
++
+diff --git a/src/condor_contrib/aviary/include/AviaryCommon_ResourceConstraintType.h b/src/condor_contrib/aviary/include/AviaryCommon_ResourceConstraintType.h
+new file mode 100644
+index 0000000..1b90eb1
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryCommon_ResourceConstraintType.h
+@@ -0,0 +1,248 @@
++
++
++        #ifndef AviaryCommon_RESOURCECONSTRAINTTYPE_H
++        #define AviaryCommon_RESOURCECONSTRAINTTYPE_H
++
++       /**
++        * ResourceConstraintType.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  ResourceConstraintType class
++        */
++
++        namespace AviaryCommon{
++            class ResourceConstraintType;
++        }
++        
++
++        
++        #include <axutil_qname.h>
++        
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryCommon
++{
++        
++        /* Enumeration for this type */
++        typedef enum {
++            ResourceConstraintType_OS,
++            ResourceConstraintType_ARCH,
++            ResourceConstraintType_MEMORY,
++            ResourceConstraintType_DISK,
++            ResourceConstraintType_FILESYSTEM
++        } ADBResourceConstraintTypeEnum;
++        
++        
++
++        class ResourceConstraintType {
++
++        private:
++             
++                axutil_qname_t* qname;
++            std::string property_ResourceConstraintType;
++
++                
++                bool isValidResourceConstraintType;
++            
++
++        /*** Private methods ***/
++          
++
++        bool WSF_CALL
++        setResourceConstraintTypeNil();
++            
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class ResourceConstraintType
++         */
++
++        ResourceConstraintType();
++
++        /**
++         * Destructor ResourceConstraintType
++         */
++        ~ResourceConstraintType();
++
++
++       
++
++        /**
++         * Constructor for creating ResourceConstraintType
++         * @param 
++         * @param ResourceConstraintType std::string
++         * @return newly created ResourceConstraintType object
++         */
++        ResourceConstraintType(std::string arg_ResourceConstraintType);
++        
++        
++        /********************************** Class get set methods **************************************/
++        
++        
++
++        /**
++         * Getter for ResourceConstraintType. 
++         * @return std::string*
++         */
++        WSF_EXTERN std::string WSF_CALL
++        getResourceConstraintType();
++
++        /**
++         * Setter for ResourceConstraintType.
++         * @param arg_ResourceConstraintType std::string*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setResourceConstraintType(const std::string  arg_ResourceConstraintType);
++
++        /**
++         * Re setter for ResourceConstraintType
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetResourceConstraintType();
++        
++            
++            /************************** Getters and Setters For Enumerations ********************************/
++            /********************* Enumeration Specific Operations: get_enum, set_enum **********************/
++            
++            /**
++            * Enum getter for ResourceConstraintType.
++            * @return ADBResourceConstraintTypeEnum; -1 on failure
++            */
++            ADBResourceConstraintTypeEnum WSF_CALL
++            getResourceConstraintTypeEnum();
++            
++            /**
++            * Enum setter for ResourceConstraintType.
++            * @param arg_ResourceConstraintType ADBResourceConstraintTypeEnum
++            * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
++            */
++            bool WSF_CALL
++            setResourceConstraintTypeEnum(
++            const ADBResourceConstraintTypeEnum arg_ResourceConstraintType);
++            
++          
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether ResourceConstraintType is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isResourceConstraintTypeNil();
++
++
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the content from a string to an ADB object
++         * @param node_value to deserialize
++         * @param parent_element The parent element if it is an element, NULL otherwise
++         * @return true on success, false otherwise
++         */
++       bool WSF_CALL
++       deserializeFromString(const axis2_char_t *node_value, axiom_node_t *parent);
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++        /**
++         * Serialize ADB object to a string
++         * @param namespaces hash which contains a mapping of namespace uris to prefixes
++         * @return serialized string
++         */
++         char* WSF_CALL
++         serializeToString(axutil_hash_t *namespaces);
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param ResourceConstraintType_om_node node to serialize from
++         * @param ResourceConstraintType_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* ResourceConstraintType_om_node, axiom_element_t *ResourceConstraintType_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the ResourceConstraintType is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for ResourceConstraintType by property number (1)
++         * @return std::string
++         */
++
++        std::string WSF_CALL
++        getProperty1();
++
++    
++
++};
++
++}        
++ #endif /* RESOURCECONSTRAINTTYPE_H */
++    
++
+diff --git a/src/condor_contrib/aviary/include/AviaryCommon_ResourceID.h b/src/condor_contrib/aviary/include/AviaryCommon_ResourceID.h
+new file mode 100644
+index 0000000..c900d7b
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryCommon_ResourceID.h
+@@ -0,0 +1,361 @@
++
++
++        #ifndef AviaryCommon_RESOURCEID_H
++        #define AviaryCommon_RESOURCEID_H
++
++       /**
++        * ResourceID.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  ResourceID class
++        */
++
++        namespace AviaryCommon{
++            class ResourceID;
++        }
++        
++
++        
++       #include "AviaryCommon_ResourceType.h"
++          
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryCommon
++{
++        
++        
++
++        class ResourceID {
++
++        private:
++             AviaryCommon::ResourceType* property_Subsystem_type;
++
++                
++                bool isValidSubsystem_type;
++            std::string property_Pool;
++
++                
++                bool isValidPool;
++            std::string property_Name;
++
++                
++                bool isValidName;
++            std::string property_Custom_name;
++
++                
++                bool isValidCustom_name;
++            
++
++        /*** Private methods ***/
++          
++
++        bool WSF_CALL
++        setSubsystem_typeNil();
++            
++
++        bool WSF_CALL
++        setPoolNil();
++            
++
++        bool WSF_CALL
++        setNameNil();
++            
++
++        bool WSF_CALL
++        setCustom_nameNil();
++            
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class ResourceID
++         */
++
++        ResourceID();
++
++        /**
++         * Destructor ResourceID
++         */
++        ~ResourceID();
++
++
++       
++
++        /**
++         * Constructor for creating ResourceID
++         * @param 
++         * @param Subsystem_type AviaryCommon::ResourceType*
++         * @param Pool std::string
++         * @param Name std::string
++         * @param Custom_name std::string
++         * @return newly created ResourceID object
++         */
++        ResourceID(AviaryCommon::ResourceType* arg_Subsystem_type,std::string arg_Pool,std::string arg_Name,std::string arg_Custom_name);
++        
++        
++        /********************************** Class get set methods **************************************/
++        
++        
++
++        /**
++         * Getter for subsystem_type. 
++         * @return AviaryCommon::ResourceType*
++         */
++        WSF_EXTERN AviaryCommon::ResourceType* WSF_CALL
++        getSubsystem_type();
++
++        /**
++         * Setter for subsystem_type.
++         * @param arg_Subsystem_type AviaryCommon::ResourceType*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setSubsystem_type(AviaryCommon::ResourceType*  arg_Subsystem_type);
++
++        /**
++         * Re setter for subsystem_type
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetSubsystem_type();
++        
++        
++
++        /**
++         * Getter for pool. 
++         * @return std::string*
++         */
++        WSF_EXTERN std::string WSF_CALL
++        getPool();
++
++        /**
++         * Setter for pool.
++         * @param arg_Pool std::string*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setPool(const std::string  arg_Pool);
++
++        /**
++         * Re setter for pool
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetPool();
++        
++        
++
++        /**
++         * Getter for name. 
++         * @return std::string*
++         */
++        WSF_EXTERN std::string WSF_CALL
++        getName();
++
++        /**
++         * Setter for name.
++         * @param arg_Name std::string*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setName(const std::string  arg_Name);
++
++        /**
++         * Re setter for name
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetName();
++        
++        
++
++        /**
++         * Getter for custom_name. 
++         * @return std::string*
++         */
++        WSF_EXTERN std::string WSF_CALL
++        getCustom_name();
++
++        /**
++         * Setter for custom_name.
++         * @param arg_Custom_name std::string*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setCustom_name(const std::string  arg_Custom_name);
++
++        /**
++         * Re setter for custom_name
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetCustom_name();
++        
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether subsystem_type is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isSubsystem_typeNil();
++
++
++        
++
++        /**
++         * Check whether pool is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isPoolNil();
++
++
++        
++
++        /**
++         * Check whether name is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isNameNil();
++
++
++        
++
++        /**
++         * Check whether custom_name is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isCustom_nameNil();
++
++
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param ResourceID_om_node node to serialize from
++         * @param ResourceID_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* ResourceID_om_node, axiom_element_t *ResourceID_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the ResourceID is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for subsystem_type by property number (1)
++         * @return AviaryCommon::ResourceType
++         */
++
++        AviaryCommon::ResourceType* WSF_CALL
++        getProperty1();
++
++    
++        
++
++        /**
++         * Getter for pool by property number (2)
++         * @return std::string
++         */
++
++        std::string WSF_CALL
++        getProperty2();
++
++    
++        
++
++        /**
++         * Getter for name by property number (3)
++         * @return std::string
++         */
++
++        std::string WSF_CALL
++        getProperty3();
++
++    
++        
++
++        /**
++         * Getter for custom_name by property number (4)
++         * @return std::string
++         */
++
++        std::string WSF_CALL
++        getProperty4();
++
++    
++
++};
++
++}        
++ #endif /* RESOURCEID_H */
++    
++
+diff --git a/src/condor_contrib/aviary/include/AviaryCommon_ResourceType.h b/src/condor_contrib/aviary/include/AviaryCommon_ResourceType.h
+new file mode 100644
+index 0000000..dd42777
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryCommon_ResourceType.h
+@@ -0,0 +1,252 @@
++
++
++        #ifndef AviaryCommon_RESOURCETYPE_H
++        #define AviaryCommon_RESOURCETYPE_H
++
++       /**
++        * ResourceType.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  ResourceType class
++        */
++
++        namespace AviaryCommon{
++            class ResourceType;
++        }
++        
++
++        
++        #include <axutil_qname.h>
++        
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryCommon
++{
++        
++        /* Enumeration for this type */
++        typedef enum {
++            ResourceType_COLLECTOR,
++            ResourceType_EXECUTOR,
++            ResourceType_EVENT_SERVER,
++            ResourceType_JOB_SERVER,
++            ResourceType_LOW_LATENCY,
++            ResourceType_MASTER,
++            ResourceType_NEGOTIATOR,
++            ResourceType_SCHEDULER,
++            ResourceType_CUSTOM
++        } ADBResourceTypeEnum;
++        
++        
++
++        class ResourceType {
++
++        private:
++             
++                axutil_qname_t* qname;
++            std::string property_ResourceType;
++
++                
++                bool isValidResourceType;
++            
++
++        /*** Private methods ***/
++          
++
++        bool WSF_CALL
++        setResourceTypeNil();
++            
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class ResourceType
++         */
++
++        ResourceType();
++
++        /**
++         * Destructor ResourceType
++         */
++        ~ResourceType();
++
++
++       
++
++        /**
++         * Constructor for creating ResourceType
++         * @param 
++         * @param ResourceType std::string
++         * @return newly created ResourceType object
++         */
++        ResourceType(std::string arg_ResourceType);
++        
++        
++        /********************************** Class get set methods **************************************/
++        
++        
++
++        /**
++         * Getter for ResourceType. 
++         * @return std::string*
++         */
++        WSF_EXTERN std::string WSF_CALL
++        getResourceType();
++
++        /**
++         * Setter for ResourceType.
++         * @param arg_ResourceType std::string*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setResourceType(const std::string  arg_ResourceType);
++
++        /**
++         * Re setter for ResourceType
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetResourceType();
++        
++            
++            /************************** Getters and Setters For Enumerations ********************************/
++            /********************* Enumeration Specific Operations: get_enum, set_enum **********************/
++            
++            /**
++            * Enum getter for ResourceType.
++            * @return ADBResourceTypeEnum; -1 on failure
++            */
++            ADBResourceTypeEnum WSF_CALL
++            getResourceTypeEnum();
++            
++            /**
++            * Enum setter for ResourceType.
++            * @param arg_ResourceType ADBResourceTypeEnum
++            * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
++            */
++            bool WSF_CALL
++            setResourceTypeEnum(
++            const ADBResourceTypeEnum arg_ResourceType);
++            
++          
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether ResourceType is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isResourceTypeNil();
++
++
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the content from a string to an ADB object
++         * @param node_value to deserialize
++         * @param parent_element The parent element if it is an element, NULL otherwise
++         * @return true on success, false otherwise
++         */
++       bool WSF_CALL
++       deserializeFromString(const axis2_char_t *node_value, axiom_node_t *parent);
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++        /**
++         * Serialize ADB object to a string
++         * @param namespaces hash which contains a mapping of namespace uris to prefixes
++         * @return serialized string
++         */
++         char* WSF_CALL
++         serializeToString(axutil_hash_t *namespaces);
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param ResourceType_om_node node to serialize from
++         * @param ResourceType_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* ResourceType_om_node, axiom_element_t *ResourceType_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the ResourceType is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for ResourceType by property number (1)
++         * @return std::string
++         */
++
++        std::string WSF_CALL
++        getProperty1();
++
++    
++
++};
++
++}        
++ #endif /* RESOURCETYPE_H */
++    
++
+diff --git a/src/condor_contrib/aviary/include/AviaryCommon_Status.h b/src/condor_contrib/aviary/include/AviaryCommon_Status.h
+new file mode 100644
+index 0000000..6c72d49
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryCommon_Status.h
+@@ -0,0 +1,253 @@
++
++
++        #ifndef AviaryCommon_STATUS_H
++        #define AviaryCommon_STATUS_H
++
++       /**
++        * Status.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  Status class
++        */
++
++        namespace AviaryCommon{
++            class Status;
++        }
++        
++
++        
++       #include "AviaryCommon_StatusCodeType.h"
++          
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryCommon
++{
++        
++        
++
++        class Status {
++
++        private:
++             AviaryCommon::StatusCodeType* property_Code;
++
++                
++                bool isValidCode;
++            std::string property_Text;
++
++                
++                bool isValidText;
++            
++
++        /*** Private methods ***/
++          
++
++        bool WSF_CALL
++        setCodeNil();
++            
++
++        bool WSF_CALL
++        setTextNil();
++            
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class Status
++         */
++
++        Status();
++
++        /**
++         * Destructor Status
++         */
++        ~Status();
++
++
++       
++
++        /**
++         * Constructor for creating Status
++         * @param 
++         * @param Code AviaryCommon::StatusCodeType*
++         * @param Text std::string
++         * @return newly created Status object
++         */
++        Status(AviaryCommon::StatusCodeType* arg_Code,std::string arg_Text);
++        
++        
++        /********************************** Class get set methods **************************************/
++        
++        
++
++        /**
++         * Getter for code. 
++         * @return AviaryCommon::StatusCodeType*
++         */
++        WSF_EXTERN AviaryCommon::StatusCodeType* WSF_CALL
++        getCode();
++
++        /**
++         * Setter for code.
++         * @param arg_Code AviaryCommon::StatusCodeType*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setCode(AviaryCommon::StatusCodeType*  arg_Code);
++
++        /**
++         * Re setter for code
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetCode();
++        
++        
++
++        /**
++         * Getter for text. 
++         * @return std::string*
++         */
++        WSF_EXTERN std::string WSF_CALL
++        getText();
++
++        /**
++         * Setter for text.
++         * @param arg_Text std::string*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setText(const std::string  arg_Text);
++
++        /**
++         * Re setter for text
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetText();
++        
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether code is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isCodeNil();
++
++
++        
++
++        /**
++         * Check whether text is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isTextNil();
++
++
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param Status_om_node node to serialize from
++         * @param Status_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* Status_om_node, axiom_element_t *Status_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the Status is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for code by property number (1)
++         * @return AviaryCommon::StatusCodeType
++         */
++
++        AviaryCommon::StatusCodeType* WSF_CALL
++        getProperty1();
++
++    
++        
++
++        /**
++         * Getter for text by property number (2)
++         * @return std::string
++         */
++
++        std::string WSF_CALL
++        getProperty2();
++
++    
++
++};
++
++}        
++ #endif /* STATUS_H */
++    
++
+diff --git a/src/condor_contrib/aviary/include/AviaryCommon_StatusCodeType.h b/src/condor_contrib/aviary/include/AviaryCommon_StatusCodeType.h
+new file mode 100644
+index 0000000..bb71f9b
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryCommon_StatusCodeType.h
+@@ -0,0 +1,249 @@
++
++
++        #ifndef AviaryCommon_STATUSCODETYPE_H
++        #define AviaryCommon_STATUSCODETYPE_H
++
++       /**
++        * StatusCodeType.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  StatusCodeType class
++        */
++
++        namespace AviaryCommon{
++            class StatusCodeType;
++        }
++        
++
++        
++        #include <axutil_qname.h>
++        
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryCommon
++{
++        
++        /* Enumeration for this type */
++        typedef enum {
++            StatusCodeType_OK,
++            StatusCodeType_FAIL,
++            StatusCodeType_NO_MATCH,
++            StatusCodeType_INVALID_OFFSET,
++            StatusCodeType_UNIMPLEMENTED,
++            StatusCodeType_UNAVAILABLE
++        } ADBStatusCodeTypeEnum;
++        
++        
++
++        class StatusCodeType {
++
++        private:
++             
++                axutil_qname_t* qname;
++            std::string property_StatusCodeType;
++
++                
++                bool isValidStatusCodeType;
++            
++
++        /*** Private methods ***/
++          
++
++        bool WSF_CALL
++        setStatusCodeTypeNil();
++            
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class StatusCodeType
++         */
++
++        StatusCodeType();
++
++        /**
++         * Destructor StatusCodeType
++         */
++        ~StatusCodeType();
++
++
++       
++
++        /**
++         * Constructor for creating StatusCodeType
++         * @param 
++         * @param StatusCodeType std::string
++         * @return newly created StatusCodeType object
++         */
++        StatusCodeType(std::string arg_StatusCodeType);
++        
++        
++        /********************************** Class get set methods **************************************/
++        
++        
++
++        /**
++         * Getter for StatusCodeType. 
++         * @return std::string*
++         */
++        WSF_EXTERN std::string WSF_CALL
++        getStatusCodeType();
++
++        /**
++         * Setter for StatusCodeType.
++         * @param arg_StatusCodeType std::string*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setStatusCodeType(const std::string  arg_StatusCodeType);
++
++        /**
++         * Re setter for StatusCodeType
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetStatusCodeType();
++        
++            
++            /************************** Getters and Setters For Enumerations ********************************/
++            /********************* Enumeration Specific Operations: get_enum, set_enum **********************/
++            
++            /**
++            * Enum getter for StatusCodeType.
++            * @return ADBStatusCodeTypeEnum; -1 on failure
++            */
++            ADBStatusCodeTypeEnum WSF_CALL
++            getStatusCodeTypeEnum();
++            
++            /**
++            * Enum setter for StatusCodeType.
++            * @param arg_StatusCodeType ADBStatusCodeTypeEnum
++            * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
++            */
++            bool WSF_CALL
++            setStatusCodeTypeEnum(
++            const ADBStatusCodeTypeEnum arg_StatusCodeType);
++            
++          
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether StatusCodeType is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isStatusCodeTypeNil();
++
++
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the content from a string to an ADB object
++         * @param node_value to deserialize
++         * @param parent_element The parent element if it is an element, NULL otherwise
++         * @return true on success, false otherwise
++         */
++       bool WSF_CALL
++       deserializeFromString(const axis2_char_t *node_value, axiom_node_t *parent);
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++        /**
++         * Serialize ADB object to a string
++         * @param namespaces hash which contains a mapping of namespace uris to prefixes
++         * @return serialized string
++         */
++         char* WSF_CALL
++         serializeToString(axutil_hash_t *namespaces);
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param StatusCodeType_om_node node to serialize from
++         * @param StatusCodeType_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* StatusCodeType_om_node, axiom_element_t *StatusCodeType_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the StatusCodeType is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for StatusCodeType by property number (1)
++         * @return std::string
++         */
++
++        std::string WSF_CALL
++        getProperty1();
++
++    
++
++};
++
++}        
++ #endif /* STATUSCODETYPE_H */
++    
++
+diff --git a/src/condor_contrib/aviary/include/AviaryCommon_SubmissionID.h b/src/condor_contrib/aviary/include/AviaryCommon_SubmissionID.h
+new file mode 100644
+index 0000000..f4abae2
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryCommon_SubmissionID.h
+@@ -0,0 +1,251 @@
++
++
++        #ifndef AviaryCommon_SUBMISSIONID_H
++        #define AviaryCommon_SUBMISSIONID_H
++
++       /**
++        * SubmissionID.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  SubmissionID class
++        */
++
++        namespace AviaryCommon{
++            class SubmissionID;
++        }
++        
++
++        
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryCommon
++{
++        
++        
++
++        class SubmissionID {
++
++        private:
++             std::string property_Name;
++
++                
++                bool isValidName;
++            std::string property_Owner;
++
++                
++                bool isValidOwner;
++            
++
++        /*** Private methods ***/
++          
++
++        bool WSF_CALL
++        setNameNil();
++            
++
++        bool WSF_CALL
++        setOwnerNil();
++            
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class SubmissionID
++         */
++
++        SubmissionID();
++
++        /**
++         * Destructor SubmissionID
++         */
++        ~SubmissionID();
++
++
++       
++
++        /**
++         * Constructor for creating SubmissionID
++         * @param 
++         * @param Name std::string
++         * @param Owner std::string
++         * @return newly created SubmissionID object
++         */
++        SubmissionID(std::string arg_Name,std::string arg_Owner);
++        
++        
++        /********************************** Class get set methods **************************************/
++        
++        
++
++        /**
++         * Getter for name. 
++         * @return std::string*
++         */
++        WSF_EXTERN std::string WSF_CALL
++        getName();
++
++        /**
++         * Setter for name.
++         * @param arg_Name std::string*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setName(const std::string  arg_Name);
++
++        /**
++         * Re setter for name
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetName();
++        
++        
++
++        /**
++         * Getter for owner. 
++         * @return std::string*
++         */
++        WSF_EXTERN std::string WSF_CALL
++        getOwner();
++
++        /**
++         * Setter for owner.
++         * @param arg_Owner std::string*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setOwner(const std::string  arg_Owner);
++
++        /**
++         * Re setter for owner
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetOwner();
++        
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether name is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isNameNil();
++
++
++        
++
++        /**
++         * Check whether owner is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isOwnerNil();
++
++
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param SubmissionID_om_node node to serialize from
++         * @param SubmissionID_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* SubmissionID_om_node, axiom_element_t *SubmissionID_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the SubmissionID is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for name by property number (1)
++         * @return std::string
++         */
++
++        std::string WSF_CALL
++        getProperty1();
++
++    
++        
++
++        /**
++         * Getter for owner by property number (2)
++         * @return std::string
++         */
++
++        std::string WSF_CALL
++        getProperty2();
++
++    
++
++};
++
++}        
++ #endif /* SUBMISSIONID_H */
++    
++
+diff --git a/src/condor_contrib/aviary/include/AviaryCommon_SubmissionSummary.h b/src/condor_contrib/aviary/include/AviaryCommon_SubmissionSummary.h
+new file mode 100644
+index 0000000..f72562e
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryCommon_SubmissionSummary.h
+@@ -0,0 +1,678 @@
++
++
++        #ifndef AviaryCommon_SUBMISSIONSUMMARY_H
++        #define AviaryCommon_SUBMISSIONSUMMARY_H
++
++       /**
++        * SubmissionSummary.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  SubmissionSummary class
++        */
++
++        namespace AviaryCommon{
++            class SubmissionSummary;
++        }
++        
++
++        
++       #include "AviaryCommon_SubmissionID.h"
++          
++       #include "AviaryCommon_Status.h"
++          
++       #include "AviaryCommon_JobSummary.h"
++          
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryCommon
++{
++        
++        
++
++        class SubmissionSummary {
++
++        private:
++             AviaryCommon::SubmissionID* property_Id;
++
++                
++                bool isValidId;
++            AviaryCommon::Status* property_Status;
++
++                
++                bool isValidStatus;
++            int property_Completed;
++
++                
++                bool isValidCompleted;
++            int property_Held;
++
++                
++                bool isValidHeld;
++            int property_Idle;
++
++                
++                bool isValidIdle;
++            int property_Removed;
++
++                
++                bool isValidRemoved;
++            int property_Running;
++
++                
++                bool isValidRunning;
++            std::vector<AviaryCommon::JobSummary*>* property_Jobs;
++
++                
++                bool isValidJobs;
++            
++
++        /*** Private methods ***/
++          
++
++        bool WSF_CALL
++        setIdNil();
++            
++
++        bool WSF_CALL
++        setStatusNil();
++            
++
++        bool WSF_CALL
++        setCompletedNil();
++            
++
++        bool WSF_CALL
++        setHeldNil();
++            
++
++        bool WSF_CALL
++        setIdleNil();
++            
++
++        bool WSF_CALL
++        setRemovedNil();
++            
++
++        bool WSF_CALL
++        setRunningNil();
++            
++
++        bool WSF_CALL
++        setJobsNil();
++            
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class SubmissionSummary
++         */
++
++        SubmissionSummary();
++
++        /**
++         * Destructor SubmissionSummary
++         */
++        ~SubmissionSummary();
++
++
++       
++
++        /**
++         * Constructor for creating SubmissionSummary
++         * @param 
++         * @param Id AviaryCommon::SubmissionID*
++         * @param Status AviaryCommon::Status*
++         * @param Completed int
++         * @param Held int
++         * @param Idle int
++         * @param Removed int
++         * @param Running int
++         * @param Jobs std::vector<AviaryCommon::JobSummary*>*
++         * @return newly created SubmissionSummary object
++         */
++        SubmissionSummary(AviaryCommon::SubmissionID* arg_Id,AviaryCommon::Status* arg_Status,int arg_Completed,int arg_Held,int arg_Idle,int arg_Removed,int arg_Running,std::vector<AviaryCommon::JobSummary*>* arg_Jobs);
++        
++        
++        /********************************** Class get set methods **************************************/
++        /******** Deprecated for array types, Use 'Getters and Setters for Arrays' instead ***********/
++        
++
++        /**
++         * Getter for id. 
++         * @return AviaryCommon::SubmissionID*
++         */
++        WSF_EXTERN AviaryCommon::SubmissionID* WSF_CALL
++        getId();
++
++        /**
++         * Setter for id.
++         * @param arg_Id AviaryCommon::SubmissionID*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setId(AviaryCommon::SubmissionID*  arg_Id);
++
++        /**
++         * Re setter for id
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetId();
++        
++        
++
++        /**
++         * Getter for status. 
++         * @return AviaryCommon::Status*
++         */
++        WSF_EXTERN AviaryCommon::Status* WSF_CALL
++        getStatus();
++
++        /**
++         * Setter for status.
++         * @param arg_Status AviaryCommon::Status*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setStatus(AviaryCommon::Status*  arg_Status);
++
++        /**
++         * Re setter for status
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetStatus();
++        
++        
++
++        /**
++         * Getter for completed. 
++         * @return int*
++         */
++        WSF_EXTERN int WSF_CALL
++        getCompleted();
++
++        /**
++         * Setter for completed.
++         * @param arg_Completed int*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setCompleted(const int  arg_Completed);
++
++        /**
++         * Re setter for completed
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetCompleted();
++        
++        
++
++        /**
++         * Getter for held. 
++         * @return int*
++         */
++        WSF_EXTERN int WSF_CALL
++        getHeld();
++
++        /**
++         * Setter for held.
++         * @param arg_Held int*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setHeld(const int  arg_Held);
++
++        /**
++         * Re setter for held
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetHeld();
++        
++        
++
++        /**
++         * Getter for idle. 
++         * @return int*
++         */
++        WSF_EXTERN int WSF_CALL
++        getIdle();
++
++        /**
++         * Setter for idle.
++         * @param arg_Idle int*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setIdle(const int  arg_Idle);
++
++        /**
++         * Re setter for idle
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetIdle();
++        
++        
++
++        /**
++         * Getter for removed. 
++         * @return int*
++         */
++        WSF_EXTERN int WSF_CALL
++        getRemoved();
++
++        /**
++         * Setter for removed.
++         * @param arg_Removed int*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setRemoved(const int  arg_Removed);
++
++        /**
++         * Re setter for removed
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetRemoved();
++        
++        
++
++        /**
++         * Getter for running. 
++         * @return int*
++         */
++        WSF_EXTERN int WSF_CALL
++        getRunning();
++
++        /**
++         * Setter for running.
++         * @param arg_Running int*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setRunning(const int  arg_Running);
++
++        /**
++         * Re setter for running
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetRunning();
++        
++        
++
++        /**
++         * Getter for jobs. Deprecated for array types, Use getJobsAt instead
++         * @return Array of AviaryCommon::JobSummary*s.
++         */
++        WSF_EXTERN std::vector<AviaryCommon::JobSummary*>* WSF_CALL
++        getJobs();
++
++        /**
++         * Setter for jobs.Deprecated for array types, Use setJobsAt
++         * or addJobs instead.
++         * @param arg_Jobs Array of AviaryCommon::JobSummary*s.
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setJobs(std::vector<AviaryCommon::JobSummary*>*  arg_Jobs);
++
++        /**
++         * Re setter for jobs
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetJobs();
++        
++        /****************************** Get Set methods for Arrays **********************************/
++        /************ Array Specific Operations: get_at, set_at, add, remove_at, sizeof *****************/
++
++        /**
++         * E.g. use of get_at, set_at, add and sizeof
++         *
++         * for(i = 0; i < adb_element->sizeofProperty(); i ++ )
++         * {
++         *     // Getting ith value to property_object variable
++         *     property_object = adb_element->getPropertyAt(i);
++         *
++         *     // Setting ith value from property_object variable
++         *     adb_element->setPropertyAt(i, property_object);
++         *
++         *     // Appending the value to the end of the array from property_object variable
++         *     adb_element->addProperty(property_object);
++         *
++         *     // Removing the ith value from an array
++         *     adb_element->removePropertyAt(i);
++         *     
++         * }
++         *
++         */
++
++        
++        
++        /**
++         * Get the ith element of jobs.
++        * @param i index of the item to be obtained
++         * @return ith AviaryCommon::JobSummary* of the array
++         */
++        WSF_EXTERN AviaryCommon::JobSummary* WSF_CALL
++        getJobsAt(int i);
++
++        /**
++         * Set the ith element of jobs. (If the ith already exist, it will be replaced)
++         * @param i index of the item to return
++         * @param arg_Jobs element to set AviaryCommon::JobSummary* to the array
++         * @return ith AviaryCommon::JobSummary* of the array
++         */
++        WSF_EXTERN bool WSF_CALL
++        setJobsAt(int i,
++                AviaryCommon::JobSummary* arg_Jobs);
++
++
++        /**
++         * Add to jobs.
++         * @param arg_Jobs element to add AviaryCommon::JobSummary* to the array
++         * @return true on success, false otherwise.
++         */
++        WSF_EXTERN bool WSF_CALL
++        addJobs(
++            AviaryCommon::JobSummary* arg_Jobs);
++
++        /**
++         * Get the size of the jobs array.
++         * @return the size of the jobs array.
++         */
++        WSF_EXTERN int WSF_CALL
++        sizeofJobs();
++
++        /**
++         * Remove the ith element of jobs.
++         * @param i index of the item to remove
++         * @return true on success, false otherwise.
++         */
++        WSF_EXTERN bool WSF_CALL
++        removeJobsAt(int i);
++
++        
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        /* Use 'Checking and Setting NIL values for Arrays' to check and set nil for individual elements */
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether id is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isIdNil();
++
++
++        
++
++        /**
++         * Check whether status is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isStatusNil();
++
++
++        
++
++        /**
++         * Check whether completed is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isCompletedNil();
++
++
++        
++
++        /**
++         * Check whether held is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isHeldNil();
++
++
++        
++
++        /**
++         * Check whether idle is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isIdleNil();
++
++
++        
++
++        /**
++         * Check whether removed is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isRemovedNil();
++
++
++        
++
++        /**
++         * Check whether running is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isRunningNil();
++
++
++        
++
++        /**
++         * Check whether jobs is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isJobsNil();
++
++
++        
++
++        /*************************** Checking and Setting 'NIL' values in Arrays *****************************/
++
++        /**
++         * NOTE: You may set this to remove specific elements in the array
++         *       But you can not remove elements, if the specific property is declared to be non-nillable or sizeof(array) < minOccurs
++         */
++        
++        /**
++         * Check whether jobs is Nill at position i
++         * @param i index of the item to return.
++         * @return true if the value is Nil at position i, false otherwise
++         */
++        bool WSF_CALL
++        isJobsNilAt(int i);
++ 
++       
++        /**
++         * Set jobs to NILL at the  position i.
++         * @param i . The index of the item to be set Nill.
++         * @return true on success, false otherwise.
++         */
++        bool WSF_CALL
++        setJobsNilAt(int i);
++
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param SubmissionSummary_om_node node to serialize from
++         * @param SubmissionSummary_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* SubmissionSummary_om_node, axiom_element_t *SubmissionSummary_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the SubmissionSummary is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for id by property number (1)
++         * @return AviaryCommon::SubmissionID
++         */
++
++        AviaryCommon::SubmissionID* WSF_CALL
++        getProperty1();
++
++    
++        
++
++        /**
++         * Getter for status by property number (2)
++         * @return AviaryCommon::Status
++         */
++
++        AviaryCommon::Status* WSF_CALL
++        getProperty2();
++
++    
++        
++
++        /**
++         * Getter for completed by property number (3)
++         * @return int
++         */
++
++        int WSF_CALL
++        getProperty3();
++
++    
++        
++
++        /**
++         * Getter for held by property number (4)
++         * @return int
++         */
++
++        int WSF_CALL
++        getProperty4();
++
++    
++        
++
++        /**
++         * Getter for idle by property number (5)
++         * @return int
++         */
++
++        int WSF_CALL
++        getProperty5();
++
++    
++        
++
++        /**
++         * Getter for removed by property number (6)
++         * @return int
++         */
++
++        int WSF_CALL
++        getProperty6();
++
++    
++        
++
++        /**
++         * Getter for running by property number (7)
++         * @return int
++         */
++
++        int WSF_CALL
++        getProperty7();
++
++    
++        
++
++        /**
++         * Getter for jobs by property number (8)
++         * @return Array of AviaryCommon::JobSummarys.
++         */
++
++        std::vector<AviaryCommon::JobSummary*>* WSF_CALL
++        getProperty8();
++
++    
++
++};
++
++}        
++ #endif /* SUBMISSIONSUMMARY_H */
++    
++
+diff --git a/src/condor_contrib/aviary/include/AviaryJob_ControlJob.h b/src/condor_contrib/aviary/include/AviaryJob_ControlJob.h
+new file mode 100644
+index 0000000..381e631
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryJob_ControlJob.h
+@@ -0,0 +1,253 @@
++
++
++        #ifndef AviaryJob_CONTROLJOB_H
++        #define AviaryJob_CONTROLJOB_H
++
++       /**
++        * ControlJob.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  ControlJob class
++        */
++
++        namespace AviaryJob{
++            class ControlJob;
++        }
++        
++
++        
++       #include "AviaryCommon_JobID.h"
++          
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryJob
++{
++        
++        
++
++        class ControlJob {
++
++        private:
++             AviaryCommon::JobID* property_Id;
++
++                
++                bool isValidId;
++            std::string property_Reason;
++
++                
++                bool isValidReason;
++            
++
++        /*** Private methods ***/
++          
++
++        bool WSF_CALL
++        setIdNil();
++            
++
++        bool WSF_CALL
++        setReasonNil();
++            
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class ControlJob
++         */
++
++        ControlJob();
++
++        /**
++         * Destructor ControlJob
++         */
++        ~ControlJob();
++
++
++       
++
++        /**
++         * Constructor for creating ControlJob
++         * @param 
++         * @param Id AviaryCommon::JobID*
++         * @param Reason std::string
++         * @return newly created ControlJob object
++         */
++        ControlJob(AviaryCommon::JobID* arg_Id,std::string arg_Reason);
++        
++        
++        /********************************** Class get set methods **************************************/
++        
++        
++
++        /**
++         * Getter for id. 
++         * @return AviaryCommon::JobID*
++         */
++        WSF_EXTERN AviaryCommon::JobID* WSF_CALL
++        getId();
++
++        /**
++         * Setter for id.
++         * @param arg_Id AviaryCommon::JobID*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setId(AviaryCommon::JobID*  arg_Id);
++
++        /**
++         * Re setter for id
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetId();
++        
++        
++
++        /**
++         * Getter for reason. 
++         * @return std::string*
++         */
++        WSF_EXTERN std::string WSF_CALL
++        getReason();
++
++        /**
++         * Setter for reason.
++         * @param arg_Reason std::string*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setReason(const std::string  arg_Reason);
++
++        /**
++         * Re setter for reason
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetReason();
++        
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether id is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isIdNil();
++
++
++        
++
++        /**
++         * Check whether reason is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isReasonNil();
++
++
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param ControlJob_om_node node to serialize from
++         * @param ControlJob_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* ControlJob_om_node, axiom_element_t *ControlJob_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the ControlJob is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for id by property number (1)
++         * @return AviaryCommon::JobID
++         */
++
++        AviaryCommon::JobID* WSF_CALL
++        getProperty1();
++
++    
++        
++
++        /**
++         * Getter for reason by property number (2)
++         * @return std::string
++         */
++
++        std::string WSF_CALL
++        getProperty2();
++
++    
++
++};
++
++}        
++ #endif /* CONTROLJOB_H */
++    
++
+diff --git a/src/condor_contrib/aviary/include/AviaryJob_ControlJobResponse.h b/src/condor_contrib/aviary/include/AviaryJob_ControlJobResponse.h
+new file mode 100644
+index 0000000..cf03407
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryJob_ControlJobResponse.h
+@@ -0,0 +1,199 @@
++
++
++        #ifndef AviaryJob_CONTROLJOBRESPONSE_H
++        #define AviaryJob_CONTROLJOBRESPONSE_H
++
++       /**
++        * ControlJobResponse.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  ControlJobResponse class
++        */
++
++        namespace AviaryJob{
++            class ControlJobResponse;
++        }
++        
++
++        
++       #include "AviaryCommon_Status.h"
++          
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryJob
++{
++        
++        
++
++        class ControlJobResponse {
++
++        private:
++             AviaryCommon::Status* property_Status;
++
++                
++                bool isValidStatus;
++            
++
++        /*** Private methods ***/
++          
++
++        bool WSF_CALL
++        setStatusNil();
++            
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class ControlJobResponse
++         */
++
++        ControlJobResponse();
++
++        /**
++         * Destructor ControlJobResponse
++         */
++        ~ControlJobResponse();
++
++
++       
++
++        /**
++         * Constructor for creating ControlJobResponse
++         * @param 
++         * @param Status AviaryCommon::Status*
++         * @return newly created ControlJobResponse object
++         */
++        ControlJobResponse(AviaryCommon::Status* arg_Status);
++        
++        
++        /********************************** Class get set methods **************************************/
++        
++        
++
++        /**
++         * Getter for status. 
++         * @return AviaryCommon::Status*
++         */
++        WSF_EXTERN AviaryCommon::Status* WSF_CALL
++        getStatus();
++
++        /**
++         * Setter for status.
++         * @param arg_Status AviaryCommon::Status*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setStatus(AviaryCommon::Status*  arg_Status);
++
++        /**
++         * Re setter for status
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetStatus();
++        
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether status is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isStatusNil();
++
++
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param ControlJobResponse_om_node node to serialize from
++         * @param ControlJobResponse_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* ControlJobResponse_om_node, axiom_element_t *ControlJobResponse_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the ControlJobResponse is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for status by property number (1)
++         * @return AviaryCommon::Status
++         */
++
++        AviaryCommon::Status* WSF_CALL
++        getProperty1();
++
++    
++
++};
++
++}        
++ #endif /* CONTROLJOBRESPONSE_H */
++    
++
+diff --git a/src/condor_contrib/aviary/include/AviaryJob_HoldJob.h b/src/condor_contrib/aviary/include/AviaryJob_HoldJob.h
+new file mode 100644
+index 0000000..119d76f
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryJob_HoldJob.h
+@@ -0,0 +1,203 @@
++
++
++        #ifndef AviaryJob_HOLDJOB_H
++        #define AviaryJob_HOLDJOB_H
++
++       /**
++        * HoldJob.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  HoldJob class
++        */
++
++        namespace AviaryJob{
++            class HoldJob;
++        }
++        
++
++        
++       #include "AviaryJob_ControlJob.h"
++          
++        #include <axutil_qname.h>
++        
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryJob
++{
++        
++        
++
++        class HoldJob {
++
++        private:
++             
++                axutil_qname_t* qname;
++            AviaryJob::ControlJob* property_HoldJob;
++
++                
++                bool isValidHoldJob;
++            
++
++        /*** Private methods ***/
++          
++
++        bool WSF_CALL
++        setHoldJobNil();
++            
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class HoldJob
++         */
++
++        HoldJob();
++
++        /**
++         * Destructor HoldJob
++         */
++        ~HoldJob();
++
++
++       
++
++        /**
++         * Constructor for creating HoldJob
++         * @param 
++         * @param HoldJob AviaryJob::ControlJob*
++         * @return newly created HoldJob object
++         */
++        HoldJob(AviaryJob::ControlJob* arg_HoldJob);
++        
++        
++        /********************************** Class get set methods **************************************/
++        
++        
++
++        /**
++         * Getter for HoldJob. 
++         * @return AviaryJob::ControlJob*
++         */
++        WSF_EXTERN AviaryJob::ControlJob* WSF_CALL
++        getHoldJob();
++
++        /**
++         * Setter for HoldJob.
++         * @param arg_HoldJob AviaryJob::ControlJob*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setHoldJob(AviaryJob::ControlJob*  arg_HoldJob);
++
++        /**
++         * Re setter for HoldJob
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetHoldJob();
++        
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether HoldJob is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isHoldJobNil();
++
++
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param HoldJob_om_node node to serialize from
++         * @param HoldJob_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* HoldJob_om_node, axiom_element_t *HoldJob_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the HoldJob is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for HoldJob by property number (1)
++         * @return AviaryJob::ControlJob
++         */
++
++        AviaryJob::ControlJob* WSF_CALL
++        getProperty1();
++
++    
++
++};
++
++}        
++ #endif /* HOLDJOB_H */
++    
++
+diff --git a/src/condor_contrib/aviary/include/AviaryJob_HoldJobResponse.h b/src/condor_contrib/aviary/include/AviaryJob_HoldJobResponse.h
+new file mode 100644
+index 0000000..3b8d1da
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryJob_HoldJobResponse.h
+@@ -0,0 +1,203 @@
++
++
++        #ifndef AviaryJob_HOLDJOBRESPONSE_H
++        #define AviaryJob_HOLDJOBRESPONSE_H
++
++       /**
++        * HoldJobResponse.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  HoldJobResponse class
++        */
++
++        namespace AviaryJob{
++            class HoldJobResponse;
++        }
++        
++
++        
++       #include "AviaryJob_ControlJobResponse.h"
++          
++        #include <axutil_qname.h>
++        
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryJob
++{
++        
++        
++
++        class HoldJobResponse {
++
++        private:
++             
++                axutil_qname_t* qname;
++            AviaryJob::ControlJobResponse* property_HoldJobResponse;
++
++                
++                bool isValidHoldJobResponse;
++            
++
++        /*** Private methods ***/
++          
++
++        bool WSF_CALL
++        setHoldJobResponseNil();
++            
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class HoldJobResponse
++         */
++
++        HoldJobResponse();
++
++        /**
++         * Destructor HoldJobResponse
++         */
++        ~HoldJobResponse();
++
++
++       
++
++        /**
++         * Constructor for creating HoldJobResponse
++         * @param 
++         * @param HoldJobResponse AviaryJob::ControlJobResponse*
++         * @return newly created HoldJobResponse object
++         */
++        HoldJobResponse(AviaryJob::ControlJobResponse* arg_HoldJobResponse);
++        
++        
++        /********************************** Class get set methods **************************************/
++        
++        
++
++        /**
++         * Getter for HoldJobResponse. 
++         * @return AviaryJob::ControlJobResponse*
++         */
++        WSF_EXTERN AviaryJob::ControlJobResponse* WSF_CALL
++        getHoldJobResponse();
++
++        /**
++         * Setter for HoldJobResponse.
++         * @param arg_HoldJobResponse AviaryJob::ControlJobResponse*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setHoldJobResponse(AviaryJob::ControlJobResponse*  arg_HoldJobResponse);
++
++        /**
++         * Re setter for HoldJobResponse
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetHoldJobResponse();
++        
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether HoldJobResponse is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isHoldJobResponseNil();
++
++
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param HoldJobResponse_om_node node to serialize from
++         * @param HoldJobResponse_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* HoldJobResponse_om_node, axiom_element_t *HoldJobResponse_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the HoldJobResponse is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for HoldJobResponse by property number (1)
++         * @return AviaryJob::ControlJobResponse
++         */
++
++        AviaryJob::ControlJobResponse* WSF_CALL
++        getProperty1();
++
++    
++
++};
++
++}        
++ #endif /* HOLDJOBRESPONSE_H */
++    
++
+diff --git a/src/condor_contrib/aviary/include/AviaryJob_ReleaseJob.h b/src/condor_contrib/aviary/include/AviaryJob_ReleaseJob.h
+new file mode 100644
+index 0000000..9fc3c14
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryJob_ReleaseJob.h
+@@ -0,0 +1,203 @@
++
++
++        #ifndef AviaryJob_RELEASEJOB_H
++        #define AviaryJob_RELEASEJOB_H
++
++       /**
++        * ReleaseJob.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  ReleaseJob class
++        */
++
++        namespace AviaryJob{
++            class ReleaseJob;
++        }
++        
++
++        
++       #include "AviaryJob_ControlJob.h"
++          
++        #include <axutil_qname.h>
++        
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryJob
++{
++        
++        
++
++        class ReleaseJob {
++
++        private:
++             
++                axutil_qname_t* qname;
++            AviaryJob::ControlJob* property_ReleaseJob;
++
++                
++                bool isValidReleaseJob;
++            
++
++        /*** Private methods ***/
++          
++
++        bool WSF_CALL
++        setReleaseJobNil();
++            
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class ReleaseJob
++         */
++
++        ReleaseJob();
++
++        /**
++         * Destructor ReleaseJob
++         */
++        ~ReleaseJob();
++
++
++       
++
++        /**
++         * Constructor for creating ReleaseJob
++         * @param 
++         * @param ReleaseJob AviaryJob::ControlJob*
++         * @return newly created ReleaseJob object
++         */
++        ReleaseJob(AviaryJob::ControlJob* arg_ReleaseJob);
++        
++        
++        /********************************** Class get set methods **************************************/
++        
++        
++
++        /**
++         * Getter for ReleaseJob. 
++         * @return AviaryJob::ControlJob*
++         */
++        WSF_EXTERN AviaryJob::ControlJob* WSF_CALL
++        getReleaseJob();
++
++        /**
++         * Setter for ReleaseJob.
++         * @param arg_ReleaseJob AviaryJob::ControlJob*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setReleaseJob(AviaryJob::ControlJob*  arg_ReleaseJob);
++
++        /**
++         * Re setter for ReleaseJob
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetReleaseJob();
++        
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether ReleaseJob is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isReleaseJobNil();
++
++
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param ReleaseJob_om_node node to serialize from
++         * @param ReleaseJob_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* ReleaseJob_om_node, axiom_element_t *ReleaseJob_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the ReleaseJob is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for ReleaseJob by property number (1)
++         * @return AviaryJob::ControlJob
++         */
++
++        AviaryJob::ControlJob* WSF_CALL
++        getProperty1();
++
++    
++
++};
++
++}        
++ #endif /* RELEASEJOB_H */
++    
++
+diff --git a/src/condor_contrib/aviary/include/AviaryJob_ReleaseJobResponse.h b/src/condor_contrib/aviary/include/AviaryJob_ReleaseJobResponse.h
+new file mode 100644
+index 0000000..6247516
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryJob_ReleaseJobResponse.h
+@@ -0,0 +1,203 @@
++
++
++        #ifndef AviaryJob_RELEASEJOBRESPONSE_H
++        #define AviaryJob_RELEASEJOBRESPONSE_H
++
++       /**
++        * ReleaseJobResponse.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  ReleaseJobResponse class
++        */
++
++        namespace AviaryJob{
++            class ReleaseJobResponse;
++        }
++        
++
++        
++       #include "AviaryJob_ControlJobResponse.h"
++          
++        #include <axutil_qname.h>
++        
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryJob
++{
++        
++        
++
++        class ReleaseJobResponse {
++
++        private:
++             
++                axutil_qname_t* qname;
++            AviaryJob::ControlJobResponse* property_ReleaseJobResponse;
++
++                
++                bool isValidReleaseJobResponse;
++            
++
++        /*** Private methods ***/
++          
++
++        bool WSF_CALL
++        setReleaseJobResponseNil();
++            
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class ReleaseJobResponse
++         */
++
++        ReleaseJobResponse();
++
++        /**
++         * Destructor ReleaseJobResponse
++         */
++        ~ReleaseJobResponse();
++
++
++       
++
++        /**
++         * Constructor for creating ReleaseJobResponse
++         * @param 
++         * @param ReleaseJobResponse AviaryJob::ControlJobResponse*
++         * @return newly created ReleaseJobResponse object
++         */
++        ReleaseJobResponse(AviaryJob::ControlJobResponse* arg_ReleaseJobResponse);
++        
++        
++        /********************************** Class get set methods **************************************/
++        
++        
++
++        /**
++         * Getter for ReleaseJobResponse. 
++         * @return AviaryJob::ControlJobResponse*
++         */
++        WSF_EXTERN AviaryJob::ControlJobResponse* WSF_CALL
++        getReleaseJobResponse();
++
++        /**
++         * Setter for ReleaseJobResponse.
++         * @param arg_ReleaseJobResponse AviaryJob::ControlJobResponse*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setReleaseJobResponse(AviaryJob::ControlJobResponse*  arg_ReleaseJobResponse);
++
++        /**
++         * Re setter for ReleaseJobResponse
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetReleaseJobResponse();
++        
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether ReleaseJobResponse is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isReleaseJobResponseNil();
++
++
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param ReleaseJobResponse_om_node node to serialize from
++         * @param ReleaseJobResponse_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* ReleaseJobResponse_om_node, axiom_element_t *ReleaseJobResponse_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the ReleaseJobResponse is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for ReleaseJobResponse by property number (1)
++         * @return AviaryJob::ControlJobResponse
++         */
++
++        AviaryJob::ControlJobResponse* WSF_CALL
++        getProperty1();
++
++    
++
++};
++
++}        
++ #endif /* RELEASEJOBRESPONSE_H */
++    
++
+diff --git a/src/condor_contrib/aviary/include/AviaryJob_RemoveJob.h b/src/condor_contrib/aviary/include/AviaryJob_RemoveJob.h
+new file mode 100644
+index 0000000..7d66ddc
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryJob_RemoveJob.h
+@@ -0,0 +1,203 @@
++
++
++        #ifndef AviaryJob_REMOVEJOB_H
++        #define AviaryJob_REMOVEJOB_H
++
++       /**
++        * RemoveJob.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  RemoveJob class
++        */
++
++        namespace AviaryJob{
++            class RemoveJob;
++        }
++        
++
++        
++       #include "AviaryJob_ControlJob.h"
++          
++        #include <axutil_qname.h>
++        
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryJob
++{
++        
++        
++
++        class RemoveJob {
++
++        private:
++             
++                axutil_qname_t* qname;
++            AviaryJob::ControlJob* property_RemoveJob;
++
++                
++                bool isValidRemoveJob;
++            
++
++        /*** Private methods ***/
++          
++
++        bool WSF_CALL
++        setRemoveJobNil();
++            
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class RemoveJob
++         */
++
++        RemoveJob();
++
++        /**
++         * Destructor RemoveJob
++         */
++        ~RemoveJob();
++
++
++       
++
++        /**
++         * Constructor for creating RemoveJob
++         * @param 
++         * @param RemoveJob AviaryJob::ControlJob*
++         * @return newly created RemoveJob object
++         */
++        RemoveJob(AviaryJob::ControlJob* arg_RemoveJob);
++        
++        
++        /********************************** Class get set methods **************************************/
++        
++        
++
++        /**
++         * Getter for RemoveJob. 
++         * @return AviaryJob::ControlJob*
++         */
++        WSF_EXTERN AviaryJob::ControlJob* WSF_CALL
++        getRemoveJob();
++
++        /**
++         * Setter for RemoveJob.
++         * @param arg_RemoveJob AviaryJob::ControlJob*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setRemoveJob(AviaryJob::ControlJob*  arg_RemoveJob);
++
++        /**
++         * Re setter for RemoveJob
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetRemoveJob();
++        
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether RemoveJob is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isRemoveJobNil();
++
++
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param RemoveJob_om_node node to serialize from
++         * @param RemoveJob_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* RemoveJob_om_node, axiom_element_t *RemoveJob_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the RemoveJob is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for RemoveJob by property number (1)
++         * @return AviaryJob::ControlJob
++         */
++
++        AviaryJob::ControlJob* WSF_CALL
++        getProperty1();
++
++    
++
++};
++
++}        
++ #endif /* REMOVEJOB_H */
++    
++
+diff --git a/src/condor_contrib/aviary/include/AviaryJob_RemoveJobResponse.h b/src/condor_contrib/aviary/include/AviaryJob_RemoveJobResponse.h
+new file mode 100644
+index 0000000..eb67b57
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryJob_RemoveJobResponse.h
+@@ -0,0 +1,203 @@
++
++
++        #ifndef AviaryJob_REMOVEJOBRESPONSE_H
++        #define AviaryJob_REMOVEJOBRESPONSE_H
++
++       /**
++        * RemoveJobResponse.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  RemoveJobResponse class
++        */
++
++        namespace AviaryJob{
++            class RemoveJobResponse;
++        }
++        
++
++        
++       #include "AviaryJob_ControlJobResponse.h"
++          
++        #include <axutil_qname.h>
++        
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryJob
++{
++        
++        
++
++        class RemoveJobResponse {
++
++        private:
++             
++                axutil_qname_t* qname;
++            AviaryJob::ControlJobResponse* property_RemoveJobResponse;
++
++                
++                bool isValidRemoveJobResponse;
++            
++
++        /*** Private methods ***/
++          
++
++        bool WSF_CALL
++        setRemoveJobResponseNil();
++            
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class RemoveJobResponse
++         */
++
++        RemoveJobResponse();
++
++        /**
++         * Destructor RemoveJobResponse
++         */
++        ~RemoveJobResponse();
++
++
++       
++
++        /**
++         * Constructor for creating RemoveJobResponse
++         * @param 
++         * @param RemoveJobResponse AviaryJob::ControlJobResponse*
++         * @return newly created RemoveJobResponse object
++         */
++        RemoveJobResponse(AviaryJob::ControlJobResponse* arg_RemoveJobResponse);
++        
++        
++        /********************************** Class get set methods **************************************/
++        
++        
++
++        /**
++         * Getter for RemoveJobResponse. 
++         * @return AviaryJob::ControlJobResponse*
++         */
++        WSF_EXTERN AviaryJob::ControlJobResponse* WSF_CALL
++        getRemoveJobResponse();
++
++        /**
++         * Setter for RemoveJobResponse.
++         * @param arg_RemoveJobResponse AviaryJob::ControlJobResponse*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setRemoveJobResponse(AviaryJob::ControlJobResponse*  arg_RemoveJobResponse);
++
++        /**
++         * Re setter for RemoveJobResponse
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetRemoveJobResponse();
++        
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether RemoveJobResponse is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isRemoveJobResponseNil();
++
++
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param RemoveJobResponse_om_node node to serialize from
++         * @param RemoveJobResponse_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* RemoveJobResponse_om_node, axiom_element_t *RemoveJobResponse_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the RemoveJobResponse is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for RemoveJobResponse by property number (1)
++         * @return AviaryJob::ControlJobResponse
++         */
++
++        AviaryJob::ControlJobResponse* WSF_CALL
++        getProperty1();
++
++    
++
++};
++
++}        
++ #endif /* REMOVEJOBRESPONSE_H */
++    
++
+diff --git a/src/condor_contrib/aviary/include/AviaryJob_SetJobAttribute.h b/src/condor_contrib/aviary/include/AviaryJob_SetJobAttribute.h
+new file mode 100644
+index 0000000..a046279
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryJob_SetJobAttribute.h
+@@ -0,0 +1,259 @@
++
++
++        #ifndef AviaryJob_SETJOBATTRIBUTE_H
++        #define AviaryJob_SETJOBATTRIBUTE_H
++
++       /**
++        * SetJobAttribute.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  SetJobAttribute class
++        */
++
++        namespace AviaryJob{
++            class SetJobAttribute;
++        }
++        
++
++        
++       #include "AviaryCommon_JobID.h"
++          
++       #include "AviaryCommon_Attribute.h"
++          
++        #include <axutil_qname.h>
++        
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryJob
++{
++        
++        
++
++        class SetJobAttribute {
++
++        private:
++             
++                axutil_qname_t* qname;
++            AviaryCommon::JobID* property_Id;
++
++                
++                bool isValidId;
++            AviaryCommon::Attribute* property_Attribute;
++
++                
++                bool isValidAttribute;
++            
++
++        /*** Private methods ***/
++          
++
++        bool WSF_CALL
++        setIdNil();
++            
++
++        bool WSF_CALL
++        setAttributeNil();
++            
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class SetJobAttribute
++         */
++
++        SetJobAttribute();
++
++        /**
++         * Destructor SetJobAttribute
++         */
++        ~SetJobAttribute();
++
++
++       
++
++        /**
++         * Constructor for creating SetJobAttribute
++         * @param 
++         * @param Id AviaryCommon::JobID*
++         * @param Attribute AviaryCommon::Attribute*
++         * @return newly created SetJobAttribute object
++         */
++        SetJobAttribute(AviaryCommon::JobID* arg_Id,AviaryCommon::Attribute* arg_Attribute);
++        
++        
++        /********************************** Class get set methods **************************************/
++        
++        
++
++        /**
++         * Getter for id. 
++         * @return AviaryCommon::JobID*
++         */
++        WSF_EXTERN AviaryCommon::JobID* WSF_CALL
++        getId();
++
++        /**
++         * Setter for id.
++         * @param arg_Id AviaryCommon::JobID*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setId(AviaryCommon::JobID*  arg_Id);
++
++        /**
++         * Re setter for id
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetId();
++        
++        
++
++        /**
++         * Getter for attribute. 
++         * @return AviaryCommon::Attribute*
++         */
++        WSF_EXTERN AviaryCommon::Attribute* WSF_CALL
++        getAttribute();
++
++        /**
++         * Setter for attribute.
++         * @param arg_Attribute AviaryCommon::Attribute*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setAttribute(AviaryCommon::Attribute*  arg_Attribute);
++
++        /**
++         * Re setter for attribute
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetAttribute();
++        
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether id is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isIdNil();
++
++
++        
++
++        /**
++         * Check whether attribute is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isAttributeNil();
++
++
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param SetJobAttribute_om_node node to serialize from
++         * @param SetJobAttribute_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* SetJobAttribute_om_node, axiom_element_t *SetJobAttribute_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the SetJobAttribute is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for id by property number (1)
++         * @return AviaryCommon::JobID
++         */
++
++        AviaryCommon::JobID* WSF_CALL
++        getProperty1();
++
++    
++        
++
++        /**
++         * Getter for attribute by property number (2)
++         * @return AviaryCommon::Attribute
++         */
++
++        AviaryCommon::Attribute* WSF_CALL
++        getProperty2();
++
++    
++
++};
++
++}        
++ #endif /* SETJOBATTRIBUTE_H */
++    
++
+diff --git a/src/condor_contrib/aviary/include/AviaryJob_SetJobAttributeResponse.h b/src/condor_contrib/aviary/include/AviaryJob_SetJobAttributeResponse.h
+new file mode 100644
+index 0000000..8d39178
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryJob_SetJobAttributeResponse.h
+@@ -0,0 +1,203 @@
++
++
++        #ifndef AviaryJob_SETJOBATTRIBUTERESPONSE_H
++        #define AviaryJob_SETJOBATTRIBUTERESPONSE_H
++
++       /**
++        * SetJobAttributeResponse.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  SetJobAttributeResponse class
++        */
++
++        namespace AviaryJob{
++            class SetJobAttributeResponse;
++        }
++        
++
++        
++       #include "AviaryJob_ControlJobResponse.h"
++          
++        #include <axutil_qname.h>
++        
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryJob
++{
++        
++        
++
++        class SetJobAttributeResponse {
++
++        private:
++             
++                axutil_qname_t* qname;
++            AviaryJob::ControlJobResponse* property_SetJobAttributeResponse;
++
++                
++                bool isValidSetJobAttributeResponse;
++            
++
++        /*** Private methods ***/
++          
++
++        bool WSF_CALL
++        setSetJobAttributeResponseNil();
++            
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class SetJobAttributeResponse
++         */
++
++        SetJobAttributeResponse();
++
++        /**
++         * Destructor SetJobAttributeResponse
++         */
++        ~SetJobAttributeResponse();
++
++
++       
++
++        /**
++         * Constructor for creating SetJobAttributeResponse
++         * @param 
++         * @param SetJobAttributeResponse AviaryJob::ControlJobResponse*
++         * @return newly created SetJobAttributeResponse object
++         */
++        SetJobAttributeResponse(AviaryJob::ControlJobResponse* arg_SetJobAttributeResponse);
++        
++        
++        /********************************** Class get set methods **************************************/
++        
++        
++
++        /**
++         * Getter for SetJobAttributeResponse. 
++         * @return AviaryJob::ControlJobResponse*
++         */
++        WSF_EXTERN AviaryJob::ControlJobResponse* WSF_CALL
++        getSetJobAttributeResponse();
++
++        /**
++         * Setter for SetJobAttributeResponse.
++         * @param arg_SetJobAttributeResponse AviaryJob::ControlJobResponse*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setSetJobAttributeResponse(AviaryJob::ControlJobResponse*  arg_SetJobAttributeResponse);
++
++        /**
++         * Re setter for SetJobAttributeResponse
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetSetJobAttributeResponse();
++        
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether SetJobAttributeResponse is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isSetJobAttributeResponseNil();
++
++
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param SetJobAttributeResponse_om_node node to serialize from
++         * @param SetJobAttributeResponse_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* SetJobAttributeResponse_om_node, axiom_element_t *SetJobAttributeResponse_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the SetJobAttributeResponse is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for SetJobAttributeResponse by property number (1)
++         * @return AviaryJob::ControlJobResponse
++         */
++
++        AviaryJob::ControlJobResponse* WSF_CALL
++        getProperty1();
++
++    
++
++};
++
++}        
++ #endif /* SETJOBATTRIBUTERESPONSE_H */
++    
++
+diff --git a/src/condor_contrib/aviary/include/AviaryJob_SubmitJob.h b/src/condor_contrib/aviary/include/AviaryJob_SubmitJob.h
+new file mode 100644
+index 0000000..e26d8ed
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryJob_SubmitJob.h
+@@ -0,0 +1,747 @@
++
++
++        #ifndef AviaryJob_SUBMITJOB_H
++        #define AviaryJob_SUBMITJOB_H
++
++       /**
++        * SubmitJob.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  SubmitJob class
++        */
++
++        namespace AviaryJob{
++            class SubmitJob;
++        }
++        
++
++        
++       #include "AviaryCommon_ResourceConstraint.h"
++          
++       #include "AviaryCommon_Attribute.h"
++          
++        #include <axutil_qname.h>
++        
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryJob
++{
++        
++        
++
++        class SubmitJob {
++
++        private:
++             
++                axutil_qname_t* qname;
++            std::string property_Cmd;
++
++                
++                bool isValidCmd;
++            std::string property_Args;
++
++                
++                bool isValidArgs;
++            std::string property_Owner;
++
++                
++                bool isValidOwner;
++            std::string property_Iwd;
++
++                
++                bool isValidIwd;
++            std::string property_Submission_name;
++
++                
++                bool isValidSubmission_name;
++            std::vector<AviaryCommon::ResourceConstraint*>* property_Requirements;
++
++                
++                bool isValidRequirements;
++            std::vector<AviaryCommon::Attribute*>* property_Extra;
++
++                
++                bool isValidExtra;
++            bool property_AllowOverrides;
++
++                
++                bool isValidAllowOverrides;
++            
++
++        /*** Private methods ***/
++          
++
++        bool WSF_CALL
++        setCmdNil();
++            
++
++        bool WSF_CALL
++        setArgsNil();
++            
++
++        bool WSF_CALL
++        setOwnerNil();
++            
++
++        bool WSF_CALL
++        setIwdNil();
++            
++
++        bool WSF_CALL
++        setSubmission_nameNil();
++            
++
++        bool WSF_CALL
++        setRequirementsNil();
++            
++
++        bool WSF_CALL
++        setExtraNil();
++            
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class SubmitJob
++         */
++
++        SubmitJob();
++
++        /**
++         * Destructor SubmitJob
++         */
++        ~SubmitJob();
++
++
++       
++
++        /**
++         * Constructor for creating SubmitJob
++         * @param 
++         * @param Cmd std::string
++         * @param Args std::string
++         * @param Owner std::string
++         * @param Iwd std::string
++         * @param Submission_name std::string
++         * @param Requirements std::vector<AviaryCommon::ResourceConstraint*>*
++         * @param Extra std::vector<AviaryCommon::Attribute*>*
++         * @param AllowOverrides bool
++         * @return newly created SubmitJob object
++         */
++        SubmitJob(std::string arg_Cmd,std::string arg_Args,std::string arg_Owner,std::string arg_Iwd,std::string arg_Submission_name,std::vector<AviaryCommon::ResourceConstraint*>* arg_Requirements,std::vector<AviaryCommon::Attribute*>* arg_Extra,bool arg_AllowOverrides);
++        
++        
++        /********************************** Class get set methods **************************************/
++        /******** Deprecated for array types, Use 'Getters and Setters for Arrays' instead ***********/
++        
++
++        /**
++         * Getter for cmd. 
++         * @return std::string*
++         */
++        WSF_EXTERN std::string WSF_CALL
++        getCmd();
++
++        /**
++         * Setter for cmd.
++         * @param arg_Cmd std::string*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setCmd(const std::string  arg_Cmd);
++
++        /**
++         * Re setter for cmd
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetCmd();
++        
++        
++
++        /**
++         * Getter for args. 
++         * @return std::string*
++         */
++        WSF_EXTERN std::string WSF_CALL
++        getArgs();
++
++        /**
++         * Setter for args.
++         * @param arg_Args std::string*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setArgs(const std::string  arg_Args);
++
++        /**
++         * Re setter for args
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetArgs();
++        
++        
++
++        /**
++         * Getter for owner. 
++         * @return std::string*
++         */
++        WSF_EXTERN std::string WSF_CALL
++        getOwner();
++
++        /**
++         * Setter for owner.
++         * @param arg_Owner std::string*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setOwner(const std::string  arg_Owner);
++
++        /**
++         * Re setter for owner
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetOwner();
++        
++        
++
++        /**
++         * Getter for iwd. 
++         * @return std::string*
++         */
++        WSF_EXTERN std::string WSF_CALL
++        getIwd();
++
++        /**
++         * Setter for iwd.
++         * @param arg_Iwd std::string*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setIwd(const std::string  arg_Iwd);
++
++        /**
++         * Re setter for iwd
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetIwd();
++        
++        
++
++        /**
++         * Getter for submission_name. 
++         * @return std::string*
++         */
++        WSF_EXTERN std::string WSF_CALL
++        getSubmission_name();
++
++        /**
++         * Setter for submission_name.
++         * @param arg_Submission_name std::string*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setSubmission_name(const std::string  arg_Submission_name);
++
++        /**
++         * Re setter for submission_name
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetSubmission_name();
++        
++        
++
++        /**
++         * Getter for requirements. Deprecated for array types, Use getRequirementsAt instead
++         * @return Array of AviaryCommon::ResourceConstraint*s.
++         */
++        WSF_EXTERN std::vector<AviaryCommon::ResourceConstraint*>* WSF_CALL
++        getRequirements();
++
++        /**
++         * Setter for requirements.Deprecated for array types, Use setRequirementsAt
++         * or addRequirements instead.
++         * @param arg_Requirements Array of AviaryCommon::ResourceConstraint*s.
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setRequirements(std::vector<AviaryCommon::ResourceConstraint*>*  arg_Requirements);
++
++        /**
++         * Re setter for requirements
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetRequirements();
++        
++        
++
++        /**
++         * Getter for extra. Deprecated for array types, Use getExtraAt instead
++         * @return Array of AviaryCommon::Attribute*s.
++         */
++        WSF_EXTERN std::vector<AviaryCommon::Attribute*>* WSF_CALL
++        getExtra();
++
++        /**
++         * Setter for extra.Deprecated for array types, Use setExtraAt
++         * or addExtra instead.
++         * @param arg_Extra Array of AviaryCommon::Attribute*s.
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setExtra(std::vector<AviaryCommon::Attribute*>*  arg_Extra);
++
++        /**
++         * Re setter for extra
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetExtra();
++        
++        
++
++        /**
++         * Getter for allowOverrides. 
++         * @return bool
++         */
++        WSF_EXTERN bool WSF_CALL
++        getAllowOverrides();
++
++        /**
++         * Setter for allowOverrides.
++         * @param arg_AllowOverrides bool
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setAllowOverrides(bool  arg_AllowOverrides);
++
++        /**
++         * Re setter for allowOverrides
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetAllowOverrides();
++        
++        /****************************** Get Set methods for Arrays **********************************/
++        /************ Array Specific Operations: get_at, set_at, add, remove_at, sizeof *****************/
++
++        /**
++         * E.g. use of get_at, set_at, add and sizeof
++         *
++         * for(i = 0; i < adb_element->sizeofProperty(); i ++ )
++         * {
++         *     // Getting ith value to property_object variable
++         *     property_object = adb_element->getPropertyAt(i);
++         *
++         *     // Setting ith value from property_object variable
++         *     adb_element->setPropertyAt(i, property_object);
++         *
++         *     // Appending the value to the end of the array from property_object variable
++         *     adb_element->addProperty(property_object);
++         *
++         *     // Removing the ith value from an array
++         *     adb_element->removePropertyAt(i);
++         *     
++         * }
++         *
++         */
++
++        
++        
++        /**
++         * Get the ith element of requirements.
++        * @param i index of the item to be obtained
++         * @return ith AviaryCommon::ResourceConstraint* of the array
++         */
++        WSF_EXTERN AviaryCommon::ResourceConstraint* WSF_CALL
++        getRequirementsAt(int i);
++
++        /**
++         * Set the ith element of requirements. (If the ith already exist, it will be replaced)
++         * @param i index of the item to return
++         * @param arg_Requirements element to set AviaryCommon::ResourceConstraint* to the array
++         * @return ith AviaryCommon::ResourceConstraint* of the array
++         */
++        WSF_EXTERN bool WSF_CALL
++        setRequirementsAt(int i,
++                AviaryCommon::ResourceConstraint* arg_Requirements);
++
++
++        /**
++         * Add to requirements.
++         * @param arg_Requirements element to add AviaryCommon::ResourceConstraint* to the array
++         * @return true on success, false otherwise.
++         */
++        WSF_EXTERN bool WSF_CALL
++        addRequirements(
++            AviaryCommon::ResourceConstraint* arg_Requirements);
++
++        /**
++         * Get the size of the requirements array.
++         * @return the size of the requirements array.
++         */
++        WSF_EXTERN int WSF_CALL
++        sizeofRequirements();
++
++        /**
++         * Remove the ith element of requirements.
++         * @param i index of the item to remove
++         * @return true on success, false otherwise.
++         */
++        WSF_EXTERN bool WSF_CALL
++        removeRequirementsAt(int i);
++
++        
++        
++        /**
++         * Get the ith element of extra.
++        * @param i index of the item to be obtained
++         * @return ith AviaryCommon::Attribute* of the array
++         */
++        WSF_EXTERN AviaryCommon::Attribute* WSF_CALL
++        getExtraAt(int i);
++
++        /**
++         * Set the ith element of extra. (If the ith already exist, it will be replaced)
++         * @param i index of the item to return
++         * @param arg_Extra element to set AviaryCommon::Attribute* to the array
++         * @return ith AviaryCommon::Attribute* of the array
++         */
++        WSF_EXTERN bool WSF_CALL
++        setExtraAt(int i,
++                AviaryCommon::Attribute* arg_Extra);
++
++
++        /**
++         * Add to extra.
++         * @param arg_Extra element to add AviaryCommon::Attribute* to the array
++         * @return true on success, false otherwise.
++         */
++        WSF_EXTERN bool WSF_CALL
++        addExtra(
++            AviaryCommon::Attribute* arg_Extra);
++
++        /**
++         * Get the size of the extra array.
++         * @return the size of the extra array.
++         */
++        WSF_EXTERN int WSF_CALL
++        sizeofExtra();
++
++        /**
++         * Remove the ith element of extra.
++         * @param i index of the item to remove
++         * @return true on success, false otherwise.
++         */
++        WSF_EXTERN bool WSF_CALL
++        removeExtraAt(int i);
++
++        
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        /* Use 'Checking and Setting NIL values for Arrays' to check and set nil for individual elements */
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether cmd is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isCmdNil();
++
++
++        
++
++        /**
++         * Check whether args is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isArgsNil();
++
++
++        
++
++        /**
++         * Check whether owner is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isOwnerNil();
++
++
++        
++
++        /**
++         * Check whether iwd is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isIwdNil();
++
++
++        
++
++        /**
++         * Check whether submission_name is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isSubmission_nameNil();
++
++
++        
++
++        /**
++         * Check whether requirements is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isRequirementsNil();
++
++
++        
++
++        /**
++         * Check whether extra is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isExtraNil();
++
++
++        
++
++        /**
++         * Check whether allowOverrides is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isAllowOverridesNil();
++
++
++        
++        /**
++         * Set allowOverrides to Nill (same as using reset)
++         * @return true on success, false otherwise.
++         */
++        bool WSF_CALL
++        setAllowOverridesNil();
++        
++
++        /*************************** Checking and Setting 'NIL' values in Arrays *****************************/
++
++        /**
++         * NOTE: You may set this to remove specific elements in the array
++         *       But you can not remove elements, if the specific property is declared to be non-nillable or sizeof(array) < minOccurs
++         */
++        
++        /**
++         * Check whether requirements is Nill at position i
++         * @param i index of the item to return.
++         * @return true if the value is Nil at position i, false otherwise
++         */
++        bool WSF_CALL
++        isRequirementsNilAt(int i);
++ 
++       
++        /**
++         * Set requirements to NILL at the  position i.
++         * @param i . The index of the item to be set Nill.
++         * @return true on success, false otherwise.
++         */
++        bool WSF_CALL
++        setRequirementsNilAt(int i);
++
++        
++        /**
++         * Check whether extra is Nill at position i
++         * @param i index of the item to return.
++         * @return true if the value is Nil at position i, false otherwise
++         */
++        bool WSF_CALL
++        isExtraNilAt(int i);
++ 
++       
++        /**
++         * Set extra to NILL at the  position i.
++         * @param i . The index of the item to be set Nill.
++         * @return true on success, false otherwise.
++         */
++        bool WSF_CALL
++        setExtraNilAt(int i);
++
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param SubmitJob_om_node node to serialize from
++         * @param SubmitJob_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* SubmitJob_om_node, axiom_element_t *SubmitJob_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the SubmitJob is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for cmd by property number (1)
++         * @return std::string
++         */
++
++        std::string WSF_CALL
++        getProperty1();
++
++    
++        
++
++        /**
++         * Getter for args by property number (2)
++         * @return std::string
++         */
++
++        std::string WSF_CALL
++        getProperty2();
++
++    
++        
++
++        /**
++         * Getter for owner by property number (3)
++         * @return std::string
++         */
++
++        std::string WSF_CALL
++        getProperty3();
++
++    
++        
++
++        /**
++         * Getter for iwd by property number (4)
++         * @return std::string
++         */
++
++        std::string WSF_CALL
++        getProperty4();
++
++    
++        
++
++        /**
++         * Getter for submission_name by property number (5)
++         * @return std::string
++         */
++
++        std::string WSF_CALL
++        getProperty5();
++
++    
++        
++
++        /**
++         * Getter for requirements by property number (6)
++         * @return Array of AviaryCommon::ResourceConstraints.
++         */
++
++        std::vector<AviaryCommon::ResourceConstraint*>* WSF_CALL
++        getProperty6();
++
++    
++        
++
++        /**
++         * Getter for extra by property number (7)
++         * @return Array of AviaryCommon::Attributes.
++         */
++
++        std::vector<AviaryCommon::Attribute*>* WSF_CALL
++        getProperty7();
++
++    
++        
++
++        /**
++         * Getter for allowOverrides by property number (8)
++         * @return bool
++         */
++
++        bool WSF_CALL
++        getProperty8();
++
++    
++
++};
++
++}        
++ #endif /* SUBMITJOB_H */
++    
++
+diff --git a/src/condor_contrib/aviary/include/AviaryJob_SubmitJobResponse.h b/src/condor_contrib/aviary/include/AviaryJob_SubmitJobResponse.h
+new file mode 100644
+index 0000000..42b32fd
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryJob_SubmitJobResponse.h
+@@ -0,0 +1,259 @@
++
++
++        #ifndef AviaryJob_SUBMITJOBRESPONSE_H
++        #define AviaryJob_SUBMITJOBRESPONSE_H
++
++       /**
++        * SubmitJobResponse.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  SubmitJobResponse class
++        */
++
++        namespace AviaryJob{
++            class SubmitJobResponse;
++        }
++        
++
++        
++       #include "AviaryCommon_JobID.h"
++          
++       #include "AviaryCommon_Status.h"
++          
++        #include <axutil_qname.h>
++        
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryJob
++{
++        
++        
++
++        class SubmitJobResponse {
++
++        private:
++             
++                axutil_qname_t* qname;
++            AviaryCommon::JobID* property_Id;
++
++                
++                bool isValidId;
++            AviaryCommon::Status* property_Status;
++
++                
++                bool isValidStatus;
++            
++
++        /*** Private methods ***/
++          
++
++        bool WSF_CALL
++        setIdNil();
++            
++
++        bool WSF_CALL
++        setStatusNil();
++            
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class SubmitJobResponse
++         */
++
++        SubmitJobResponse();
++
++        /**
++         * Destructor SubmitJobResponse
++         */
++        ~SubmitJobResponse();
++
++
++       
++
++        /**
++         * Constructor for creating SubmitJobResponse
++         * @param 
++         * @param Id AviaryCommon::JobID*
++         * @param Status AviaryCommon::Status*
++         * @return newly created SubmitJobResponse object
++         */
++        SubmitJobResponse(AviaryCommon::JobID* arg_Id,AviaryCommon::Status* arg_Status);
++        
++        
++        /********************************** Class get set methods **************************************/
++        
++        
++
++        /**
++         * Getter for id. 
++         * @return AviaryCommon::JobID*
++         */
++        WSF_EXTERN AviaryCommon::JobID* WSF_CALL
++        getId();
++
++        /**
++         * Setter for id.
++         * @param arg_Id AviaryCommon::JobID*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setId(AviaryCommon::JobID*  arg_Id);
++
++        /**
++         * Re setter for id
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetId();
++        
++        
++
++        /**
++         * Getter for status. 
++         * @return AviaryCommon::Status*
++         */
++        WSF_EXTERN AviaryCommon::Status* WSF_CALL
++        getStatus();
++
++        /**
++         * Setter for status.
++         * @param arg_Status AviaryCommon::Status*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setStatus(AviaryCommon::Status*  arg_Status);
++
++        /**
++         * Re setter for status
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetStatus();
++        
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether id is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isIdNil();
++
++
++        
++
++        /**
++         * Check whether status is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isStatusNil();
++
++
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param SubmitJobResponse_om_node node to serialize from
++         * @param SubmitJobResponse_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* SubmitJobResponse_om_node, axiom_element_t *SubmitJobResponse_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the SubmitJobResponse is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for id by property number (1)
++         * @return AviaryCommon::JobID
++         */
++
++        AviaryCommon::JobID* WSF_CALL
++        getProperty1();
++
++    
++        
++
++        /**
++         * Getter for status by property number (2)
++         * @return AviaryCommon::Status
++         */
++
++        AviaryCommon::Status* WSF_CALL
++        getProperty2();
++
++    
++
++};
++
++}        
++ #endif /* SUBMITJOBRESPONSE_H */
++    
++
+diff --git a/src/condor_contrib/aviary/include/AviaryQuery_GetJobData.h b/src/condor_contrib/aviary/include/AviaryQuery_GetJobData.h
+new file mode 100644
+index 0000000..9439d0a
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryQuery_GetJobData.h
+@@ -0,0 +1,311 @@
++
++
++        #ifndef AviaryQuery_GETJOBDATA_H
++        #define AviaryQuery_GETJOBDATA_H
++
++       /**
++        * GetJobData.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  GetJobData class
++        */
++
++        namespace AviaryQuery{
++            class GetJobData;
++        }
++        
++
++        
++       #include "AviaryCommon_JobData.h"
++          
++        #include <axutil_qname.h>
++        
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryQuery
++{
++        
++        
++
++        class GetJobData {
++
++        private:
++             
++                axutil_qname_t* qname;
++            AviaryCommon::JobData* property_Data;
++
++                
++                bool isValidData;
++            int property_Max_bytes;
++
++                
++                bool isValidMax_bytes;
++            bool property_From_end;
++
++                
++                bool isValidFrom_end;
++            
++
++        /*** Private methods ***/
++          
++
++        bool WSF_CALL
++        setDataNil();
++            
++
++        bool WSF_CALL
++        setMax_bytesNil();
++            
++
++        bool WSF_CALL
++        setFrom_endNil();
++            
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class GetJobData
++         */
++
++        GetJobData();
++
++        /**
++         * Destructor GetJobData
++         */
++        ~GetJobData();
++
++
++       
++
++        /**
++         * Constructor for creating GetJobData
++         * @param 
++         * @param Data AviaryCommon::JobData*
++         * @param Max_bytes int
++         * @param From_end bool
++         * @return newly created GetJobData object
++         */
++        GetJobData(AviaryCommon::JobData* arg_Data,int arg_Max_bytes,bool arg_From_end);
++        
++        
++        /********************************** Class get set methods **************************************/
++        
++        
++
++        /**
++         * Getter for data. 
++         * @return AviaryCommon::JobData*
++         */
++        WSF_EXTERN AviaryCommon::JobData* WSF_CALL
++        getData();
++
++        /**
++         * Setter for data.
++         * @param arg_Data AviaryCommon::JobData*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setData(AviaryCommon::JobData*  arg_Data);
++
++        /**
++         * Re setter for data
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetData();
++        
++        
++
++        /**
++         * Getter for max_bytes. 
++         * @return int*
++         */
++        WSF_EXTERN int WSF_CALL
++        getMax_bytes();
++
++        /**
++         * Setter for max_bytes.
++         * @param arg_Max_bytes int*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setMax_bytes(const int  arg_Max_bytes);
++
++        /**
++         * Re setter for max_bytes
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetMax_bytes();
++        
++        
++
++        /**
++         * Getter for from_end. 
++         * @return bool
++         */
++        WSF_EXTERN bool WSF_CALL
++        getFrom_end();
++
++        /**
++         * Setter for from_end.
++         * @param arg_From_end bool
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setFrom_end(bool  arg_From_end);
++
++        /**
++         * Re setter for from_end
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetFrom_end();
++        
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether data is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isDataNil();
++
++
++        
++
++        /**
++         * Check whether max_bytes is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isMax_bytesNil();
++
++
++        
++
++        /**
++         * Check whether from_end is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isFrom_endNil();
++
++
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param GetJobData_om_node node to serialize from
++         * @param GetJobData_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* GetJobData_om_node, axiom_element_t *GetJobData_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the GetJobData is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for data by property number (1)
++         * @return AviaryCommon::JobData
++         */
++
++        AviaryCommon::JobData* WSF_CALL
++        getProperty1();
++
++    
++        
++
++        /**
++         * Getter for max_bytes by property number (2)
++         * @return int
++         */
++
++        int WSF_CALL
++        getProperty2();
++
++    
++        
++
++        /**
++         * Getter for from_end by property number (3)
++         * @return bool
++         */
++
++        bool WSF_CALL
++        getProperty3();
++
++    
++
++};
++
++}        
++ #endif /* GETJOBDATA_H */
++    
++
+diff --git a/src/condor_contrib/aviary/include/AviaryQuery_GetJobDataResponse.h b/src/condor_contrib/aviary/include/AviaryQuery_GetJobDataResponse.h
+new file mode 100644
+index 0000000..6acae59
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryQuery_GetJobDataResponse.h
+@@ -0,0 +1,421 @@
++
++
++        #ifndef AviaryQuery_GETJOBDATARESPONSE_H
++        #define AviaryQuery_GETJOBDATARESPONSE_H
++
++       /**
++        * GetJobDataResponse.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  GetJobDataResponse class
++        */
++
++        namespace AviaryQuery{
++            class GetJobDataResponse;
++        }
++        
++
++        
++       #include "AviaryCommon_JobData.h"
++          
++       #include "AviaryCommon_Status.h"
++          
++        #include <axutil_qname.h>
++        
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryQuery
++{
++        
++        
++
++        class GetJobDataResponse {
++
++        private:
++             
++                axutil_qname_t* qname;
++            AviaryCommon::JobData* property_Data;
++
++                
++                bool isValidData;
++            AviaryCommon::Status* property_Status;
++
++                
++                bool isValidStatus;
++            std::string property_File_name;
++
++                
++                bool isValidFile_name;
++            int property_File_size;
++
++                
++                bool isValidFile_size;
++            std::string property_Content;
++
++                
++                bool isValidContent;
++            
++
++        /*** Private methods ***/
++          
++
++        bool WSF_CALL
++        setDataNil();
++            
++
++        bool WSF_CALL
++        setStatusNil();
++            
++
++        bool WSF_CALL
++        setFile_nameNil();
++            
++
++        bool WSF_CALL
++        setFile_sizeNil();
++            
++
++        bool WSF_CALL
++        setContentNil();
++            
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class GetJobDataResponse
++         */
++
++        GetJobDataResponse();
++
++        /**
++         * Destructor GetJobDataResponse
++         */
++        ~GetJobDataResponse();
++
++
++       
++
++        /**
++         * Constructor for creating GetJobDataResponse
++         * @param 
++         * @param Data AviaryCommon::JobData*
++         * @param Status AviaryCommon::Status*
++         * @param File_name std::string
++         * @param File_size int
++         * @param Content std::string
++         * @return newly created GetJobDataResponse object
++         */
++        GetJobDataResponse(AviaryCommon::JobData* arg_Data,AviaryCommon::Status* arg_Status,std::string arg_File_name,int arg_File_size,std::string arg_Content);
++        
++        
++        /********************************** Class get set methods **************************************/
++        
++        
++
++        /**
++         * Getter for data. 
++         * @return AviaryCommon::JobData*
++         */
++        WSF_EXTERN AviaryCommon::JobData* WSF_CALL
++        getData();
++
++        /**
++         * Setter for data.
++         * @param arg_Data AviaryCommon::JobData*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setData(AviaryCommon::JobData*  arg_Data);
++
++        /**
++         * Re setter for data
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetData();
++        
++        
++
++        /**
++         * Getter for status. 
++         * @return AviaryCommon::Status*
++         */
++        WSF_EXTERN AviaryCommon::Status* WSF_CALL
++        getStatus();
++
++        /**
++         * Setter for status.
++         * @param arg_Status AviaryCommon::Status*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setStatus(AviaryCommon::Status*  arg_Status);
++
++        /**
++         * Re setter for status
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetStatus();
++        
++        
++
++        /**
++         * Getter for file_name. 
++         * @return std::string*
++         */
++        WSF_EXTERN std::string WSF_CALL
++        getFile_name();
++
++        /**
++         * Setter for file_name.
++         * @param arg_File_name std::string*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setFile_name(const std::string  arg_File_name);
++
++        /**
++         * Re setter for file_name
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetFile_name();
++        
++        
++
++        /**
++         * Getter for file_size. 
++         * @return int*
++         */
++        WSF_EXTERN int WSF_CALL
++        getFile_size();
++
++        /**
++         * Setter for file_size.
++         * @param arg_File_size int*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setFile_size(const int  arg_File_size);
++
++        /**
++         * Re setter for file_size
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetFile_size();
++        
++        
++
++        /**
++         * Getter for content. 
++         * @return std::string*
++         */
++        WSF_EXTERN std::string WSF_CALL
++        getContent();
++
++        /**
++         * Setter for content.
++         * @param arg_Content std::string*
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setContent(const std::string  arg_Content);
++
++        /**
++         * Re setter for content
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetContent();
++        
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether data is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isDataNil();
++
++
++        
++
++        /**
++         * Check whether status is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isStatusNil();
++
++
++        
++
++        /**
++         * Check whether file_name is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isFile_nameNil();
++
++
++        
++
++        /**
++         * Check whether file_size is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isFile_sizeNil();
++
++
++        
++
++        /**
++         * Check whether content is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isContentNil();
++
++
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param GetJobDataResponse_om_node node to serialize from
++         * @param GetJobDataResponse_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* GetJobDataResponse_om_node, axiom_element_t *GetJobDataResponse_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the GetJobDataResponse is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for data by property number (1)
++         * @return AviaryCommon::JobData
++         */
++
++        AviaryCommon::JobData* WSF_CALL
++        getProperty1();
++
++    
++        
++
++        /**
++         * Getter for status by property number (2)
++         * @return AviaryCommon::Status
++         */
++
++        AviaryCommon::Status* WSF_CALL
++        getProperty2();
++
++    
++        
++
++        /**
++         * Getter for file_name by property number (3)
++         * @return std::string
++         */
++
++        std::string WSF_CALL
++        getProperty3();
++
++    
++        
++
++        /**
++         * Getter for file_size by property number (4)
++         * @return int
++         */
++
++        int WSF_CALL
++        getProperty4();
++
++    
++        
++
++        /**
++         * Getter for content by property number (5)
++         * @return std::string
++         */
++
++        std::string WSF_CALL
++        getProperty5();
++
++    
++
++};
++
++}        
++ #endif /* GETJOBDATARESPONSE_H */
++    
++
+diff --git a/src/condor_contrib/aviary/include/AviaryQuery_GetJobDetails.h b/src/condor_contrib/aviary/include/AviaryQuery_GetJobDetails.h
+new file mode 100644
+index 0000000..adcb87a
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryQuery_GetJobDetails.h
+@@ -0,0 +1,357 @@
++
++
++        #ifndef AviaryQuery_GETJOBDETAILS_H
++        #define AviaryQuery_GETJOBDETAILS_H
++
++       /**
++        * GetJobDetails.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  GetJobDetails class
++        */
++
++        namespace AviaryQuery{
++            class GetJobDetails;
++        }
++        
++
++        
++       #include "AviaryCommon_JobID.h"
++          
++        #include <axutil_qname.h>
++        
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryQuery
++{
++        
++        
++
++        class GetJobDetails {
++
++        private:
++             
++                axutil_qname_t* qname;
++            std::vector<AviaryCommon::JobID*>* property_Ids;
++
++                
++                bool isValidIds;
++            bool property_PartialMatches;
++
++                
++                bool isValidPartialMatches;
++            
++
++        /*** Private methods ***/
++          
++
++        bool WSF_CALL
++        setIdsNil();
++            
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class GetJobDetails
++         */
++
++        GetJobDetails();
++
++        /**
++         * Destructor GetJobDetails
++         */
++        ~GetJobDetails();
++
++
++       
++
++        /**
++         * Constructor for creating GetJobDetails
++         * @param 
++         * @param Ids std::vector<AviaryCommon::JobID*>*
++         * @param PartialMatches bool
++         * @return newly created GetJobDetails object
++         */
++        GetJobDetails(std::vector<AviaryCommon::JobID*>* arg_Ids,bool arg_PartialMatches);
++        
++        
++        /********************************** Class get set methods **************************************/
++        /******** Deprecated for array types, Use 'Getters and Setters for Arrays' instead ***********/
++        
++
++        /**
++         * Getter for ids. Deprecated for array types, Use getIdsAt instead
++         * @return Array of AviaryCommon::JobID*s.
++         */
++        WSF_EXTERN std::vector<AviaryCommon::JobID*>* WSF_CALL
++        getIds();
++
++        /**
++         * Setter for ids.Deprecated for array types, Use setIdsAt
++         * or addIds instead.
++         * @param arg_Ids Array of AviaryCommon::JobID*s.
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setIds(std::vector<AviaryCommon::JobID*>*  arg_Ids);
++
++        /**
++         * Re setter for ids
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetIds();
++        
++        
++
++        /**
++         * Getter for partialMatches. 
++         * @return bool
++         */
++        WSF_EXTERN bool WSF_CALL
++        getPartialMatches();
++
++        /**
++         * Setter for partialMatches.
++         * @param arg_PartialMatches bool
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setPartialMatches(bool  arg_PartialMatches);
++
++        /**
++         * Re setter for partialMatches
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetPartialMatches();
++        
++        /****************************** Get Set methods for Arrays **********************************/
++        /************ Array Specific Operations: get_at, set_at, add, remove_at, sizeof *****************/
++
++        /**
++         * E.g. use of get_at, set_at, add and sizeof
++         *
++         * for(i = 0; i < adb_element->sizeofProperty(); i ++ )
++         * {
++         *     // Getting ith value to property_object variable
++         *     property_object = adb_element->getPropertyAt(i);
++         *
++         *     // Setting ith value from property_object variable
++         *     adb_element->setPropertyAt(i, property_object);
++         *
++         *     // Appending the value to the end of the array from property_object variable
++         *     adb_element->addProperty(property_object);
++         *
++         *     // Removing the ith value from an array
++         *     adb_element->removePropertyAt(i);
++         *     
++         * }
++         *
++         */
++
++        
++        
++        /**
++         * Get the ith element of ids.
++        * @param i index of the item to be obtained
++         * @return ith AviaryCommon::JobID* of the array
++         */
++        WSF_EXTERN AviaryCommon::JobID* WSF_CALL
++        getIdsAt(int i);
++
++        /**
++         * Set the ith element of ids. (If the ith already exist, it will be replaced)
++         * @param i index of the item to return
++         * @param arg_Ids element to set AviaryCommon::JobID* to the array
++         * @return ith AviaryCommon::JobID* of the array
++         */
++        WSF_EXTERN bool WSF_CALL
++        setIdsAt(int i,
++                AviaryCommon::JobID* arg_Ids);
++
++
++        /**
++         * Add to ids.
++         * @param arg_Ids element to add AviaryCommon::JobID* to the array
++         * @return true on success, false otherwise.
++         */
++        WSF_EXTERN bool WSF_CALL
++        addIds(
++            AviaryCommon::JobID* arg_Ids);
++
++        /**
++         * Get the size of the ids array.
++         * @return the size of the ids array.
++         */
++        WSF_EXTERN int WSF_CALL
++        sizeofIds();
++
++        /**
++         * Remove the ith element of ids.
++         * @param i index of the item to remove
++         * @return true on success, false otherwise.
++         */
++        WSF_EXTERN bool WSF_CALL
++        removeIdsAt(int i);
++
++        
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        /* Use 'Checking and Setting NIL values for Arrays' to check and set nil for individual elements */
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether ids is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isIdsNil();
++
++
++        
++
++        /**
++         * Check whether partialMatches is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isPartialMatchesNil();
++
++
++        
++        /**
++         * Set partialMatches to Nill (same as using reset)
++         * @return true on success, false otherwise.
++         */
++        bool WSF_CALL
++        setPartialMatchesNil();
++        
++
++        /*************************** Checking and Setting 'NIL' values in Arrays *****************************/
++
++        /**
++         * NOTE: You may set this to remove specific elements in the array
++         *       But you can not remove elements, if the specific property is declared to be non-nillable or sizeof(array) < minOccurs
++         */
++        
++        /**
++         * Check whether ids is Nill at position i
++         * @param i index of the item to return.
++         * @return true if the value is Nil at position i, false otherwise
++         */
++        bool WSF_CALL
++        isIdsNilAt(int i);
++ 
++       
++        /**
++         * Set ids to NILL at the  position i.
++         * @param i . The index of the item to be set Nill.
++         * @return true on success, false otherwise.
++         */
++        bool WSF_CALL
++        setIdsNilAt(int i);
++
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param GetJobDetails_om_node node to serialize from
++         * @param GetJobDetails_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* GetJobDetails_om_node, axiom_element_t *GetJobDetails_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the GetJobDetails is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for ids by property number (1)
++         * @return Array of AviaryCommon::JobIDs.
++         */
++
++        std::vector<AviaryCommon::JobID*>* WSF_CALL
++        getProperty1();
++
++    
++        
++
++        /**
++         * Getter for partialMatches by property number (2)
++         * @return bool
++         */
++
++        bool WSF_CALL
++        getProperty2();
++
++    
++
++};
++
++}        
++ #endif /* GETJOBDETAILS_H */
++    
++
+diff --git a/src/condor_contrib/aviary/include/AviaryQuery_GetJobDetailsResponse.h b/src/condor_contrib/aviary/include/AviaryQuery_GetJobDetailsResponse.h
+new file mode 100644
+index 0000000..d8bfb23
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryQuery_GetJobDetailsResponse.h
+@@ -0,0 +1,300 @@
++
++
++        #ifndef AviaryQuery_GETJOBDETAILSRESPONSE_H
++        #define AviaryQuery_GETJOBDETAILSRESPONSE_H
++
++       /**
++        * GetJobDetailsResponse.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  GetJobDetailsResponse class
++        */
++
++        namespace AviaryQuery{
++            class GetJobDetailsResponse;
++        }
++        
++
++        
++       #include "AviaryCommon_JobDetails.h"
++          
++        #include <axutil_qname.h>
++        
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryQuery
++{
++        
++        
++
++        class GetJobDetailsResponse {
++
++        private:
++             
++                axutil_qname_t* qname;
++            std::vector<AviaryCommon::JobDetails*>* property_Jobs;
++
++                
++                bool isValidJobs;
++            
++
++        /*** Private methods ***/
++          
++
++        bool WSF_CALL
++        setJobsNil();
++            
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class GetJobDetailsResponse
++         */
++
++        GetJobDetailsResponse();
++
++        /**
++         * Destructor GetJobDetailsResponse
++         */
++        ~GetJobDetailsResponse();
++
++
++       
++
++        /**
++         * Constructor for creating GetJobDetailsResponse
++         * @param 
++         * @param Jobs std::vector<AviaryCommon::JobDetails*>*
++         * @return newly created GetJobDetailsResponse object
++         */
++        GetJobDetailsResponse(std::vector<AviaryCommon::JobDetails*>* arg_Jobs);
++        
++        
++        /********************************** Class get set methods **************************************/
++        /******** Deprecated for array types, Use 'Getters and Setters for Arrays' instead ***********/
++        
++
++        /**
++         * Getter for jobs. Deprecated for array types, Use getJobsAt instead
++         * @return Array of AviaryCommon::JobDetails*s.
++         */
++        WSF_EXTERN std::vector<AviaryCommon::JobDetails*>* WSF_CALL
++        getJobs();
++
++        /**
++         * Setter for jobs.Deprecated for array types, Use setJobsAt
++         * or addJobs instead.
++         * @param arg_Jobs Array of AviaryCommon::JobDetails*s.
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setJobs(std::vector<AviaryCommon::JobDetails*>*  arg_Jobs);
++
++        /**
++         * Re setter for jobs
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetJobs();
++        
++        /****************************** Get Set methods for Arrays **********************************/
++        /************ Array Specific Operations: get_at, set_at, add, remove_at, sizeof *****************/
++
++        /**
++         * E.g. use of get_at, set_at, add and sizeof
++         *
++         * for(i = 0; i < adb_element->sizeofProperty(); i ++ )
++         * {
++         *     // Getting ith value to property_object variable
++         *     property_object = adb_element->getPropertyAt(i);
++         *
++         *     // Setting ith value from property_object variable
++         *     adb_element->setPropertyAt(i, property_object);
++         *
++         *     // Appending the value to the end of the array from property_object variable
++         *     adb_element->addProperty(property_object);
++         *
++         *     // Removing the ith value from an array
++         *     adb_element->removePropertyAt(i);
++         *     
++         * }
++         *
++         */
++
++        
++        
++        /**
++         * Get the ith element of jobs.
++        * @param i index of the item to be obtained
++         * @return ith AviaryCommon::JobDetails* of the array
++         */
++        WSF_EXTERN AviaryCommon::JobDetails* WSF_CALL
++        getJobsAt(int i);
++
++        /**
++         * Set the ith element of jobs. (If the ith already exist, it will be replaced)
++         * @param i index of the item to return
++         * @param arg_Jobs element to set AviaryCommon::JobDetails* to the array
++         * @return ith AviaryCommon::JobDetails* of the array
++         */
++        WSF_EXTERN bool WSF_CALL
++        setJobsAt(int i,
++                AviaryCommon::JobDetails* arg_Jobs);
++
++
++        /**
++         * Add to jobs.
++         * @param arg_Jobs element to add AviaryCommon::JobDetails* to the array
++         * @return true on success, false otherwise.
++         */
++        WSF_EXTERN bool WSF_CALL
++        addJobs(
++            AviaryCommon::JobDetails* arg_Jobs);
++
++        /**
++         * Get the size of the jobs array.
++         * @return the size of the jobs array.
++         */
++        WSF_EXTERN int WSF_CALL
++        sizeofJobs();
++
++        /**
++         * Remove the ith element of jobs.
++         * @param i index of the item to remove
++         * @return true on success, false otherwise.
++         */
++        WSF_EXTERN bool WSF_CALL
++        removeJobsAt(int i);
++
++        
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        /* Use 'Checking and Setting NIL values for Arrays' to check and set nil for individual elements */
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether jobs is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isJobsNil();
++
++
++        
++
++        /*************************** Checking and Setting 'NIL' values in Arrays *****************************/
++
++        /**
++         * NOTE: You may set this to remove specific elements in the array
++         *       But you can not remove elements, if the specific property is declared to be non-nillable or sizeof(array) < minOccurs
++         */
++        
++        /**
++         * Check whether jobs is Nill at position i
++         * @param i index of the item to return.
++         * @return true if the value is Nil at position i, false otherwise
++         */
++        bool WSF_CALL
++        isJobsNilAt(int i);
++ 
++       
++        /**
++         * Set jobs to NILL at the  position i.
++         * @param i . The index of the item to be set Nill.
++         * @return true on success, false otherwise.
++         */
++        bool WSF_CALL
++        setJobsNilAt(int i);
++
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param GetJobDetailsResponse_om_node node to serialize from
++         * @param GetJobDetailsResponse_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* GetJobDetailsResponse_om_node, axiom_element_t *GetJobDetailsResponse_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the GetJobDetailsResponse is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for jobs by property number (1)
++         * @return Array of AviaryCommon::JobDetailss.
++         */
++
++        std::vector<AviaryCommon::JobDetails*>* WSF_CALL
++        getProperty1();
++
++    
++
++};
++
++}        
++ #endif /* GETJOBDETAILSRESPONSE_H */
++    
++
+diff --git a/src/condor_contrib/aviary/include/AviaryQuery_GetJobStatus.h b/src/condor_contrib/aviary/include/AviaryQuery_GetJobStatus.h
+new file mode 100644
+index 0000000..aa9142f
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryQuery_GetJobStatus.h
+@@ -0,0 +1,357 @@
++
++
++        #ifndef AviaryQuery_GETJOBSTATUS_H
++        #define AviaryQuery_GETJOBSTATUS_H
++
++       /**
++        * GetJobStatus.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  GetJobStatus class
++        */
++
++        namespace AviaryQuery{
++            class GetJobStatus;
++        }
++        
++
++        
++       #include "AviaryCommon_JobID.h"
++          
++        #include <axutil_qname.h>
++        
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryQuery
++{
++        
++        
++
++        class GetJobStatus {
++
++        private:
++             
++                axutil_qname_t* qname;
++            std::vector<AviaryCommon::JobID*>* property_Ids;
++
++                
++                bool isValidIds;
++            bool property_PartialMatches;
++
++                
++                bool isValidPartialMatches;
++            
++
++        /*** Private methods ***/
++          
++
++        bool WSF_CALL
++        setIdsNil();
++            
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class GetJobStatus
++         */
++
++        GetJobStatus();
++
++        /**
++         * Destructor GetJobStatus
++         */
++        ~GetJobStatus();
++
++
++       
++
++        /**
++         * Constructor for creating GetJobStatus
++         * @param 
++         * @param Ids std::vector<AviaryCommon::JobID*>*
++         * @param PartialMatches bool
++         * @return newly created GetJobStatus object
++         */
++        GetJobStatus(std::vector<AviaryCommon::JobID*>* arg_Ids,bool arg_PartialMatches);
++        
++        
++        /********************************** Class get set methods **************************************/
++        /******** Deprecated for array types, Use 'Getters and Setters for Arrays' instead ***********/
++        
++
++        /**
++         * Getter for ids. Deprecated for array types, Use getIdsAt instead
++         * @return Array of AviaryCommon::JobID*s.
++         */
++        WSF_EXTERN std::vector<AviaryCommon::JobID*>* WSF_CALL
++        getIds();
++
++        /**
++         * Setter for ids.Deprecated for array types, Use setIdsAt
++         * or addIds instead.
++         * @param arg_Ids Array of AviaryCommon::JobID*s.
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setIds(std::vector<AviaryCommon::JobID*>*  arg_Ids);
++
++        /**
++         * Re setter for ids
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetIds();
++        
++        
++
++        /**
++         * Getter for partialMatches. 
++         * @return bool
++         */
++        WSF_EXTERN bool WSF_CALL
++        getPartialMatches();
++
++        /**
++         * Setter for partialMatches.
++         * @param arg_PartialMatches bool
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setPartialMatches(bool  arg_PartialMatches);
++
++        /**
++         * Re setter for partialMatches
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetPartialMatches();
++        
++        /****************************** Get Set methods for Arrays **********************************/
++        /************ Array Specific Operations: get_at, set_at, add, remove_at, sizeof *****************/
++
++        /**
++         * E.g. use of get_at, set_at, add and sizeof
++         *
++         * for(i = 0; i < adb_element->sizeofProperty(); i ++ )
++         * {
++         *     // Getting ith value to property_object variable
++         *     property_object = adb_element->getPropertyAt(i);
++         *
++         *     // Setting ith value from property_object variable
++         *     adb_element->setPropertyAt(i, property_object);
++         *
++         *     // Appending the value to the end of the array from property_object variable
++         *     adb_element->addProperty(property_object);
++         *
++         *     // Removing the ith value from an array
++         *     adb_element->removePropertyAt(i);
++         *     
++         * }
++         *
++         */
++
++        
++        
++        /**
++         * Get the ith element of ids.
++        * @param i index of the item to be obtained
++         * @return ith AviaryCommon::JobID* of the array
++         */
++        WSF_EXTERN AviaryCommon::JobID* WSF_CALL
++        getIdsAt(int i);
++
++        /**
++         * Set the ith element of ids. (If the ith already exist, it will be replaced)
++         * @param i index of the item to return
++         * @param arg_Ids element to set AviaryCommon::JobID* to the array
++         * @return ith AviaryCommon::JobID* of the array
++         */
++        WSF_EXTERN bool WSF_CALL
++        setIdsAt(int i,
++                AviaryCommon::JobID* arg_Ids);
++
++
++        /**
++         * Add to ids.
++         * @param arg_Ids element to add AviaryCommon::JobID* to the array
++         * @return true on success, false otherwise.
++         */
++        WSF_EXTERN bool WSF_CALL
++        addIds(
++            AviaryCommon::JobID* arg_Ids);
++
++        /**
++         * Get the size of the ids array.
++         * @return the size of the ids array.
++         */
++        WSF_EXTERN int WSF_CALL
++        sizeofIds();
++
++        /**
++         * Remove the ith element of ids.
++         * @param i index of the item to remove
++         * @return true on success, false otherwise.
++         */
++        WSF_EXTERN bool WSF_CALL
++        removeIdsAt(int i);
++
++        
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        /* Use 'Checking and Setting NIL values for Arrays' to check and set nil for individual elements */
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether ids is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isIdsNil();
++
++
++        
++
++        /**
++         * Check whether partialMatches is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isPartialMatchesNil();
++
++
++        
++        /**
++         * Set partialMatches to Nill (same as using reset)
++         * @return true on success, false otherwise.
++         */
++        bool WSF_CALL
++        setPartialMatchesNil();
++        
++
++        /*************************** Checking and Setting 'NIL' values in Arrays *****************************/
++
++        /**
++         * NOTE: You may set this to remove specific elements in the array
++         *       But you can not remove elements, if the specific property is declared to be non-nillable or sizeof(array) < minOccurs
++         */
++        
++        /**
++         * Check whether ids is Nill at position i
++         * @param i index of the item to return.
++         * @return true if the value is Nil at position i, false otherwise
++         */
++        bool WSF_CALL
++        isIdsNilAt(int i);
++ 
++       
++        /**
++         * Set ids to NILL at the  position i.
++         * @param i . The index of the item to be set Nill.
++         * @return true on success, false otherwise.
++         */
++        bool WSF_CALL
++        setIdsNilAt(int i);
++
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param GetJobStatus_om_node node to serialize from
++         * @param GetJobStatus_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* GetJobStatus_om_node, axiom_element_t *GetJobStatus_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the GetJobStatus is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for ids by property number (1)
++         * @return Array of AviaryCommon::JobIDs.
++         */
++
++        std::vector<AviaryCommon::JobID*>* WSF_CALL
++        getProperty1();
++
++    
++        
++
++        /**
++         * Getter for partialMatches by property number (2)
++         * @return bool
++         */
++
++        bool WSF_CALL
++        getProperty2();
++
++    
++
++};
++
++}        
++ #endif /* GETJOBSTATUS_H */
++    
++
+diff --git a/src/condor_contrib/aviary/include/AviaryQuery_GetJobStatusResponse.h b/src/condor_contrib/aviary/include/AviaryQuery_GetJobStatusResponse.h
+new file mode 100644
+index 0000000..d75adb5
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryQuery_GetJobStatusResponse.h
+@@ -0,0 +1,300 @@
++
++
++        #ifndef AviaryQuery_GETJOBSTATUSRESPONSE_H
++        #define AviaryQuery_GETJOBSTATUSRESPONSE_H
++
++       /**
++        * GetJobStatusResponse.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  GetJobStatusResponse class
++        */
++
++        namespace AviaryQuery{
++            class GetJobStatusResponse;
++        }
++        
++
++        
++       #include "AviaryCommon_JobStatus.h"
++          
++        #include <axutil_qname.h>
++        
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryQuery
++{
++        
++        
++
++        class GetJobStatusResponse {
++
++        private:
++             
++                axutil_qname_t* qname;
++            std::vector<AviaryCommon::JobStatus*>* property_Jobs;
++
++                
++                bool isValidJobs;
++            
++
++        /*** Private methods ***/
++          
++
++        bool WSF_CALL
++        setJobsNil();
++            
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class GetJobStatusResponse
++         */
++
++        GetJobStatusResponse();
++
++        /**
++         * Destructor GetJobStatusResponse
++         */
++        ~GetJobStatusResponse();
++
++
++       
++
++        /**
++         * Constructor for creating GetJobStatusResponse
++         * @param 
++         * @param Jobs std::vector<AviaryCommon::JobStatus*>*
++         * @return newly created GetJobStatusResponse object
++         */
++        GetJobStatusResponse(std::vector<AviaryCommon::JobStatus*>* arg_Jobs);
++        
++        
++        /********************************** Class get set methods **************************************/
++        /******** Deprecated for array types, Use 'Getters and Setters for Arrays' instead ***********/
++        
++
++        /**
++         * Getter for jobs. Deprecated for array types, Use getJobsAt instead
++         * @return Array of AviaryCommon::JobStatus*s.
++         */
++        WSF_EXTERN std::vector<AviaryCommon::JobStatus*>* WSF_CALL
++        getJobs();
++
++        /**
++         * Setter for jobs.Deprecated for array types, Use setJobsAt
++         * or addJobs instead.
++         * @param arg_Jobs Array of AviaryCommon::JobStatus*s.
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setJobs(std::vector<AviaryCommon::JobStatus*>*  arg_Jobs);
++
++        /**
++         * Re setter for jobs
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetJobs();
++        
++        /****************************** Get Set methods for Arrays **********************************/
++        /************ Array Specific Operations: get_at, set_at, add, remove_at, sizeof *****************/
++
++        /**
++         * E.g. use of get_at, set_at, add and sizeof
++         *
++         * for(i = 0; i < adb_element->sizeofProperty(); i ++ )
++         * {
++         *     // Getting ith value to property_object variable
++         *     property_object = adb_element->getPropertyAt(i);
++         *
++         *     // Setting ith value from property_object variable
++         *     adb_element->setPropertyAt(i, property_object);
++         *
++         *     // Appending the value to the end of the array from property_object variable
++         *     adb_element->addProperty(property_object);
++         *
++         *     // Removing the ith value from an array
++         *     adb_element->removePropertyAt(i);
++         *     
++         * }
++         *
++         */
++
++        
++        
++        /**
++         * Get the ith element of jobs.
++        * @param i index of the item to be obtained
++         * @return ith AviaryCommon::JobStatus* of the array
++         */
++        WSF_EXTERN AviaryCommon::JobStatus* WSF_CALL
++        getJobsAt(int i);
++
++        /**
++         * Set the ith element of jobs. (If the ith already exist, it will be replaced)
++         * @param i index of the item to return
++         * @param arg_Jobs element to set AviaryCommon::JobStatus* to the array
++         * @return ith AviaryCommon::JobStatus* of the array
++         */
++        WSF_EXTERN bool WSF_CALL
++        setJobsAt(int i,
++                AviaryCommon::JobStatus* arg_Jobs);
++
++
++        /**
++         * Add to jobs.
++         * @param arg_Jobs element to add AviaryCommon::JobStatus* to the array
++         * @return true on success, false otherwise.
++         */
++        WSF_EXTERN bool WSF_CALL
++        addJobs(
++            AviaryCommon::JobStatus* arg_Jobs);
++
++        /**
++         * Get the size of the jobs array.
++         * @return the size of the jobs array.
++         */
++        WSF_EXTERN int WSF_CALL
++        sizeofJobs();
++
++        /**
++         * Remove the ith element of jobs.
++         * @param i index of the item to remove
++         * @return true on success, false otherwise.
++         */
++        WSF_EXTERN bool WSF_CALL
++        removeJobsAt(int i);
++
++        
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        /* Use 'Checking and Setting NIL values for Arrays' to check and set nil for individual elements */
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether jobs is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isJobsNil();
++
++
++        
++
++        /*************************** Checking and Setting 'NIL' values in Arrays *****************************/
++
++        /**
++         * NOTE: You may set this to remove specific elements in the array
++         *       But you can not remove elements, if the specific property is declared to be non-nillable or sizeof(array) < minOccurs
++         */
++        
++        /**
++         * Check whether jobs is Nill at position i
++         * @param i index of the item to return.
++         * @return true if the value is Nil at position i, false otherwise
++         */
++        bool WSF_CALL
++        isJobsNilAt(int i);
++ 
++       
++        /**
++         * Set jobs to NILL at the  position i.
++         * @param i . The index of the item to be set Nill.
++         * @return true on success, false otherwise.
++         */
++        bool WSF_CALL
++        setJobsNilAt(int i);
++
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param GetJobStatusResponse_om_node node to serialize from
++         * @param GetJobStatusResponse_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* GetJobStatusResponse_om_node, axiom_element_t *GetJobStatusResponse_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the GetJobStatusResponse is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for jobs by property number (1)
++         * @return Array of AviaryCommon::JobStatuss.
++         */
++
++        std::vector<AviaryCommon::JobStatus*>* WSF_CALL
++        getProperty1();
++
++    
++
++};
++
++}        
++ #endif /* GETJOBSTATUSRESPONSE_H */
++    
++
+diff --git a/src/condor_contrib/aviary/include/AviaryQuery_GetJobSummary.h b/src/condor_contrib/aviary/include/AviaryQuery_GetJobSummary.h
+new file mode 100644
+index 0000000..9751a88
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryQuery_GetJobSummary.h
+@@ -0,0 +1,357 @@
++
++
++        #ifndef AviaryQuery_GETJOBSUMMARY_H
++        #define AviaryQuery_GETJOBSUMMARY_H
++
++       /**
++        * GetJobSummary.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  GetJobSummary class
++        */
++
++        namespace AviaryQuery{
++            class GetJobSummary;
++        }
++        
++
++        
++       #include "AviaryCommon_JobID.h"
++          
++        #include <axutil_qname.h>
++        
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryQuery
++{
++        
++        
++
++        class GetJobSummary {
++
++        private:
++             
++                axutil_qname_t* qname;
++            std::vector<AviaryCommon::JobID*>* property_Ids;
++
++                
++                bool isValidIds;
++            bool property_PartialMatches;
++
++                
++                bool isValidPartialMatches;
++            
++
++        /*** Private methods ***/
++          
++
++        bool WSF_CALL
++        setIdsNil();
++            
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class GetJobSummary
++         */
++
++        GetJobSummary();
++
++        /**
++         * Destructor GetJobSummary
++         */
++        ~GetJobSummary();
++
++
++       
++
++        /**
++         * Constructor for creating GetJobSummary
++         * @param 
++         * @param Ids std::vector<AviaryCommon::JobID*>*
++         * @param PartialMatches bool
++         * @return newly created GetJobSummary object
++         */
++        GetJobSummary(std::vector<AviaryCommon::JobID*>* arg_Ids,bool arg_PartialMatches);
++        
++        
++        /********************************** Class get set methods **************************************/
++        /******** Deprecated for array types, Use 'Getters and Setters for Arrays' instead ***********/
++        
++
++        /**
++         * Getter for ids. Deprecated for array types, Use getIdsAt instead
++         * @return Array of AviaryCommon::JobID*s.
++         */
++        WSF_EXTERN std::vector<AviaryCommon::JobID*>* WSF_CALL
++        getIds();
++
++        /**
++         * Setter for ids.Deprecated for array types, Use setIdsAt
++         * or addIds instead.
++         * @param arg_Ids Array of AviaryCommon::JobID*s.
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setIds(std::vector<AviaryCommon::JobID*>*  arg_Ids);
++
++        /**
++         * Re setter for ids
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetIds();
++        
++        
++
++        /**
++         * Getter for partialMatches. 
++         * @return bool
++         */
++        WSF_EXTERN bool WSF_CALL
++        getPartialMatches();
++
++        /**
++         * Setter for partialMatches.
++         * @param arg_PartialMatches bool
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setPartialMatches(bool  arg_PartialMatches);
++
++        /**
++         * Re setter for partialMatches
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetPartialMatches();
++        
++        /****************************** Get Set methods for Arrays **********************************/
++        /************ Array Specific Operations: get_at, set_at, add, remove_at, sizeof *****************/
++
++        /**
++         * E.g. use of get_at, set_at, add and sizeof
++         *
++         * for(i = 0; i < adb_element->sizeofProperty(); i ++ )
++         * {
++         *     // Getting ith value to property_object variable
++         *     property_object = adb_element->getPropertyAt(i);
++         *
++         *     // Setting ith value from property_object variable
++         *     adb_element->setPropertyAt(i, property_object);
++         *
++         *     // Appending the value to the end of the array from property_object variable
++         *     adb_element->addProperty(property_object);
++         *
++         *     // Removing the ith value from an array
++         *     adb_element->removePropertyAt(i);
++         *     
++         * }
++         *
++         */
++
++        
++        
++        /**
++         * Get the ith element of ids.
++        * @param i index of the item to be obtained
++         * @return ith AviaryCommon::JobID* of the array
++         */
++        WSF_EXTERN AviaryCommon::JobID* WSF_CALL
++        getIdsAt(int i);
++
++        /**
++         * Set the ith element of ids. (If the ith already exist, it will be replaced)
++         * @param i index of the item to return
++         * @param arg_Ids element to set AviaryCommon::JobID* to the array
++         * @return ith AviaryCommon::JobID* of the array
++         */
++        WSF_EXTERN bool WSF_CALL
++        setIdsAt(int i,
++                AviaryCommon::JobID* arg_Ids);
++
++
++        /**
++         * Add to ids.
++         * @param arg_Ids element to add AviaryCommon::JobID* to the array
++         * @return true on success, false otherwise.
++         */
++        WSF_EXTERN bool WSF_CALL
++        addIds(
++            AviaryCommon::JobID* arg_Ids);
++
++        /**
++         * Get the size of the ids array.
++         * @return the size of the ids array.
++         */
++        WSF_EXTERN int WSF_CALL
++        sizeofIds();
++
++        /**
++         * Remove the ith element of ids.
++         * @param i index of the item to remove
++         * @return true on success, false otherwise.
++         */
++        WSF_EXTERN bool WSF_CALL
++        removeIdsAt(int i);
++
++        
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        /* Use 'Checking and Setting NIL values for Arrays' to check and set nil for individual elements */
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether ids is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isIdsNil();
++
++
++        
++
++        /**
++         * Check whether partialMatches is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isPartialMatchesNil();
++
++
++        
++        /**
++         * Set partialMatches to Nill (same as using reset)
++         * @return true on success, false otherwise.
++         */
++        bool WSF_CALL
++        setPartialMatchesNil();
++        
++
++        /*************************** Checking and Setting 'NIL' values in Arrays *****************************/
++
++        /**
++         * NOTE: You may set this to remove specific elements in the array
++         *       But you can not remove elements, if the specific property is declared to be non-nillable or sizeof(array) < minOccurs
++         */
++        
++        /**
++         * Check whether ids is Nill at position i
++         * @param i index of the item to return.
++         * @return true if the value is Nil at position i, false otherwise
++         */
++        bool WSF_CALL
++        isIdsNilAt(int i);
++ 
++       
++        /**
++         * Set ids to NILL at the  position i.
++         * @param i . The index of the item to be set Nill.
++         * @return true on success, false otherwise.
++         */
++        bool WSF_CALL
++        setIdsNilAt(int i);
++
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param GetJobSummary_om_node node to serialize from
++         * @param GetJobSummary_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* GetJobSummary_om_node, axiom_element_t *GetJobSummary_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the GetJobSummary is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for ids by property number (1)
++         * @return Array of AviaryCommon::JobIDs.
++         */
++
++        std::vector<AviaryCommon::JobID*>* WSF_CALL
++        getProperty1();
++
++    
++        
++
++        /**
++         * Getter for partialMatches by property number (2)
++         * @return bool
++         */
++
++        bool WSF_CALL
++        getProperty2();
++
++    
++
++};
++
++}        
++ #endif /* GETJOBSUMMARY_H */
++    
++
+diff --git a/src/condor_contrib/aviary/include/AviaryQuery_GetJobSummaryResponse.h b/src/condor_contrib/aviary/include/AviaryQuery_GetJobSummaryResponse.h
+new file mode 100644
+index 0000000..5946d52
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryQuery_GetJobSummaryResponse.h
+@@ -0,0 +1,300 @@
++
++
++        #ifndef AviaryQuery_GETJOBSUMMARYRESPONSE_H
++        #define AviaryQuery_GETJOBSUMMARYRESPONSE_H
++
++       /**
++        * GetJobSummaryResponse.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  GetJobSummaryResponse class
++        */
++
++        namespace AviaryQuery{
++            class GetJobSummaryResponse;
++        }
++        
++
++        
++       #include "AviaryCommon_JobSummary.h"
++          
++        #include <axutil_qname.h>
++        
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryQuery
++{
++        
++        
++
++        class GetJobSummaryResponse {
++
++        private:
++             
++                axutil_qname_t* qname;
++            std::vector<AviaryCommon::JobSummary*>* property_Jobs;
++
++                
++                bool isValidJobs;
++            
++
++        /*** Private methods ***/
++          
++
++        bool WSF_CALL
++        setJobsNil();
++            
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class GetJobSummaryResponse
++         */
++
++        GetJobSummaryResponse();
++
++        /**
++         * Destructor GetJobSummaryResponse
++         */
++        ~GetJobSummaryResponse();
++
++
++       
++
++        /**
++         * Constructor for creating GetJobSummaryResponse
++         * @param 
++         * @param Jobs std::vector<AviaryCommon::JobSummary*>*
++         * @return newly created GetJobSummaryResponse object
++         */
++        GetJobSummaryResponse(std::vector<AviaryCommon::JobSummary*>* arg_Jobs);
++        
++        
++        /********************************** Class get set methods **************************************/
++        /******** Deprecated for array types, Use 'Getters and Setters for Arrays' instead ***********/
++        
++
++        /**
++         * Getter for jobs. Deprecated for array types, Use getJobsAt instead
++         * @return Array of AviaryCommon::JobSummary*s.
++         */
++        WSF_EXTERN std::vector<AviaryCommon::JobSummary*>* WSF_CALL
++        getJobs();
++
++        /**
++         * Setter for jobs.Deprecated for array types, Use setJobsAt
++         * or addJobs instead.
++         * @param arg_Jobs Array of AviaryCommon::JobSummary*s.
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setJobs(std::vector<AviaryCommon::JobSummary*>*  arg_Jobs);
++
++        /**
++         * Re setter for jobs
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetJobs();
++        
++        /****************************** Get Set methods for Arrays **********************************/
++        /************ Array Specific Operations: get_at, set_at, add, remove_at, sizeof *****************/
++
++        /**
++         * E.g. use of get_at, set_at, add and sizeof
++         *
++         * for(i = 0; i < adb_element->sizeofProperty(); i ++ )
++         * {
++         *     // Getting ith value to property_object variable
++         *     property_object = adb_element->getPropertyAt(i);
++         *
++         *     // Setting ith value from property_object variable
++         *     adb_element->setPropertyAt(i, property_object);
++         *
++         *     // Appending the value to the end of the array from property_object variable
++         *     adb_element->addProperty(property_object);
++         *
++         *     // Removing the ith value from an array
++         *     adb_element->removePropertyAt(i);
++         *     
++         * }
++         *
++         */
++
++        
++        
++        /**
++         * Get the ith element of jobs.
++        * @param i index of the item to be obtained
++         * @return ith AviaryCommon::JobSummary* of the array
++         */
++        WSF_EXTERN AviaryCommon::JobSummary* WSF_CALL
++        getJobsAt(int i);
++
++        /**
++         * Set the ith element of jobs. (If the ith already exist, it will be replaced)
++         * @param i index of the item to return
++         * @param arg_Jobs element to set AviaryCommon::JobSummary* to the array
++         * @return ith AviaryCommon::JobSummary* of the array
++         */
++        WSF_EXTERN bool WSF_CALL
++        setJobsAt(int i,
++                AviaryCommon::JobSummary* arg_Jobs);
++
++
++        /**
++         * Add to jobs.
++         * @param arg_Jobs element to add AviaryCommon::JobSummary* to the array
++         * @return true on success, false otherwise.
++         */
++        WSF_EXTERN bool WSF_CALL
++        addJobs(
++            AviaryCommon::JobSummary* arg_Jobs);
++
++        /**
++         * Get the size of the jobs array.
++         * @return the size of the jobs array.
++         */
++        WSF_EXTERN int WSF_CALL
++        sizeofJobs();
++
++        /**
++         * Remove the ith element of jobs.
++         * @param i index of the item to remove
++         * @return true on success, false otherwise.
++         */
++        WSF_EXTERN bool WSF_CALL
++        removeJobsAt(int i);
++
++        
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        /* Use 'Checking and Setting NIL values for Arrays' to check and set nil for individual elements */
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether jobs is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isJobsNil();
++
++
++        
++
++        /*************************** Checking and Setting 'NIL' values in Arrays *****************************/
++
++        /**
++         * NOTE: You may set this to remove specific elements in the array
++         *       But you can not remove elements, if the specific property is declared to be non-nillable or sizeof(array) < minOccurs
++         */
++        
++        /**
++         * Check whether jobs is Nill at position i
++         * @param i index of the item to return.
++         * @return true if the value is Nil at position i, false otherwise
++         */
++        bool WSF_CALL
++        isJobsNilAt(int i);
++ 
++       
++        /**
++         * Set jobs to NILL at the  position i.
++         * @param i . The index of the item to be set Nill.
++         * @return true on success, false otherwise.
++         */
++        bool WSF_CALL
++        setJobsNilAt(int i);
++
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param GetJobSummaryResponse_om_node node to serialize from
++         * @param GetJobSummaryResponse_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* GetJobSummaryResponse_om_node, axiom_element_t *GetJobSummaryResponse_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the GetJobSummaryResponse is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for jobs by property number (1)
++         * @return Array of AviaryCommon::JobSummarys.
++         */
++
++        std::vector<AviaryCommon::JobSummary*>* WSF_CALL
++        getProperty1();
++
++    
++
++};
++
++}        
++ #endif /* GETJOBSUMMARYRESPONSE_H */
++    
++
+diff --git a/src/condor_contrib/aviary/include/AviaryQuery_GetSubmissionSummary.h b/src/condor_contrib/aviary/include/AviaryQuery_GetSubmissionSummary.h
+new file mode 100644
+index 0000000..0085561
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryQuery_GetSubmissionSummary.h
+@@ -0,0 +1,414 @@
++
++
++        #ifndef AviaryQuery_GETSUBMISSIONSUMMARY_H
++        #define AviaryQuery_GETSUBMISSIONSUMMARY_H
++
++       /**
++        * GetSubmissionSummary.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  GetSubmissionSummary class
++        */
++
++        namespace AviaryQuery{
++            class GetSubmissionSummary;
++        }
++        
++
++        
++       #include "AviaryCommon_SubmissionID.h"
++          
++        #include <axutil_qname.h>
++        
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryQuery
++{
++        
++        
++
++        class GetSubmissionSummary {
++
++        private:
++             
++                axutil_qname_t* qname;
++            std::vector<AviaryCommon::SubmissionID*>* property_Ids;
++
++                
++                bool isValidIds;
++            bool property_PartialMatches;
++
++                
++                bool isValidPartialMatches;
++            bool property_IncludeJobSummaries;
++
++                
++                bool isValidIncludeJobSummaries;
++            
++
++        /*** Private methods ***/
++          
++
++        bool WSF_CALL
++        setIdsNil();
++            
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class GetSubmissionSummary
++         */
++
++        GetSubmissionSummary();
++
++        /**
++         * Destructor GetSubmissionSummary
++         */
++        ~GetSubmissionSummary();
++
++
++       
++
++        /**
++         * Constructor for creating GetSubmissionSummary
++         * @param 
++         * @param Ids std::vector<AviaryCommon::SubmissionID*>*
++         * @param PartialMatches bool
++         * @param IncludeJobSummaries bool
++         * @return newly created GetSubmissionSummary object
++         */
++        GetSubmissionSummary(std::vector<AviaryCommon::SubmissionID*>* arg_Ids,bool arg_PartialMatches,bool arg_IncludeJobSummaries);
++        
++        
++        /********************************** Class get set methods **************************************/
++        /******** Deprecated for array types, Use 'Getters and Setters for Arrays' instead ***********/
++        
++
++        /**
++         * Getter for ids. Deprecated for array types, Use getIdsAt instead
++         * @return Array of AviaryCommon::SubmissionID*s.
++         */
++        WSF_EXTERN std::vector<AviaryCommon::SubmissionID*>* WSF_CALL
++        getIds();
++
++        /**
++         * Setter for ids.Deprecated for array types, Use setIdsAt
++         * or addIds instead.
++         * @param arg_Ids Array of AviaryCommon::SubmissionID*s.
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setIds(std::vector<AviaryCommon::SubmissionID*>*  arg_Ids);
++
++        /**
++         * Re setter for ids
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetIds();
++        
++        
++
++        /**
++         * Getter for partialMatches. 
++         * @return bool
++         */
++        WSF_EXTERN bool WSF_CALL
++        getPartialMatches();
++
++        /**
++         * Setter for partialMatches.
++         * @param arg_PartialMatches bool
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setPartialMatches(bool  arg_PartialMatches);
++
++        /**
++         * Re setter for partialMatches
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetPartialMatches();
++        
++        
++
++        /**
++         * Getter for includeJobSummaries. 
++         * @return bool
++         */
++        WSF_EXTERN bool WSF_CALL
++        getIncludeJobSummaries();
++
++        /**
++         * Setter for includeJobSummaries.
++         * @param arg_IncludeJobSummaries bool
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setIncludeJobSummaries(bool  arg_IncludeJobSummaries);
++
++        /**
++         * Re setter for includeJobSummaries
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetIncludeJobSummaries();
++        
++        /****************************** Get Set methods for Arrays **********************************/
++        /************ Array Specific Operations: get_at, set_at, add, remove_at, sizeof *****************/
++
++        /**
++         * E.g. use of get_at, set_at, add and sizeof
++         *
++         * for(i = 0; i < adb_element->sizeofProperty(); i ++ )
++         * {
++         *     // Getting ith value to property_object variable
++         *     property_object = adb_element->getPropertyAt(i);
++         *
++         *     // Setting ith value from property_object variable
++         *     adb_element->setPropertyAt(i, property_object);
++         *
++         *     // Appending the value to the end of the array from property_object variable
++         *     adb_element->addProperty(property_object);
++         *
++         *     // Removing the ith value from an array
++         *     adb_element->removePropertyAt(i);
++         *     
++         * }
++         *
++         */
++
++        
++        
++        /**
++         * Get the ith element of ids.
++        * @param i index of the item to be obtained
++         * @return ith AviaryCommon::SubmissionID* of the array
++         */
++        WSF_EXTERN AviaryCommon::SubmissionID* WSF_CALL
++        getIdsAt(int i);
++
++        /**
++         * Set the ith element of ids. (If the ith already exist, it will be replaced)
++         * @param i index of the item to return
++         * @param arg_Ids element to set AviaryCommon::SubmissionID* to the array
++         * @return ith AviaryCommon::SubmissionID* of the array
++         */
++        WSF_EXTERN bool WSF_CALL
++        setIdsAt(int i,
++                AviaryCommon::SubmissionID* arg_Ids);
++
++
++        /**
++         * Add to ids.
++         * @param arg_Ids element to add AviaryCommon::SubmissionID* to the array
++         * @return true on success, false otherwise.
++         */
++        WSF_EXTERN bool WSF_CALL
++        addIds(
++            AviaryCommon::SubmissionID* arg_Ids);
++
++        /**
++         * Get the size of the ids array.
++         * @return the size of the ids array.
++         */
++        WSF_EXTERN int WSF_CALL
++        sizeofIds();
++
++        /**
++         * Remove the ith element of ids.
++         * @param i index of the item to remove
++         * @return true on success, false otherwise.
++         */
++        WSF_EXTERN bool WSF_CALL
++        removeIdsAt(int i);
++
++        
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        /* Use 'Checking and Setting NIL values for Arrays' to check and set nil for individual elements */
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether ids is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isIdsNil();
++
++
++        
++
++        /**
++         * Check whether partialMatches is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isPartialMatchesNil();
++
++
++        
++        /**
++         * Set partialMatches to Nill (same as using reset)
++         * @return true on success, false otherwise.
++         */
++        bool WSF_CALL
++        setPartialMatchesNil();
++        
++
++        /**
++         * Check whether includeJobSummaries is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isIncludeJobSummariesNil();
++
++
++        
++        /**
++         * Set includeJobSummaries to Nill (same as using reset)
++         * @return true on success, false otherwise.
++         */
++        bool WSF_CALL
++        setIncludeJobSummariesNil();
++        
++
++        /*************************** Checking and Setting 'NIL' values in Arrays *****************************/
++
++        /**
++         * NOTE: You may set this to remove specific elements in the array
++         *       But you can not remove elements, if the specific property is declared to be non-nillable or sizeof(array) < minOccurs
++         */
++        
++        /**
++         * Check whether ids is Nill at position i
++         * @param i index of the item to return.
++         * @return true if the value is Nil at position i, false otherwise
++         */
++        bool WSF_CALL
++        isIdsNilAt(int i);
++ 
++       
++        /**
++         * Set ids to NILL at the  position i.
++         * @param i . The index of the item to be set Nill.
++         * @return true on success, false otherwise.
++         */
++        bool WSF_CALL
++        setIdsNilAt(int i);
++
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param GetSubmissionSummary_om_node node to serialize from
++         * @param GetSubmissionSummary_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* GetSubmissionSummary_om_node, axiom_element_t *GetSubmissionSummary_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the GetSubmissionSummary is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for ids by property number (1)
++         * @return Array of AviaryCommon::SubmissionIDs.
++         */
++
++        std::vector<AviaryCommon::SubmissionID*>* WSF_CALL
++        getProperty1();
++
++    
++        
++
++        /**
++         * Getter for partialMatches by property number (2)
++         * @return bool
++         */
++
++        bool WSF_CALL
++        getProperty2();
++
++    
++        
++
++        /**
++         * Getter for includeJobSummaries by property number (3)
++         * @return bool
++         */
++
++        bool WSF_CALL
++        getProperty3();
++
++    
++
++};
++
++}        
++ #endif /* GETSUBMISSIONSUMMARY_H */
++    
++
+diff --git a/src/condor_contrib/aviary/include/AviaryQuery_GetSubmissionSummaryResponse.h b/src/condor_contrib/aviary/include/AviaryQuery_GetSubmissionSummaryResponse.h
+new file mode 100644
+index 0000000..36b5a9e
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryQuery_GetSubmissionSummaryResponse.h
+@@ -0,0 +1,300 @@
++
++
++        #ifndef AviaryQuery_GETSUBMISSIONSUMMARYRESPONSE_H
++        #define AviaryQuery_GETSUBMISSIONSUMMARYRESPONSE_H
++
++       /**
++        * GetSubmissionSummaryResponse.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  GetSubmissionSummaryResponse class
++        */
++
++        namespace AviaryQuery{
++            class GetSubmissionSummaryResponse;
++        }
++        
++
++        
++       #include "AviaryCommon_SubmissionSummary.h"
++          
++        #include <axutil_qname.h>
++        
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryQuery
++{
++        
++        
++
++        class GetSubmissionSummaryResponse {
++
++        private:
++             
++                axutil_qname_t* qname;
++            std::vector<AviaryCommon::SubmissionSummary*>* property_Submissions;
++
++                
++                bool isValidSubmissions;
++            
++
++        /*** Private methods ***/
++          
++
++        bool WSF_CALL
++        setSubmissionsNil();
++            
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class GetSubmissionSummaryResponse
++         */
++
++        GetSubmissionSummaryResponse();
++
++        /**
++         * Destructor GetSubmissionSummaryResponse
++         */
++        ~GetSubmissionSummaryResponse();
++
++
++       
++
++        /**
++         * Constructor for creating GetSubmissionSummaryResponse
++         * @param 
++         * @param Submissions std::vector<AviaryCommon::SubmissionSummary*>*
++         * @return newly created GetSubmissionSummaryResponse object
++         */
++        GetSubmissionSummaryResponse(std::vector<AviaryCommon::SubmissionSummary*>* arg_Submissions);
++        
++        
++        /********************************** Class get set methods **************************************/
++        /******** Deprecated for array types, Use 'Getters and Setters for Arrays' instead ***********/
++        
++
++        /**
++         * Getter for submissions. Deprecated for array types, Use getSubmissionsAt instead
++         * @return Array of AviaryCommon::SubmissionSummary*s.
++         */
++        WSF_EXTERN std::vector<AviaryCommon::SubmissionSummary*>* WSF_CALL
++        getSubmissions();
++
++        /**
++         * Setter for submissions.Deprecated for array types, Use setSubmissionsAt
++         * or addSubmissions instead.
++         * @param arg_Submissions Array of AviaryCommon::SubmissionSummary*s.
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setSubmissions(std::vector<AviaryCommon::SubmissionSummary*>*  arg_Submissions);
++
++        /**
++         * Re setter for submissions
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetSubmissions();
++        
++        /****************************** Get Set methods for Arrays **********************************/
++        /************ Array Specific Operations: get_at, set_at, add, remove_at, sizeof *****************/
++
++        /**
++         * E.g. use of get_at, set_at, add and sizeof
++         *
++         * for(i = 0; i < adb_element->sizeofProperty(); i ++ )
++         * {
++         *     // Getting ith value to property_object variable
++         *     property_object = adb_element->getPropertyAt(i);
++         *
++         *     // Setting ith value from property_object variable
++         *     adb_element->setPropertyAt(i, property_object);
++         *
++         *     // Appending the value to the end of the array from property_object variable
++         *     adb_element->addProperty(property_object);
++         *
++         *     // Removing the ith value from an array
++         *     adb_element->removePropertyAt(i);
++         *     
++         * }
++         *
++         */
++
++        
++        
++        /**
++         * Get the ith element of submissions.
++        * @param i index of the item to be obtained
++         * @return ith AviaryCommon::SubmissionSummary* of the array
++         */
++        WSF_EXTERN AviaryCommon::SubmissionSummary* WSF_CALL
++        getSubmissionsAt(int i);
++
++        /**
++         * Set the ith element of submissions. (If the ith already exist, it will be replaced)
++         * @param i index of the item to return
++         * @param arg_Submissions element to set AviaryCommon::SubmissionSummary* to the array
++         * @return ith AviaryCommon::SubmissionSummary* of the array
++         */
++        WSF_EXTERN bool WSF_CALL
++        setSubmissionsAt(int i,
++                AviaryCommon::SubmissionSummary* arg_Submissions);
++
++
++        /**
++         * Add to submissions.
++         * @param arg_Submissions element to add AviaryCommon::SubmissionSummary* to the array
++         * @return true on success, false otherwise.
++         */
++        WSF_EXTERN bool WSF_CALL
++        addSubmissions(
++            AviaryCommon::SubmissionSummary* arg_Submissions);
++
++        /**
++         * Get the size of the submissions array.
++         * @return the size of the submissions array.
++         */
++        WSF_EXTERN int WSF_CALL
++        sizeofSubmissions();
++
++        /**
++         * Remove the ith element of submissions.
++         * @param i index of the item to remove
++         * @return true on success, false otherwise.
++         */
++        WSF_EXTERN bool WSF_CALL
++        removeSubmissionsAt(int i);
++
++        
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        /* Use 'Checking and Setting NIL values for Arrays' to check and set nil for individual elements */
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether submissions is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isSubmissionsNil();
++
++
++        
++
++        /*************************** Checking and Setting 'NIL' values in Arrays *****************************/
++
++        /**
++         * NOTE: You may set this to remove specific elements in the array
++         *       But you can not remove elements, if the specific property is declared to be non-nillable or sizeof(array) < minOccurs
++         */
++        
++        /**
++         * Check whether submissions is Nill at position i
++         * @param i index of the item to return.
++         * @return true if the value is Nil at position i, false otherwise
++         */
++        bool WSF_CALL
++        isSubmissionsNilAt(int i);
++ 
++       
++        /**
++         * Set submissions to NILL at the  position i.
++         * @param i . The index of the item to be set Nill.
++         * @return true on success, false otherwise.
++         */
++        bool WSF_CALL
++        setSubmissionsNilAt(int i);
++
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param GetSubmissionSummaryResponse_om_node node to serialize from
++         * @param GetSubmissionSummaryResponse_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* GetSubmissionSummaryResponse_om_node, axiom_element_t *GetSubmissionSummaryResponse_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the GetSubmissionSummaryResponse is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for submissions by property number (1)
++         * @return Array of AviaryCommon::SubmissionSummarys.
++         */
++
++        std::vector<AviaryCommon::SubmissionSummary*>* WSF_CALL
++        getProperty1();
++
++    
++
++};
++
++}        
++ #endif /* GETSUBMISSIONSUMMARYRESPONSE_H */
++    
++
+diff --git a/src/condor_contrib/aviary/include/AviaryQuery_QueryRequestType.h b/src/condor_contrib/aviary/include/AviaryQuery_QueryRequestType.h
+new file mode 100644
+index 0000000..40de943
+--- /dev/null
++++ b/src/condor_contrib/aviary/include/AviaryQuery_QueryRequestType.h
+@@ -0,0 +1,200 @@
++
++
++        #ifndef AviaryQuery_QUERYREQUESTTYPE_H
++        #define AviaryQuery_QUERYREQUESTTYPE_H
++
++       /**
++        * QueryRequestType.h
++        *
++        * This file was auto-generated from WSDL
++        * by the Apache Axis2/Java version: 1.0  Built on : Mar 02, 2011 (11:54:00 EST)
++        */
++
++       /**
++        *  QueryRequestType class
++        */
++
++        namespace AviaryQuery{
++            class QueryRequestType;
++        }
++        
++
++        
++
++        #include <stdio.h>
++        #include <OMElement.h>
++        #include <ServiceClient.h>
++        #include <ADBDefines.h>
++
++namespace AviaryQuery
++{
++        
++        
++
++        class QueryRequestType {
++
++        private:
++             bool property_AllowPartialMatching;
++
++                
++                bool isValidAllowPartialMatching;
++            
++
++        /*** Private methods ***/
++          
++
++
++
++        /******************************* public functions *********************************/
++
++        public:
++
++        /**
++         * Constructor for class QueryRequestType
++         */
++
++        QueryRequestType();
++
++        /**
++         * Destructor QueryRequestType
++         */
++        ~QueryRequestType();
++
++
++       
++
++        /**
++         * Constructor for creating QueryRequestType
++         * @param 
++         * @param AllowPartialMatching bool
++         * @return newly created QueryRequestType object
++         */
++        QueryRequestType(bool arg_AllowPartialMatching);
++        
++        
++        /********************************** Class get set methods **************************************/
++        
++        
++
++        /**
++         * Getter for allowPartialMatching. 
++         * @return bool
++         */
++        WSF_EXTERN bool WSF_CALL
++        getAllowPartialMatching();
++
++        /**
++         * Setter for allowPartialMatching.
++         * @param arg_AllowPartialMatching bool
++         * @return true on success, false otherwise
++         */
++        WSF_EXTERN bool WSF_CALL
++        setAllowPartialMatching(bool  arg_AllowPartialMatching);
++
++        /**
++         * Re setter for allowPartialMatching
++         * @return true on success, false
++         */
++        WSF_EXTERN bool WSF_CALL
++        resetAllowPartialMatching();
++        
++
++
++        /******************************* Checking and Setting NIL values *********************************/
++        
++
++        /**
++         * NOTE: set_nil is only available for nillable properties
++         */
++
++        
++
++        /**
++         * Check whether allowPartialMatching is Nill
++         * @return true if the element is Nil, false otherwise
++         */
++        bool WSF_CALL
++        isAllowPartialMatchingNil();
++
++
++        
++        /**
++         * Set allowPartialMatching to Nill (same as using reset)
++         * @return true on success, false otherwise.
++         */
++        bool WSF_CALL
++        setAllowPartialMatchingNil();
++        
++
++        /**************************** Serialize and De serialize functions ***************************/
++        /*********** These functions are for use only inside the generated code *********************/
++
++        
++        /**
++         * Deserialize the ADB object to an XML
++         * @param dp_parent double pointer to the parent node to be deserialized
++         * @param dp_is_early_node_valid double pointer to a flag (is_early_node_valid?)
++         * @param dont_care_minoccurs Dont set errors on validating minoccurs, 
++         *              (Parent will order this in a case of choice)
++         * @return true on success, false otherwise
++         */
++        bool WSF_CALL
++        deserialize(axiom_node_t** omNode, bool *isEarlyNodeValid, bool dontCareMinoccurs);
++                         
++            
++
++       /**
++         * Declare namespace in the most parent node 
++         * @param parent_element parent element
++         * @param namespaces hash of namespace uri to prefix
++         * @param next_ns_index pointer to an int which contain the next namespace index
++         */
++        void WSF_CALL
++        declareParentNamespaces(axiom_element_t *parent_element, axutil_hash_t *namespaces, int *next_ns_index);
++
++
++        
++
++        /**
++         * Serialize the ADB object to an xml
++         * @param QueryRequestType_om_node node to serialize from
++         * @param QueryRequestType_om_element parent element to serialize from
++         * @param tag_closed Whether the parent tag is closed or not
++         * @param namespaces hash of namespace uris to prefixes
++         * @param next_ns_index an int which contains the next namespace index
++         * @return axiom_node_t on success,NULL otherwise.
++         */
++        axiom_node_t* WSF_CALL
++        serialize(axiom_node_t* QueryRequestType_om_node, axiom_element_t *QueryRequestType_om_element, int tag_closed, axutil_hash_t *namespaces, int *next_ns_index);
++
++        /**
++         * Check whether the QueryRequestType is a particle class (E.g. group, inner sequence)
++         * @return true if this is a particle class, false otherwise.
++         */
++        bool WSF_CALL
++        isParticle();
++
++
++
++        /******************************* get the value by the property number  *********************************/
++        /************NOTE: This method is introduced to resolve a problem in unwrapping mode *******************/
++
++      
++        
++
++        /**
++         * Getter for allowPartialMatching by property number (1)
++         * @return bool
++         */
++
++        bool WSF_CALL
++        getProperty1();
++
++    
++
++};
++
++}        
++ #endif /* QUERYREQUESTTYPE_H */
++    
++
+diff --git a/src/condor_contrib/aviary/license.txt b/src/condor_contrib/aviary/license.txt
+new file mode 100644
+index 0000000..046ad71
+--- /dev/null
++++ b/src/condor_contrib/aviary/license.txt
+@@ -0,0 +1,14 @@
++Copyright 2009-2011 Red Hat, Inc.
++
++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.
++
+diff --git a/src/condor_contrib/aviary/services/job/services.xml b/src/condor_contrib/aviary/services/job/services.xml
+new file mode 100644
+index 0000000..ab94581
+--- /dev/null
++++ b/src/condor_contrib/aviary/services/job/services.xml
+@@ -0,0 +1,26 @@
++<!-- This file was auto-generated from WSDL -->
++<!-- by the Apache Axis2 version: 1.0  Built on : Jan 09, 2011 (11:40:28 EST) -->
++<service name="AviaryJobService">
++<parameter name="ServiceClass" locked="xsd:false">aviary_job_axis</parameter>
++<description>AviaryJobServiceService</description>
++<operation name="submitJob" mep="http://www.w3.org/2004/08/wsdl/in-out">
++<messageReceiver class="libwsf_cpp_msg_recv.so.0"/>
++<parameter name="wsamapping">job#submit</parameter>
++</operation>
++<operation name="holdJob" mep="http://www.w3.org/2004/08/wsdl/in-out">
++<messageReceiver class="libwsf_cpp_msg_recv.so.0"/>
++<parameter name="wsamapping">job#hold</parameter>
++</operation>
++<operation name="releaseJob" mep="http://www.w3.org/2004/08/wsdl/in-out">
++<messageReceiver class="libwsf_cpp_msg_recv.so.0"/>
++<parameter name="wsamapping">job#release</parameter>
++</operation>
++<operation name="removeJob" mep="http://www.w3.org/2004/08/wsdl/in-out">
++<messageReceiver class="libwsf_cpp_msg_recv.so.0"/>
++<parameter name="wsamapping">job#remove</parameter>
++</operation>
++<operation name="setJobAttribute" mep="http://www.w3.org/2004/08/wsdl/in-out">
++<messageReceiver class="libwsf_cpp_msg_recv.so.0"/>
++<parameter name="wsamapping">job#setattr</parameter>
++</operation>
++</service>
+diff --git a/src/condor_contrib/aviary/services/query/services.xml b/src/condor_contrib/aviary/services/query/services.xml
+new file mode 100644
+index 0000000..b516976a
+--- /dev/null
++++ b/src/condor_contrib/aviary/services/query/services.xml
+@@ -0,0 +1,26 @@
++<!-- This file was auto-generated from WSDL -->
++<!-- by the Apache Axis2 version: 1.0  Built on : Mar 02, 2011 (11:53:41 EST) -->
++<service name="AviaryQueryService">
++<parameter name="ServiceClass" locked="xsd:false">aviary_query_axis</parameter>
++<description>AviaryQueryServiceService</description>
++<operation name="getJobSummary" mep="http://www.w3.org/2004/08/wsdl/in-out">
++<messageReceiver class="libwsf_cpp_msg_recv.so.0"/>
++<parameter name="wsamapping">query#summary</parameter>
++</operation>
++<operation name="getJobStatus" mep="http://www.w3.org/2004/08/wsdl/in-out">
++<messageReceiver class="libwsf_cpp_msg_recv.so.0"/>
++<parameter name="wsamapping">query#status</parameter>
++</operation>
++<operation name="getJobDetails" mep="http://www.w3.org/2004/08/wsdl/in-out">
++<messageReceiver class="libwsf_cpp_msg_recv.so.0"/>
++<parameter name="wsamapping">query#details</parameter>
++</operation>
++<operation name="getJobData" mep="http://www.w3.org/2004/08/wsdl/in-out">
++<messageReceiver class="libwsf_cpp_msg_recv.so.0"/>
++<parameter name="wsamapping">query#data</parameter>
++</operation>
++<operation name="getSubmissionSummary" mep="http://www.w3.org/2004/08/wsdl/in-out">
++<messageReceiver class="libwsf_cpp_msg_recv.so.0"/>
++<parameter name="wsamapping">query#submission</parameter>
++</operation>
++</service>
+diff --git a/src/condor_contrib/aviary/src/AviaryConversionMacros.h b/src/condor_contrib/aviary/src/AviaryConversionMacros.h
+new file mode 100644
+index 0000000..f809e75
+--- /dev/null
++++ b/src/condor_contrib/aviary/src/AviaryConversionMacros.h
+@@ -0,0 +1,82 @@
++/*
++ * Copyright 2009-2011 Red Hat, Inc.
++ *
++ * 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.
++ */
++
++#ifndef AVIARY_CONVERSION_MACROS_H
++#define AVIARY_CONVERSION_MACROS_H
++
++#define MGMT_DECLARATIONS	\
++ExprTree *expr;				\
++int num;					\
++float flt;					\
++char *str;					\
++(void)expr;(void)num;(void)flt;(void)str;
++
++
++#define BASE(attr,type,lookup_var,set_var,extra)					\
++if (ad.Lookup##type(#attr, lookup_var)) {							\
++	m_stats.attr = ((set_var) extra);						\
++} else {															\
++	dprintf(D_FULLDEBUG, "Warning: Could not find " #attr "\n");		\
++}
++
++#define OPT_BASE(attr,type,lookup_var,set_var,extra)				\
++if (ad.Lookup##type(#attr, lookup_var)) {							\
++	m_stats.attr = ((set_var) extra);						\
++} else {															\
++	m_stats.attr = "";										\
++}
++
++#define STRING(attr)												\
++if (ad.LookupString(#attr, &str)) {									\
++	m_stats.attr = str;									\
++	free(str);														\
++} else {															\
++	dprintf(D_FULLDEBUG, "Warning: Could not find " #attr "\n");		\
++}
++
++#define OPT_STRING(attr)												\
++if (ad.LookupString(#attr, &str)) {									\
++	m_stats.attr = str;									\
++	free(str);														\
++} else {															\
++	m_stats.attr = "";										\
++}
++
++#define INTEGER(attr) BASE(attr,Integer,num,(uint32_t) num,)
++#define OPT_INTEGER(attr) OPT_BASE(attr,Integer,num,(uint32_t) num,)
++#define DOUBLE(attr) BASE(attr,Float,flt,(double) flt,)
++#define OPT_DOUBLE(attr) OPT_BASE(attr,Float,flt,(double) flt,)
++#define TIME_INTEGER(attr) BASE(attr,Integer,num,(uint64_t) num,* 1000000000)
++#define OPT_TIME_INTEGER(attr) OPT_BASE(attr,Integer,num,(uint64_t) num,* 1000000000)
++
++#define EXPR(attr)													\
++	EXPR_BASE(attr,													\
++			  dprintf(D_FULLDEBUG, "Warning: " #attr " not found\n"))
++
++#define OPT_EXPR(attr)											 	\
++	EXPR_BASE(attr,													\
++			  m_stats.attr = "")
++
++#define EXPR_BASE(attr,else_action)									\
++expr = ad.Lookup(#attr);											\
++if (expr) {                                                         \
++      str = const_cast<char*>(ExprTreeToString(expr));              \
++      m_stats.attr = str;                             \
++} else {                                                         \
++      dprintf(D_FULLDEBUG, "Warning: " #attr " has no value\n");    	\
++}
++
++#endif /* AVIARY_CONVERSION_MACROS_H */
+diff --git a/src/condor_contrib/aviary/src/AviaryJobService.cpp b/src/condor_contrib/aviary/src/AviaryJobService.cpp
+new file mode 100644
+index 0000000..ee80c5e
+--- /dev/null
++++ b/src/condor_contrib/aviary/src/AviaryJobService.cpp
+@@ -0,0 +1,356 @@
++/*
++ * Copyright 2009-2011 Red Hat, Inc.
++ *
++ * 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.
++ */
++
++        #include "AviaryJobServiceSkeleton.h"
++        #include "AviaryJobService.h"  
++        #include <ServiceSkeleton.h>
++        #include <stdio.h>
++        #include <axis2_svc.h>
++        #include <Environment.h>
++        #include <axiom_soap.h>
++
++
++        using namespace wso2wsf;
++        
++        using namespace AviaryJob;
++        
++
++        /** Load the service into axis2 engine */
++        WSF_SERVICE_INIT(AviaryJobService)
++
++          
++         /**
++          * function to free any soap input headers
++          */
++         AviaryJobService::AviaryJobService()
++	{
++          skel = wsfGetAviaryJobServiceSkeleton();
++    }
++
++
++	void WSF_CALL
++	AviaryJobService::init()
++	{
++
++      return;
++	}
++
++
++	AviaryJobService::~AviaryJobService()
++	{
++    }
++
++
++     
++
++     
++
++
++
++
++	/*
++	 * This method invokes the right service method
++	 */
++	OMElement* WSF_CALL
++	AviaryJobService::invoke(OMElement *omEle, MessageContext *msgCtx)
++	{
++         /* Using the function name, invoke the corresponding method
++          */
++
++          axis2_op_ctx_t *operation_ctx = NULL;
++          axis2_op_t *operation = NULL;
++          axutil_qname_t *op_qname = NULL;
++          axis2_char_t *op_name = NULL;
++          axis2_msg_ctx_t *in_msg_ctx = NULL;
++          
++          axiom_soap_envelope_t *req_soap_env = NULL;
++          axiom_soap_header_t *req_soap_header = NULL;
++          axiom_soap_envelope_t *res_soap_env = NULL;
++          axiom_soap_header_t *res_soap_header = NULL;
++
++          axiom_node_t *ret_node = NULL;
++          axiom_node_t *input_header = NULL;
++          axiom_node_t *output_header = NULL;
++          axiom_node_t *header_base_node = NULL;
++          axis2_msg_ctx_t *msg_ctx = NULL;
++          axiom_node_t* content_node = omEle->getAxiomNode();
++
++          
++            AviaryJob::RemoveJobResponse* ret_val1;
++            AviaryJob::RemoveJob* input_val1;
++            
++            AviaryJob::ReleaseJobResponse* ret_val2;
++            AviaryJob::ReleaseJob* input_val2;
++            
++            AviaryJob::SubmitJobResponse* ret_val3;
++            AviaryJob::SubmitJob* input_val3;
++            
++            AviaryJob::HoldJobResponse* ret_val4;
++            AviaryJob::HoldJob* input_val4;
++            
++            AviaryJob::SetJobAttributeResponse* ret_val5;
++            AviaryJob::SetJobAttribute* input_val5;
++            
++       
++          msg_ctx = msgCtx->getAxis2MessageContext();
++          operation_ctx = axis2_msg_ctx_get_op_ctx(msg_ctx, Environment::getEnv());
++          operation = axis2_op_ctx_get_op(operation_ctx, Environment::getEnv());
++          op_qname = (axutil_qname_t *)axis2_op_get_qname(operation, Environment::getEnv());
++          op_name = axutil_qname_get_localpart(op_qname, Environment::getEnv());
++
++          if (op_name)
++          {
++               
++
++                if ( axutil_strcmp(op_name, "removeJob") == 0 )
++                {
++
++                    
++                    input_val1 =
++                        
++                        new AviaryJob::RemoveJob();
++                        if( AXIS2_FAILURE ==  input_val1->deserialize(&content_node, NULL, false))
++                        {
++                                        
++                            AXIS2_ERROR_SET(Environment::getEnv()->error, AXIS2_ERROR_DATA_ELEMENT_IS_NULL, AXIS2_FAILURE);
++                            AXIS2_LOG_ERROR( Environment::getEnv()->log, AXIS2_LOG_SI, "NULL returned from the AviaryJob::RemoveJob_deserialize: "
++                                        "This should be due to an invalid XML");
++                            return NULL;      
++                        }
++                        
++                        //AviaryJobServiceSkeleton skel;
++                        ret_val1 =  skel->removeJob(msgCtx ,input_val1);
++                    
++                        if ( NULL == ret_val1 )
++                        {
++                            
++                                delete input_val1;
++                            
++                            return NULL; 
++                        }
++                        ret_node = 
++                                            ret_val1->serialize(NULL, NULL, AXIS2_TRUE, NULL, NULL);
++                                            delete ret_val1;
++                                        
++                                            delete input_val1;
++                                        
++
++                        return new OMElement(NULL,ret_node);
++                    
++
++                    /* since this has no output params it just returns NULL */                    
++                    
++
++                }
++             
++
++                if ( axutil_strcmp(op_name, "releaseJob") == 0 )
++                {
++
++                    
++                    input_val2 =
++                        
++                        new AviaryJob::ReleaseJob();
++                        if( AXIS2_FAILURE ==  input_val2->deserialize(&content_node, NULL, false))
++                        {
++                                        
++                            AXIS2_ERROR_SET(Environment::getEnv()->error, AXIS2_ERROR_DATA_ELEMENT_IS_NULL, AXIS2_FAILURE);
++                            AXIS2_LOG_ERROR( Environment::getEnv()->log, AXIS2_LOG_SI, "NULL returned from the AviaryJob::ReleaseJob_deserialize: "
++                                        "This should be due to an invalid XML");
++                            return NULL;      
++                        }
++                        
++                        //AviaryJobServiceSkeleton skel;
++                        ret_val2 =  skel->releaseJob(msgCtx ,input_val2);
++                    
++                        if ( NULL == ret_val2 )
++                        {
++                            
++                                delete input_val2;
++                            
++                            return NULL; 
++                        }
++                        ret_node = 
++                                            ret_val2->serialize(NULL, NULL, AXIS2_TRUE, NULL, NULL);
++                                            delete ret_val2;
++                                        
++                                            delete input_val2;
++                                        
++
++                        return new OMElement(NULL,ret_node);
++                    
++
++                    /* since this has no output params it just returns NULL */                    
++                    
++
++                }
++             
++
++                if ( axutil_strcmp(op_name, "submitJob") == 0 )
++                {
++
++                    
++                    input_val3 =
++                        
++                        new AviaryJob::SubmitJob();
++                        if( AXIS2_FAILURE ==  input_val3->deserialize(&content_node, NULL, false))
++                        {
++                                        
++                            AXIS2_ERROR_SET(Environment::getEnv()->error, AXIS2_ERROR_DATA_ELEMENT_IS_NULL, AXIS2_FAILURE);
++                            AXIS2_LOG_ERROR( Environment::getEnv()->log, AXIS2_LOG_SI, "NULL returned from the AviaryJob::SubmitJob_deserialize: "
++                                        "This should be due to an invalid XML");
++                            return NULL;      
++                        }
++                        
++                        //AviaryJobServiceSkeleton skel;
++                        ret_val3 =  skel->submitJob(msgCtx ,input_val3);
++                    
++                        if ( NULL == ret_val3 )
++                        {
++                            
++                                delete input_val3;
++                            
++                            return NULL; 
++                        }
++                        ret_node = 
++                                            ret_val3->serialize(NULL, NULL, AXIS2_TRUE, NULL, NULL);
++                                            delete ret_val3;
++                                        
++                                            delete input_val3;
++                                        
++
++                        return new OMElement(NULL,ret_node);
++                    
++
++                    /* since this has no output params it just returns NULL */                    
++                    
++
++                }
++             
++
++                if ( axutil_strcmp(op_name, "holdJob") == 0 )
++                {
++
++                    
++                    input_val4 =
++                        
++                        new AviaryJob::HoldJob();
++                        if( AXIS2_FAILURE ==  input_val4->deserialize(&content_node, NULL, false))
++                        {
++                                        
++                            AXIS2_ERROR_SET(Environment::getEnv()->error, AXIS2_ERROR_DATA_ELEMENT_IS_NULL, AXIS2_FAILURE);
++                            AXIS2_LOG_ERROR( Environment::getEnv()->log, AXIS2_LOG_SI, "NULL returned from the AviaryJob::HoldJob_deserialize: "
++                                        "This should be due to an invalid XML");
++                            return NULL;      
++                        }
++                        
++                        //AviaryJobServiceSkeleton skel;
++                        ret_val4 =  skel->holdJob(msgCtx ,input_val4);
++                    
++                        if ( NULL == ret_val4 )
++                        {
++                            
++                                delete input_val4;
++                            
++                            return NULL; 
++                        }
++                        ret_node = 
++                                            ret_val4->serialize(NULL, NULL, AXIS2_TRUE, NULL, NULL);
++                                            delete ret_val4;
++                                        
++                                            delete input_val4;
++                                        
++
++                        return new OMElement(NULL,ret_node);
++                    
++
++                    /* since this has no output params it just returns NULL */                    
++                    
++
++                }
++             
++
++                if ( axutil_strcmp(op_name, "setJobAttribute") == 0 )
++                {
++
++                    
++                    input_val5 =
++                        
++                        new AviaryJob::SetJobAttribute();
++                        if( AXIS2_FAILURE ==  input_val5->deserialize(&content_node, NULL, false))
++                        {
++                                        
++                            AXIS2_ERROR_SET(Environment::getEnv()->error, AXIS2_ERROR_DATA_ELEMENT_IS_NULL, AXIS2_FAILURE);
++                            AXIS2_LOG_ERROR( Environment::getEnv()->log, AXIS2_LOG_SI, "NULL returned from the AviaryJob::SetJobAttribute_deserialize: "
++                                        "This should be due to an invalid XML");
++                            return NULL;      
++                        }
++                        
++                        //AviaryJobServiceSkeleton skel;
++                        ret_val5 =  skel->setJobAttribute(msgCtx ,input_val5);
++                    
++                        if ( NULL == ret_val5 )
++                        {
++                            
++                                delete input_val5;
++                            
++                            return NULL; 
++                        }
++                        ret_node = 
++                                            ret_val5->serialize(NULL, NULL, AXIS2_TRUE, NULL, NULL);
++                                            delete ret_val5;
++                                        
++                                            delete input_val5;
++                                        
++
++                        return new OMElement(NULL,ret_node);
++                    
++
++                    /* since this has no output params it just returns NULL */                    
++                    
++
++                }
++             
++             }
++            
++          AXIS2_LOG_ERROR(Environment::getEnv()->log, AXIS2_LOG_SI, "AviaryJobService service ERROR: invalid OM parameters in request\n");
++          return NULL;
++    }
++
++    OMElement* WSF_CALL
++    AviaryJobService::onFault(OMElement* omEle)
++	{
++		axiom_node_t *error_node = NULL;
++		axiom_element_t *error_ele = NULL;
++        axutil_error_codes_t error_code;
++        axiom_node_t *node = omEle->getAxiomNode();
++        error_code = (axutil_error_codes_t)Environment::getEnv()->error->error_number;
++
++        if(error_code <= AVIARYJOBSERVICESKELETON_ERROR_NONE ||
++                error_code >= AVIARYJOBSERVICESKELETON_ERROR_LAST )
++        {
++            error_ele = axiom_element_create(Environment::getEnv(), node, "fault", NULL,
++                            &error_node);
++            axiom_element_set_text(error_ele, Environment::getEnv(), "AviaryJobService|http://grid.redhat.com/aviary-job/ failed",
++                            error_node);
++        }
++        
++
++		return new OMElement(NULL,error_node);
++	}
++
++    
++
+diff --git a/src/condor_contrib/aviary/src/AviaryJobService.h b/src/condor_contrib/aviary/src/AviaryJobService.h
+new file mode 100644
+index 0000000..7e0be8b
+--- /dev/null
++++ b/src/condor_contrib/aviary/src/AviaryJobService.h
+@@ -0,0 +1,66 @@
++/*
++ * Copyright 2009-2011 Red Hat, Inc.
++ *
++ * 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.
++ */
++
++          #ifndef AVIARYJOBSERVICE_H
++          #define AVIARYJOBSERVICE_H
++
++#include <ServiceSkeleton.h>
++#include <stdio.h>
++#include <axis2_svc.h>
++
++using namespace wso2wsf;
++
++
++using namespace AviaryJob;
++
++
++
++#define WSF_SERVICE_SKEL_INIT(class_name) \
++AviaryJobServiceSkeleton* wsfGetAviaryJobServiceSkeleton(){ return new class_name(); }
++
++AviaryJobServiceSkeleton* wsfGetAviaryJobServiceSkeleton(); 
++
++
++
++        class AviaryJobService : public ServiceSkeleton
++        {
++            private:
++                AviaryJobServiceSkeleton *skel;
++
++            public:
++
++               union {
++                     
++               } fault;
++
++
++              WSF_EXTERN WSF_CALL AviaryJobService();
++
++              OMElement* WSF_CALL invoke(OMElement *message, MessageContext *msgCtx);
++
++              OMElement* WSF_CALL onFault(OMElement *message);
++
++              void WSF_CALL init();
++
++              ~AviaryJobService(); 
++      };
++
++
++
++#endif    //     AVIARYJOBSERVICE_H
++
++    
++
+diff --git a/src/condor_contrib/aviary/src/AviaryJobServiceMacro.cpp b/src/condor_contrib/aviary/src/AviaryJobServiceMacro.cpp
+new file mode 100644
+index 0000000..76fc6cb
+--- /dev/null
++++ b/src/condor_contrib/aviary/src/AviaryJobServiceMacro.cpp
+@@ -0,0 +1,44 @@
++/*
++ * Copyright 2009-2011 Red Hat, Inc.
++ *
++ * 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.
++ */
++
++
++#include "AviaryJobServiceSkeleton.h"
++#include "AviaryJobService.h"
++#include <ServiceSkeleton.h>
++#include <stdio.h>
++#include <axis2_svc.h>
++#include <Environment.h>
++
++using namespace wso2wsf;
++
++using namespace AviaryJob;
++
++
++
++/** Load the service into engine
++Note:- If you are extending from the Generated Skeleton class,you need is to change the argument provided to the
++macro to your derived class name.
++Example
++If your service is Calculator, you will have the business logic implementation class as CalculatorSkeleton.
++If the extended class is CalculatorSkeletonImpl, then you change the argument to the macro WSF_SERVICE_SKEL_INIT as
++WSF_SERVICE_SKEL_INIT(CalculatorSkeletonImpl). Also include the header file of the derived class, in this case CalculatorSkeletonImpl.h
++
++*/
++
++WSF_SERVICE_SKEL_INIT(AviaryJobServiceSkeleton)
++
++
++
+diff --git a/src/condor_contrib/aviary/src/AviaryJobServiceSkeleton.cpp b/src/condor_contrib/aviary/src/AviaryJobServiceSkeleton.cpp
+new file mode 100644
+index 0000000..3b768d8
+--- /dev/null
++++ b/src/condor_contrib/aviary/src/AviaryJobServiceSkeleton.cpp
+@@ -0,0 +1,361 @@
++/*
++ * Copyright 2009-2011 Red Hat, Inc.
++ *
++ * 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.
++ */
++
++// the implementation class for AviaryJob methods
++
++// condor includes
++#include "condor_common.h"
++#include "condor_config.h"
++#include "condor_attributes.h"
++
++extern bool qmgmt_all_users_trusted;
++
++// local includes
++#include "AviaryJobServiceSkeleton.h"
++#include <AviaryJob_RemoveJob.h>
++#include <AviaryJob_RemoveJobResponse.h>
++#include <AviaryJob_ReleaseJob.h>
++#include <AviaryJob_ReleaseJobResponse.h>
++#include <AviaryJob_SubmitJob.h>
++#include <AviaryJob_SubmitJobResponse.h>
++#include <AviaryJob_HoldJob.h>
++#include <AviaryJob_HoldJobResponse.h>
++#include <AviaryJob_SetJobAttribute.h>
++#include <AviaryJob_SetJobAttributeResponse.h>
++#include "Codec.h"
++#include "SchedulerObject.h"
++#include "stl_string_utils.h"
++
++using namespace std;
++using namespace AviaryJob;
++using namespace AviaryCommon;
++using namespace aviary::codec;
++using namespace aviary::job;
++using namespace compat_classad;
++
++const char* BASIC_REQ_FORMAT = 
++"\
++( TARGET.Arch %s ) && \
++( %s ) && \
++( TARGET.Disk %s ) && \
++( ( TARGET.Memory * 1024 ) %s ) && \
++( TARGET.FileSystemDomain %s )";
++
++const char* BASIC_OS_FORMAT = "TARGET.OpSys == \"%s\"";
++const char* BASIC_WINOS_FORMAT = "TARGET.OpSys==\"WINNT51\" || TARGET.OpSys==\"WINNT52\" || TARGET.OpSys==\"WINNT60\"";
++const char* REQ_UNDEFINED = " =!= undefined ";
++const char* REQ_GTE_ZERO = " >= 0 ";
++
++//
++// Utility methods START
++//
++
++typedef vector<AviaryCommon::Attribute*> CommonAttributeCollection;
++
++void
++checkForSchedulerID(AviaryCommon::JobID* _jobId, string& _text)
++{
++	SchedulerObject* schedulerObj = SchedulerObject::getInstance();
++	if (!(_jobId->getPool() == schedulerObj->getPool()) ||
++		!(_jobId->getScheduler() == schedulerObj->getName())) {
++	_text = "WARNING: the pool and scheduler names of the requested jobid were empty or did not match this scheduler!";
++	}
++}
++
++void
++buildBasicRequirements(ResourceConstraintVectorType* _constraints, string& _reqs) {
++	// scan through these and build TARGET.<constraint> like string
++	string arch = REQ_UNDEFINED;
++	string opsys = REQ_UNDEFINED;
++	string disk = REQ_GTE_ZERO;
++	string memory = REQ_GTE_ZERO;
++	string filesystem = REQ_UNDEFINED;
++	for ( ResourceConstraintVectorType::const_iterator it = _constraints->begin(); it != _constraints->end();
++		 it++ ) {
++		ResourceConstraint* rc = *it;
++		ADBResourceConstraintTypeEnum rct = rc->getType()->getResourceConstraintTypeEnum();
++		switch (rct) {
++			case ResourceConstraintType_ARCH:
++				arch = " == \"" + rc->getValue() + "\"";
++				break;
++			case ResourceConstraintType_OS:
++				if (rc->getValue() == "WINDOWS") {
++					opsys = BASIC_WINOS_FORMAT;
++				}
++				else {
++					sprintf(opsys,BASIC_OS_FORMAT,rc->getValue().c_str());
++				}
++				break;
++            case ResourceConstraintType_DISK:
++				disk = " >= " + rc->getValue();
++				break;
++			case ResourceConstraintType_MEMORY:
++				memory = " >= " + rc->getValue();
++				break;
++            case ResourceConstraintType_FILESYSTEM:
++				filesystem = " == \"" + rc->getValue() + "\"";
++				break;
++			default:
++				dprintf(D_ALWAYS,"Ignoring unknown resource constraint submitted: %s:%s\n",
++						rc->getType()->getResourceConstraintType().c_str(),rc->getValue().c_str());
++		}
++	}
++	// order is important! see BASIC_REQ_FORMAT above
++	sprintf(_reqs, BASIC_REQ_FORMAT, arch.c_str(), opsys.c_str(), disk.c_str(), memory.c_str(), filesystem.c_str());
++}
++
++bool
++isBasicAttribute(const string& attr_name) {
++	return (
++		attr_name == ATTR_JOB_CMD ||
++		attr_name == ATTR_REQUIREMENTS ||
++		attr_name == ATTR_OWNER ||
++		attr_name == ATTR_JOB_IWD ||
++		attr_name == ATTR_JOB_ARGUMENTS1
++	);
++}
++
++void
++addExtraAttributes(const CommonAttributeCollection* extra_attrs, AttributeMapType& attr_map, bool override_basic) {
++	// add in the extras
++	for (CommonAttributeCollection::const_iterator i = extra_attrs->begin();i < extra_attrs->end();i++) {
++		AviaryCommon::Attribute* attr = *i;
++		const string& attr_key = attr->getName();
++
++		// Are we overriding our basic attributes?
++		if (!override_basic && isBasicAttribute(attr_key)) {
++			// exclude this attribute from the submission map
++			continue;
++		}
++
++		const char* attr_value = attr->getValue().c_str();
++		switch (attr->getType()->getAttributeTypeEnum()) {
++			case AviaryCommon::AttributeType_INTEGER:
++				attr_map[attr_key.c_str()] =
++					new AviaryAttribute(AviaryAttribute::INTEGER_TYPE,attr_value);
++			break;
++			case AviaryCommon::AttributeType_FLOAT:
++				attr_map[attr_key.c_str()] =
++					new AviaryAttribute(AviaryAttribute::FLOAT_TYPE,attr_value);
++			break;
++			case AviaryCommon::AttributeType_STRING:
++				attr_map[attr_key.c_str()] =
++					new AviaryAttribute(AviaryAttribute::STRING_TYPE,attr_value);
++			break;
++			case AviaryCommon::AttributeType_BOOLEAN:
++			case AviaryCommon::AttributeType_EXPRESSION:
++				attr_map[attr_key.c_str()] =
++					new AviaryAttribute(AviaryAttribute::EXPR_TYPE,attr_value);
++			break;
++			// probably shouldn't get here unless axis2 fails us
++			case AviaryCommon::AttributeType_ERROR:
++			case AviaryCommon::AttributeType_UNDEFINED:
++			default:
++				dprintf(D_FULLDEBUG,"Unknown type supplied for attribute '%s=%s'\n",
++						attr_key.c_str(),attr_value);
++		}
++	}
++}
++
++//
++// Utility methods END
++//
++
++//
++// Interface implementation START
++//
++
++
++AviaryJob::SubmitJobResponse*
++AviaryJobServiceSkeleton::submitJob(wso2wsf::MessageContext* /*outCtx*/ ,AviaryJob::SubmitJob* _submitJob)
++{
++    AviaryJob::SubmitJobResponse* submitJobResponse = new AviaryJob::SubmitJobResponse();
++	SchedulerObject* schedulerObj = SchedulerObject::getInstance();
++    AttributeMapType reqsMap, attrMap;
++	const char* submissionName = NULL;
++
++    // add the simple stuff first
++    attrMap[ATTR_JOB_CMD] = new AviaryAttribute(AviaryAttribute::STRING_TYPE, _submitJob->getCmd().c_str());
++    if (!(_submitJob->isArgsNil() || _submitJob->getArgs().empty())) {
++        attrMap[ATTR_JOB_ARGUMENTS1] = new AviaryAttribute(AviaryAttribute::STRING_TYPE, _submitJob->getArgs().c_str());
++    }
++    attrMap[ATTR_OWNER] = new AviaryAttribute(AviaryAttribute::STRING_TYPE, _submitJob->getOwner().c_str());
++    attrMap[ATTR_JOB_IWD] = new AviaryAttribute(AviaryAttribute::STRING_TYPE, _submitJob->getIwd().c_str());
++	if (!(_submitJob->isSubmission_nameNil() || _submitJob->getSubmission_name().empty())) {
++		submissionName = _submitJob->getSubmission_name().c_str();
++        attrMap[ATTR_JOB_SUBMISSION] = new AviaryAttribute(AviaryAttribute::STRING_TYPE,submissionName);
++    }
++
++    // build a requirements string and add to it
++    string reqBuilder;
++    if (!(_submitJob->isRequirementsNil() || _submitJob->getRequirements()->empty())) {
++        // build from resource constraints
++		buildBasicRequirements(_submitJob->getRequirements(), reqBuilder);
++    }
++    else {
++        // default
++        reqBuilder = "TRUE";
++    }
++    attrMap[ATTR_REQUIREMENTS] = new AviaryAttribute(AviaryAttribute::EXPR_TYPE, reqBuilder.c_str());
++
++    // need to add extras attrs also
++	// wso2 doesn't seem to make true nil checking easy
++	// might remove the Attributes element
++	CommonAttributeCollection* attrs = NULL;
++	if (!_submitJob->isExtraNil()) {
++		attrs = _submitJob->getExtra();
++		if (attrs && !attrs->empty()) {			
++			if (attrs && !attrs->empty()) {
++				addExtraAttributes(attrs, attrMap,_submitJob->getAllowOverrides());
++			}
++		}
++	}
++	
++    // invoke submit
++    string jobId, error;
++    // we need this since we don't have a trusted socket to the schedd,
++    // without it basically the schedd won't accept whatever we claim
++    // is Owner and the job will be pseudo-pruned
++    qmgmt_all_users_trusted = true;
++    if (!schedulerObj->submit(attrMap,jobId, error)) {
++        submitJobResponse->setStatus(new AviaryCommon::Status(new AviaryCommon::StatusCodeType("FAIL"),error));
++    }
++    else {
++        string submissionId;
++        if (submissionName) {
++			submissionId = submissionName;
++		}
++		else {
++			submissionId = schedulerObj->getName();
++			submissionId.append("#");
++			submissionId.append(jobId);
++		}
++        submitJobResponse->setId(new AviaryCommon::JobID(
++				jobId,schedulerObj->getPool(),schedulerObj->getName(),
++				new AviaryCommon::SubmissionID(submissionId,_submitJob->getOwner().c_str())));
++        submitJobResponse->setStatus(new AviaryCommon::Status(new AviaryCommon::StatusCodeType("OK"),""));
++    }
++    qmgmt_all_users_trusted = false;
++
++    return submitJobResponse;
++}
++
++
++// TODO: would be nice to template these next 3
++AviaryJob::HoldJobResponse*
++AviaryJobServiceSkeleton::holdJob(wso2wsf::MessageContext* /*outCtx*/ ,AviaryJob::HoldJob* _holdJob)
++{
++	AviaryJob::HoldJobResponse* holdJobResponse = new HoldJobResponse;
++	SchedulerObject* schedulerObj = SchedulerObject::getInstance();
++    string error;
++
++	AviaryCommon::JobID* jobId = _holdJob->getHoldJob()->getId();
++	string reason = _holdJob->getHoldJob()->getReason();
++	string cluster_proc = jobId->getJob();
++	ControlJobResponse* controlJobResponse = NULL;
++
++	checkForSchedulerID(jobId, error);
++	if (!schedulerObj->hold(cluster_proc,reason,error)) {
++		dprintf(D_FULLDEBUG, "SchedulerObject Hold failed: %s\n", error.c_str());
++		controlJobResponse = new ControlJobResponse(new AviaryCommon::Status(new AviaryCommon::StatusCodeType("FAIL"),error));
++	}
++	else {
++		// in this case, error may hve been the result of the pool/schedd check
++		controlJobResponse = new ControlJobResponse(new AviaryCommon::Status(new AviaryCommon::StatusCodeType("OK"),error));
++	}
++
++	holdJobResponse->setHoldJobResponse(controlJobResponse);
++    return holdJobResponse;
++}
++
++
++AviaryJob::ReleaseJobResponse*
++AviaryJobServiceSkeleton::releaseJob(wso2wsf::MessageContext* /*outCtx*/ ,AviaryJob::ReleaseJob* _releaseJob)
++{
++	AviaryJob::ReleaseJobResponse* releaseJobResponse = new ReleaseJobResponse;
++	SchedulerObject* schedulerObj = SchedulerObject::getInstance();
++    string error;
++
++	AviaryCommon::JobID* jobId = _releaseJob->getReleaseJob()->getId();
++	string reason = _releaseJob->getReleaseJob()->getReason();
++	string cluster_proc = jobId->getJob();
++	ControlJobResponse* controlJobResponse = NULL;
++
++	checkForSchedulerID(jobId, error);
++	if (!schedulerObj->release(cluster_proc,reason,error)) {
++		dprintf(D_FULLDEBUG, "SchedulerObject Release failed: %s\n", error.c_str());
++		controlJobResponse = new ControlJobResponse(new AviaryCommon::Status(new AviaryCommon::StatusCodeType("FAIL"),error));
++	}
++	else {
++		// in this case, error may hve been the result of the pool/schedd check
++		controlJobResponse = new ControlJobResponse(new AviaryCommon::Status(new AviaryCommon::StatusCodeType("OK"),error));
++	}
++
++	releaseJobResponse->setReleaseJobResponse(controlJobResponse);
++    return releaseJobResponse;
++}
++
++AviaryJob::RemoveJobResponse*
++AviaryJobServiceSkeleton::removeJob(wso2wsf::MessageContext* /*outCtx*/ ,AviaryJob::RemoveJob* _removeJob)
++{
++	AviaryJob::RemoveJobResponse* removeJobResponse = new RemoveJobResponse;
++	SchedulerObject* schedulerObj = SchedulerObject::getInstance();
++    string error;
++
++	AviaryCommon::JobID* jobId = _removeJob->getRemoveJob()->getId();
++	string reason = _removeJob->getRemoveJob()->getReason();
++	string cluster_proc = jobId->getJob();
++	ControlJobResponse* controlJobResponse = NULL;
++
++	checkForSchedulerID(jobId, error);
++	if (!schedulerObj->remove(cluster_proc,reason,error)) {
++		dprintf(D_FULLDEBUG, "SchedulerObject Remove failed: %s\n", error.c_str());
++		controlJobResponse = new ControlJobResponse(new AviaryCommon::Status(new AviaryCommon::StatusCodeType("FAIL"),error));
++	}
++	else {
++		// in this case, error may hve been the result of the pool/schedd check
++		controlJobResponse = new ControlJobResponse(new AviaryCommon::Status(new AviaryCommon::StatusCodeType("OK"),error));
++	}
++
++	removeJobResponse->setRemoveJobResponse(controlJobResponse);
++    return removeJobResponse;
++}
++
++AviaryJob::SetJobAttributeResponse*
++AviaryJobServiceSkeleton::setJobAttribute(wso2wsf::MessageContext* /*outCtx*/ ,AviaryJob::SetJobAttribute* _setJobAttribute)
++{
++	AviaryJob::SetJobAttributeResponse* setAttrResponse = new SetJobAttributeResponse;
++	SchedulerObject* schedulerObj = SchedulerObject::getInstance();
++    string error;
++
++	AviaryCommon::JobID* jobId = _setJobAttribute->getId();
++	AviaryCommon::Attribute* attr = _setJobAttribute->getAttribute();
++	string cluster_proc = jobId->getJob();
++	ControlJobResponse* controlJobResponse = NULL;
++
++	checkForSchedulerID(jobId, error);
++	if (!schedulerObj->setAttribute(cluster_proc,attr->getName(),attr->getValue(),error)) {
++		dprintf(D_FULLDEBUG, "SchedulerObject SetAttribute failed: %s\n", error.c_str());
++		controlJobResponse = new ControlJobResponse(new AviaryCommon::Status(new AviaryCommon::StatusCodeType("FAIL"),error));
++	}
++	else {
++		// in this case, error may hve been the result of the pool/schedd check
++		controlJobResponse = new ControlJobResponse(new AviaryCommon::Status(new AviaryCommon::StatusCodeType("OK"),error));
++	}
++
++	setAttrResponse->setSetJobAttributeResponse(controlJobResponse);
++    return setAttrResponse;
++}
+diff --git a/src/condor_contrib/aviary/src/AviaryJobServiceSkeleton.h b/src/condor_contrib/aviary/src/AviaryJobServiceSkeleton.h
+new file mode 100644
+index 0000000..12bddc3
+--- /dev/null
++++ b/src/condor_contrib/aviary/src/AviaryJobServiceSkeleton.h
+@@ -0,0 +1,192 @@
++/*
++ * Copyright 2009-2011 Red Hat, Inc.
++ *
++ * 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.
++ */
++
++#ifndef AVIARYJOBSERVICESKELETON_H
++#define AVIARYJOBSERVICESKELETON_H
++
++    #include <OMElement.h>
++    #include <MessageContext.h>
++   
++     #include <AviaryJob_RemoveJob.h>
++    
++     #include <AviaryJob_RemoveJobResponse.h>
++    
++     #include <AviaryJob_ReleaseJob.h>
++    
++     #include <AviaryJob_ReleaseJobResponse.h>
++    
++     #include <AviaryJob_SubmitJob.h>
++    
++     #include <AviaryJob_SubmitJobResponse.h>
++    
++     #include <AviaryJob_HoldJob.h>
++    
++     #include <AviaryJob_HoldJobResponse.h>
++    
++     #include <AviaryJob_SetJobAttribute.h>
++    
++     #include <AviaryJob_SetJobAttributeResponse.h>
++
++typedef std::vector<AviaryCommon::ResourceConstraint*> ResourceConstraintVectorType;
++    
++namespace AviaryJob {
++    
++
++   /** we have to reserve some error codes for adb and for custom messages */
++    #define AVIARYJOBSERVICESKELETON_ERROR_CODES_START (AXIS2_ERROR_LAST + 2500)
++
++    typedef enum
++    {
++        AVIARYJOBSERVICESKELETON_ERROR_NONE = AVIARYJOBSERVICESKELETON_ERROR_CODES_START,
++
++        AVIARYJOBSERVICESKELETON_ERROR_LAST
++    } AviaryJobServiceSkeleton_error_codes;
++
++    
++
++
++class AviaryJobServiceSkeleton
++{
++
++        public:
++            AviaryJobServiceSkeleton(){}
++
++
++     
++
++
++
++
++		 
++
++
++        /**
++         * Auto generated method declaration
++         * for "removeJob|http://grid.redhat.com/aviary-job/" operation.
++         * 
++         * @param _removeJob of the AviaryJob::RemoveJob
++         *
++         * @return AviaryJob::RemoveJobResponse*
++         */
++        
++
++         virtual 
++        AviaryJob::RemoveJobResponse* removeJob(wso2wsf::MessageContext *outCtx ,AviaryJob::RemoveJob* _removeJob);
++
++
++     
++
++
++
++
++		 
++
++
++        /**
++         * Auto generated method declaration
++         * for "releaseJob|http://grid.redhat.com/aviary-job/" operation.
++         * 
++         * @param _releaseJob of the AviaryJob::ReleaseJob
++         *
++         * @return AviaryJob::ReleaseJobResponse*
++         */
++        
++
++         virtual 
++        AviaryJob::ReleaseJobResponse* releaseJob(wso2wsf::MessageContext *outCtx ,AviaryJob::ReleaseJob* _releaseJob);
++
++
++     
++
++
++
++
++		 
++
++
++        /**
++         * Auto generated method declaration
++         * for "submitJob|http://grid.redhat.com/aviary-job/" operation.
++         * 
++         * @param _submitJob of the AviaryJob::SubmitJob
++         *
++         * @return AviaryJob::SubmitJobResponse*
++         */
++        
++
++         virtual 
++        AviaryJob::SubmitJobResponse* submitJob(wso2wsf::MessageContext *outCtx ,AviaryJob::SubmitJob* _submitJob);
++
++
++     
++
++
++
++
++		 
++
++
++        /**
++         * Auto generated method declaration
++         * for "holdJob|http://grid.redhat.com/aviary-job/" operation.
++         * 
++         * @param _holdJob of the AviaryJob::HoldJob
++         *
++         * @return AviaryJob::HoldJobResponse*
++         */
++        
++
++         virtual 
++        AviaryJob::HoldJobResponse* holdJob(wso2wsf::MessageContext *outCtx ,AviaryJob::HoldJob* _holdJob);
++
++
++     
++
++
++
++
++		 
++
++
++        /**
++         * Auto generated method declaration
++         * for "setJobAttribute|http://grid.redhat.com/aviary-job/" operation.
++         * 
++         * @param _setJobAttribute of the AviaryJob::SetJobAttribute
++         *
++         * @return AviaryJob::SetJobAttributeResponse*
++         */
++        
++
++         virtual 
++        AviaryJob::SetJobAttributeResponse* setJobAttribute(wso2wsf::MessageContext *outCtx ,AviaryJob::SetJobAttribute* _setJobAttribute);
++
++
++     
++
++
++
++};
++
++
++}
++
++
++
++        
++#endif // AVIARYJOBSERVICESKELETON_H
++    
++
+diff --git a/src/condor_contrib/aviary/src/AviaryQueryService.cpp b/src/condor_contrib/aviary/src/AviaryQueryService.cpp
+new file mode 100644
+index 0000000..242c4e0
+--- /dev/null
++++ b/src/condor_contrib/aviary/src/AviaryQueryService.cpp
+@@ -0,0 +1,358 @@
++/*
++ * Copyright 2009-2011 Red Hat, Inc.
++ *
++ * 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.
++ */
++
++        #include "AviaryQueryServiceSkeleton.h"
++        #include "AviaryQueryService.h"  
++        #include <ServiceSkeleton.h>
++        #include <stdio.h>
++        #include <axis2_svc.h>
++        #include <Environment.h>
++        #include <axiom_soap.h>
++
++
++        using namespace wso2wsf;
++        
++        using namespace AviaryQuery;
++        
++
++        /** Load the service into axis2 engine */
++        WSF_SERVICE_INIT(AviaryQueryService)
++
++          
++         /**
++          * function to free any soap input headers
++          */
++         AviaryQueryService::AviaryQueryService()
++	{
++          skel = wsfGetAviaryQueryServiceSkeleton();
++    }
++
++
++	void WSF_CALL
++	AviaryQueryService::init()
++	{
++
++      return;
++	}
++
++
++	AviaryQueryService::~AviaryQueryService()
++	{
++    }
++
++
++     
++
++     
++
++
++
++
++	/*
++	 * This method invokes the right service method
++	 */
++	OMElement* WSF_CALL
++	AviaryQueryService::invoke(OMElement *omEle, MessageContext *msgCtx)
++	{
++         /* Using the function name, invoke the corresponding method
++          */
++
++          axis2_op_ctx_t *operation_ctx = NULL;
++          axis2_op_t *operation = NULL;
++          axutil_qname_t *op_qname = NULL;
++          axis2_char_t *op_name = NULL;
++          axis2_msg_ctx_t *in_msg_ctx = NULL;
++          
++          axiom_soap_envelope_t *req_soap_env = NULL;
++          axiom_soap_header_t *req_soap_header = NULL;
++          axiom_soap_envelope_t *res_soap_env = NULL;
++          axiom_soap_header_t *res_soap_header = NULL;
++
++          axiom_node_t *ret_node = NULL;
++          axiom_node_t *input_header = NULL;
++          axiom_node_t *output_header = NULL;
++          axiom_node_t *header_base_node = NULL;
++          axis2_msg_ctx_t *msg_ctx = NULL;
++          axiom_node_t* content_node = omEle->getAxiomNode();
++
++          
++            AviaryQuery::GetJobDataResponse* ret_val1;
++            AviaryQuery::GetJobData* input_val1;
++            
++            AviaryQuery::GetJobStatusResponse* ret_val2;
++            AviaryQuery::GetJobStatus* input_val2;
++            
++            AviaryQuery::GetSubmissionSummaryResponse* ret_val3;
++            AviaryQuery::GetSubmissionSummary* input_val3;
++            
++            AviaryQuery::GetJobDetailsResponse* ret_val4;
++            AviaryQuery::GetJobDetails* input_val4;
++
++			AviaryQuery::GetJobSummaryResponse* ret_val5;
++            AviaryQuery::GetJobSummary* input_val5;
++            
++            
++       
++          msg_ctx = msgCtx->getAxis2MessageContext();
++          operation_ctx = axis2_msg_ctx_get_op_ctx(msg_ctx, Environment::getEnv());
++          operation = axis2_op_ctx_get_op(operation_ctx, Environment::getEnv());
++          op_qname = (axutil_qname_t *)axis2_op_get_qname(operation, Environment::getEnv());
++          op_name = axutil_qname_get_localpart(op_qname, Environment::getEnv());
++
++          if (op_name)
++          {
++               
++
++                if ( axutil_strcmp(op_name, "getJobData") == 0 )
++                {
++
++                    
++                    input_val1 =
++                        
++                        new AviaryQuery::GetJobData();
++                        if( AXIS2_FAILURE ==  input_val1->deserialize(&content_node, NULL, false))
++                        {
++                                        
++                            AXIS2_ERROR_SET(Environment::getEnv()->error, AXIS2_ERROR_DATA_ELEMENT_IS_NULL, AXIS2_FAILURE);
++                            AXIS2_LOG_ERROR( Environment::getEnv()->log, AXIS2_LOG_SI, "NULL returned from the AviaryQuery::GetJobData_deserialize: "
++                                        "This should be due to an invalid XML");
++                            return NULL;      
++                        }
++                        
++                        //AviaryQueryServiceSkeleton skel;
++                        ret_val1 =  skel->getJobData(msgCtx ,input_val1);
++                    
++                        if ( NULL == ret_val1 )
++                        {
++                            
++                                delete input_val1;
++                            
++                            return NULL; 
++                        }
++                        ret_node = 
++                                            ret_val1->serialize(NULL, NULL, AXIS2_TRUE, NULL, NULL);
++                                            delete ret_val1;
++                                        
++                                            delete input_val1;
++                                        
++
++                        return new OMElement(NULL,ret_node);
++                    
++
++                    /* since this has no output params it just returns NULL */                    
++                    
++
++                }
++             
++
++                if ( axutil_strcmp(op_name, "getJobStatus") == 0 )
++                {
++
++                    
++                    input_val2 =
++                        
++                        new AviaryQuery::GetJobStatus();
++                        if( AXIS2_FAILURE ==  input_val2->deserialize(&content_node, NULL, false))
++                        {
++                                        
++                            AXIS2_ERROR_SET(Environment::getEnv()->error, AXIS2_ERROR_DATA_ELEMENT_IS_NULL, AXIS2_FAILURE);
++                            AXIS2_LOG_ERROR( Environment::getEnv()->log, AXIS2_LOG_SI, "NULL returned from the AviaryQuery::GetJobStatus_deserialize: "
++                                        "This should be due to an invalid XML");
++                            return NULL;      
++                        }
++                        
++                        //AviaryQueryServiceSkeleton skel;
++                        ret_val2 =  skel->getJobStatus(msgCtx ,input_val2);
++                    
++                        if ( NULL == ret_val2 )
++                        {
++                            
++                                delete input_val2;
++                            
++                            return NULL; 
++                        }
++                        ret_node = 
++                                            ret_val2->serialize(NULL, NULL, AXIS2_TRUE, NULL, NULL);
++                                            delete ret_val2;
++                                        
++                                            delete input_val2;
++                                        
++
++                        return new OMElement(NULL,ret_node);
++                    
++
++                    /* since this has no output params it just returns NULL */                    
++                    
++
++                }
++             
++
++                if ( axutil_strcmp(op_name, "getSubmissionSummary") == 0 )
++                {
++
++                    
++                    input_val3 =
++                        
++                        new AviaryQuery::GetSubmissionSummary();
++                        if( AXIS2_FAILURE ==  input_val3->deserialize(&content_node, NULL, false))
++                        {
++                                        
++                            AXIS2_ERROR_SET(Environment::getEnv()->error, AXIS2_ERROR_DATA_ELEMENT_IS_NULL, AXIS2_FAILURE);
++                            AXIS2_LOG_ERROR( Environment::getEnv()->log, AXIS2_LOG_SI, "NULL returned from the AviaryQuery::GetSubmissionSummary_deserialize: "
++                                        "This should be due to an invalid XML");
++                            return NULL;      
++                        }
++                        
++                        //AviaryQueryServiceSkeleton skel;
++                        ret_val3 =  skel->getSubmissionSummary(msgCtx ,input_val3);
++                    
++                        if ( NULL == ret_val3 )
++                        {
++                            
++                                delete input_val3;
++                            
++                            return NULL; 
++                        }
++                        ret_node = 
++                                            ret_val3->serialize(NULL, NULL, AXIS2_TRUE, NULL, NULL);
++                                            delete ret_val3;
++                                        
++                                            delete input_val3;
++                                        
++
++                        return new OMElement(NULL,ret_node);
++                    
++
++                    /* since this has no output params it just returns NULL */                    
++                    
++
++                }
++             
++
++                if ( axutil_strcmp(op_name, "getJobDetails") == 0 )
++                {
++
++                    
++                    input_val4 =
++                        
++                        new AviaryQuery::GetJobDetails();
++                        if( AXIS2_FAILURE ==  input_val4->deserialize(&content_node, NULL, false))
++                        {
++                                        
++                            AXIS2_ERROR_SET(Environment::getEnv()->error, AXIS2_ERROR_DATA_ELEMENT_IS_NULL, AXIS2_FAILURE);
++                            AXIS2_LOG_ERROR( Environment::getEnv()->log, AXIS2_LOG_SI, "NULL returned from the AviaryQuery::GetJobDetails_deserialize: "
++                                        "This should be due to an invalid XML");
++                            return NULL;      
++                        }
++                        
++                        //AviaryQueryServiceSkeleton skel;
++                        ret_val4 =  skel->getJobDetails(msgCtx ,input_val4);
++                    
++                        if ( NULL == ret_val4 )
++                        {
++                            
++                                delete input_val4;
++                            
++                            return NULL; 
++                        }
++                        ret_node = 
++                                            ret_val4->serialize(NULL, NULL, AXIS2_TRUE, NULL, NULL);
++                                            delete ret_val4;
++                                        
++                                            delete input_val4;
++                                        
++
++                        return new OMElement(NULL,ret_node);
++                    
++
++                    /* since this has no output params it just returns NULL */                    
++                    
++
++                }
++
++
++                if ( axutil_strcmp(op_name, "getJobSummary") == 0 )
++                {
++
++
++                    input_val5 =
++
++                        new AviaryQuery::GetJobSummary();
++                        if( AXIS2_FAILURE ==  input_val5->deserialize(&content_node, NULL, false))
++                        {
++
++                            AXIS2_ERROR_SET(Environment::getEnv()->error, AXIS2_ERROR_DATA_ELEMENT_IS_NULL, AXIS2_FAILURE);
++                            AXIS2_LOG_ERROR( Environment::getEnv()->log, AXIS2_LOG_SI, "NULL returned from the AviaryQuery::GetJobSummary_deserialize: "
++                                        "This should be due to an invalid XML");
++                            return NULL;
++                        }
++
++                        //AviaryQueryServiceSkeleton skel;
++                        ret_val5 =  skel->getJobSummary(msgCtx ,input_val5);
++
++                        if ( NULL == ret_val5 )
++                        {
++
++                                delete input_val5;
++
++                            return NULL;
++                        }
++                        ret_node =
++                                            ret_val5->serialize(NULL, NULL, AXIS2_TRUE, NULL, NULL);
++                                            delete ret_val5;
++
++                                            delete input_val5;
++
++
++                        return new OMElement(NULL,ret_node);
++
++
++                    /* since this has no output params it just returns NULL */
++
++
++                }
++
++             
++             }
++            
++          AXIS2_LOG_ERROR(Environment::getEnv()->log, AXIS2_LOG_SI, "AviaryQueryService service ERROR: invalid OM parameters in request\n");
++          return NULL;
++    }
++
++    OMElement* WSF_CALL
++    AviaryQueryService::onFault(OMElement* omEle)
++	{
++		axiom_node_t *error_node = NULL;
++		axiom_element_t *error_ele = NULL;
++        axutil_error_codes_t error_code;
++        axiom_node_t *node = omEle->getAxiomNode();
++        error_code = (axutil_error_codes_t)Environment::getEnv()->error->error_number;
++
++        if(error_code <= AVIARYQUERYSERVICESKELETON_ERROR_NONE ||
++                error_code >= AVIARYQUERYSERVICESKELETON_ERROR_LAST )
++        {
++            error_ele = axiom_element_create(Environment::getEnv(), node, "fault", NULL,
++                            &error_node);
++            axiom_element_set_text(error_ele, Environment::getEnv(), "AviaryQueryService|http://grid.redhat.com/aviary-query/ failed",
++                            error_node);
++        }
++        
++
++		return new OMElement(NULL,error_node);
++	}
++
++    
++
+diff --git a/src/condor_contrib/aviary/src/AviaryQueryService.h b/src/condor_contrib/aviary/src/AviaryQueryService.h
+new file mode 100644
+index 0000000..18be684
+--- /dev/null
++++ b/src/condor_contrib/aviary/src/AviaryQueryService.h
+@@ -0,0 +1,67 @@
++
++
++          #ifndef AVIARYQUERYSERVICE_H
++          #define AVIARYQUERYSERVICE_H
++/*
++ * Copyright 2009-2011 Red Hat, Inc.
++ *
++ * 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.
++ */
++
++#include <ServiceSkeleton.h>
++#include <stdio.h>
++#include <axis2_svc.h>
++
++using namespace wso2wsf;
++
++
++using namespace AviaryQuery;
++
++
++
++#define WSF_SERVICE_SKEL_INIT(class_name) \
++AviaryQueryServiceSkeleton* wsfGetAviaryQueryServiceSkeleton(){ return new class_name(); }
++
++AviaryQueryServiceSkeleton* wsfGetAviaryQueryServiceSkeleton(); 
++
++
++
++        class AviaryQueryService : public ServiceSkeleton
++        {
++            private:
++                AviaryQueryServiceSkeleton *skel;
++
++            public:
++
++               union {
++                     
++               } fault;
++
++
++              WSF_EXTERN WSF_CALL AviaryQueryService();
++
++              OMElement* WSF_CALL invoke(OMElement *message, MessageContext *msgCtx);
++
++              OMElement* WSF_CALL onFault(OMElement *message);
++
++              void WSF_CALL init();
++
++              ~AviaryQueryService(); 
++      };
++
++
++
++#endif    //     AVIARYQUERYSERVICE_H
++
++    
++
+diff --git a/src/condor_contrib/aviary/src/AviaryQueryServiceMacro.cpp b/src/condor_contrib/aviary/src/AviaryQueryServiceMacro.cpp
+new file mode 100644
+index 0000000..d8cae4c
+--- /dev/null
++++ b/src/condor_contrib/aviary/src/AviaryQueryServiceMacro.cpp
+@@ -0,0 +1,44 @@
++/*
++ * Copyright 2009-2011 Red Hat, Inc.
++ *
++ * 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.
++ */
++
++
++#include "AviaryQueryServiceSkeleton.h"
++#include "AviaryQueryService.h"
++#include <ServiceSkeleton.h>
++#include <stdio.h>
++#include <axis2_svc.h>
++#include <Environment.h>
++
++using namespace wso2wsf;
++
++using namespace AviaryQuery;
++
++
++
++/** Load the service into engine
++Note:- If you are extending from the Generated Skeleton class,you need is to change the argument provided to the
++macro to your derived class name.
++Example
++If your service is Calculator, you will have the business logic implementation class as CalculatorSkeleton.
++If the extended class is CalculatorSkeletonImpl, then you change the argument to the macro WSF_SERVICE_SKEL_INIT as
++WSF_SERVICE_SKEL_INIT(CalculatorSkeletonImpl). Also include the header file of the derived class, in this case CalculatorSkeletonImpl.h
++
++*/
++
++WSF_SERVICE_SKEL_INIT(AviaryQueryServiceSkeleton)
++
++
++
+diff --git a/src/condor_contrib/aviary/src/AviaryQueryServiceSkeleton.cpp b/src/condor_contrib/aviary/src/AviaryQueryServiceSkeleton.cpp
+new file mode 100644
+index 0000000..4d52d48
+--- /dev/null
++++ b/src/condor_contrib/aviary/src/AviaryQueryServiceSkeleton.cpp
+@@ -0,0 +1,475 @@
++/*
++ * Copyright 2009-2011 Red Hat, Inc.
++ *
++ * 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.
++ */
++
++// the implementation methods for AviaryQueryService methods
++
++//local includes
++#include "Globals.h"
++#include "JobServerObject.h"
++#include "AviaryQueryServiceSkeleton.h"
++#include <AviaryQuery_GetJobData.h>
++#include <AviaryQuery_GetJobDataResponse.h>
++#include <AviaryQuery_GetJobStatus.h>
++#include <AviaryQuery_GetJobStatusResponse.h>
++#include <AviaryQuery_GetSubmissionSummary.h>
++#include <AviaryQuery_GetSubmissionSummaryResponse.h>
++#include <AviaryQuery_GetJobDetails.h>
++#include <AviaryQuery_GetJobDetailsResponse.h>
++#include <AviaryQuery_GetJobSummary.h>
++#include <AviaryQuery_GetJobSummaryResponse.h>
++#include <Axis2SoapProvider.h>
++
++// condor includes
++#include "stl_string_utils.h"
++#include "proc.h"
++#include "condor_attributes.h"
++
++// axis includes
++#include "axutil_date_time.h"
++
++using namespace std;
++using namespace AviaryQuery;
++using namespace AviaryCommon;
++using namespace aviary::query;
++
++struct cmpid {
++	bool operator()(const char *a, const char *b) const {
++		return strcmp(a, b) < 0;
++	}
++};
++
++typedef vector<JobID*> JobIdCollection;
++typedef vector<SubmissionID*> SubmissionIdCollection;
++typedef vector<JobStatus*> JobStatusCollection;
++typedef vector<JobDetails*> JobDetailsCollection;
++typedef vector<JobSummary*> JobSummaryCollection;
++typedef vector<SubmissionSummary*> SubmissionSummaryCollection;
++typedef set<const char*, cmpid> IdCollection;
++
++// TODO: singleton this...
++extern aviary::soap::Axis2SoapProvider* provider;
++
++//
++// Utility section START
++//
++
++// Any key that begins with the '0' char is either the
++// header or a cluster, i.e. not a job
++#define IS_JOB(key) ((key) && '0' != (key)[0])
++
++// NOTE #1: unfortunately the Axis2/C generated code is inconsistent in its
++// internal checking of nillable (i.e., minOccurs=0) elements
++// so we have to use default ctors and build the element object using setters
++// otherwise segvs await us in generated code
++
++// NOTE #2: using template functions since WSO2 codegen won't give us
++// XSD extension->C++ inheritance
++template <class JobBase>
++void createGoodJobResponse(JobBase& jb, const char* job_id) {
++	JobServerObject* jso = JobServerObject::getInstance();
++	JobID* jid = new JobID;
++	jid->setJob(job_id);
++	jid->setPool(jso->getPool());
++	jid->setScheduler(jso->getName());
++	jb.setId(jid);
++	Status* js = new Status;
++	js->setCode(new StatusCodeType("OK"));
++	jb.setStatus(js);
++}
++
++template <class JobBase>
++void createBadJobResponse(JobBase& jb, const char* job_id, const AviaryStatus& error) {
++	JobID* jid = new JobID;
++	jid->setJob(job_id);
++	jb.setId(jid);
++	StatusCodeType* jst = new StatusCodeType;
++	jst->setStatusCodeTypeEnum(ADBStatusCodeTypeEnum(error.type));
++	Status* js = new Status(jst,error.text);
++	jb.setStatus(js);
++}
++
++// unfortunately no convenience functions from WS02 for dateTime
++axutil_date_time_t* encodeDateTime(const time_t* _time) {
++	struct tm _tm;
++
++	// need the re-entrant version because axutil_date_time_create
++	// calls time() again and overwrites static tm
++	localtime_r(_time,&_tm);
++	// get our Axis2 env for the allocator
++	const axutil_env_t* _env = provider->getEnv();
++
++	axutil_date_time_t* _value = NULL;
++	_value = axutil_date_time_create(_env);
++
++    if (!_value)
++    {
++        AXIS2_ERROR_SET(_env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
++        AXIS2_LOG_ERROR(_env->log, AXIS2_LOG_SI, "Out of memory");
++        return NULL;
++    }
++
++	// play their game with adjusting the year and month offset
++	axutil_date_time_set_date_time(_value,_env,
++								   _tm.tm_year+1900,
++								   _tm.tm_mon+1,
++								   _tm.tm_mday,
++								   _tm.tm_hour,
++								   _tm.tm_min,
++								   _tm.tm_sec,
++								   0);
++	return _value;
++};
++
++void mapFieldsToSummary(const JobSummaryFields& fields, JobSummary* _summary) {
++
++	// JobID should already been in our summary
++	SubmissionID* sid = new SubmissionID;
++	sid->setName(fields.submission_id);
++	sid->setOwner(fields.owner);
++	_summary->getId()->setSubmission(sid);
++	// do date/time conversion
++	_summary->setQueued(encodeDateTime((const time_t*)&fields.queued));
++	_summary->setLast_update(encodeDateTime((const time_t*)&fields.last_update));
++	JobStatusType* jst = new JobStatusType;
++	jst->setJobStatusType(getJobStatusString(fields.status));
++	_summary->setJob_status(jst);
++	_summary->setCmd(fields.cmd);
++	if (!fields.args1.empty()) {
++		_summary->setArgs1(fields.args1);
++	}
++	if (!fields.args2.empty()) {
++		_summary->setArgs2(fields.args2);
++	}
++	if (!fields.hold_reason.empty()) {
++		_summary->setHeld(fields.hold_reason);
++	}
++	if (!fields.release_reason.empty()) {
++		_summary->setReleased(fields.release_reason);
++	}
++	if (!fields.remove_reason.empty()) {
++		_summary->setRemoved(fields.remove_reason);
++	}
++}
++
++void mapToXsdAttributes(const aviary::codec::AttributeMapType& _map, AviaryCommon::Attributes* _attrs) {
++	for (AttributeMapIterator i = _map.begin(); _map.end() != i; i++) {
++		AviaryAttribute* codec_attr = (AviaryAttribute*)(*i).second;
++		AviaryCommon::Attribute* attr = new AviaryCommon::Attribute;
++		attr->setName((*i).first);
++		AviaryCommon::AttributeType* attr_type = new AviaryCommon::AttributeType;
++		switch (codec_attr->getType()) {
++			case AviaryAttribute::INTEGER_TYPE:
++				attr_type->setAttributeTypeEnum(AviaryCommon::AttributeType_INTEGER);
++				break;
++			case AviaryAttribute::FLOAT_TYPE:
++				attr_type->setAttributeTypeEnum(AviaryCommon::AttributeType_FLOAT);
++				break;
++			case AviaryAttribute::STRING_TYPE:
++				attr_type->setAttributeTypeEnum(AviaryCommon::AttributeType_STRING);
++				break;
++			case AviaryAttribute::EXPR_TYPE:
++				attr_type->setAttributeTypeEnum(AviaryCommon::AttributeType_EXPRESSION);
++				break;
++			default:
++				attr_type->setAttributeTypeEnum(AviaryCommon::AttributeType_UNDEFINED);
++		}
++		attr->setType(attr_type);
++		attr->setValue(codec_attr->getValue());
++		_attrs->addAttrs(attr);
++	}
++}
++
++//
++// Utility section END
++//
++
++//
++// Interface implementation START
++//
++GetSubmissionSummaryResponse* AviaryQueryServiceSkeleton::getSubmissionSummary(wso2wsf::MessageContext* /*outCtx*/
++	,GetSubmissionSummary* _getSubmissionSummary)
++{
++	GetSubmissionSummaryResponse* getSummaryResponse = new GetSubmissionSummaryResponse;
++
++	SubmissionCollectionType::const_iterator element = g_submissions.begin();
++	SubmissionSummaryCollection* submissions = new SubmissionSummaryCollection;
++
++	SubmissionCollectionType sub_map;
++
++	if (_getSubmissionSummary->isIdsNil() || _getSubmissionSummary->getIds()->size() == 0) {
++		// no ids supplied...they get them all
++		for (SubmissionCollectionType::iterator i = g_submissions.begin(); g_submissions.end() != i; i++) {
++			sub_map[(*i).first] = (*i).second;
++		}
++	}
++	else {
++		// fast track...client has supplied ids to scan
++		SubmissionIdCollection* id_list = _getSubmissionSummary->getIds();
++		for (SubmissionIdCollection::iterator sic_it = id_list->begin(); id_list->end() != sic_it; sic_it++) {
++			const char* sid_str = (*sic_it)->getName().c_str();
++			SubmissionCollectionType::iterator sct_it = g_submissions.find(sid_str);
++			if (sct_it != g_submissions.end()) {
++				sub_map[(*sct_it).first] = (*sct_it).second;
++			}
++			else {
++				// mark this as not matched when returning our results
++				sub_map[(*sct_it).first] = NULL;
++			}
++		}
++	}
++
++	for (SubmissionCollectionType::iterator i = sub_map.begin(); sub_map.end() != i; i++) {
++		SubmissionSummary* summary = new SubmissionSummary;
++		SubmissionObject *submission = (*i).second;
++
++		if (submission) {
++			SubmissionID* sid = new SubmissionID;
++			sid->setName(submission->getName());
++			sid->setOwner(submission->getOwner());
++			summary->setId(sid);
++			summary->setCompleted(submission->getCompleted().size());
++			summary->setHeld(submission->getHeld().size());
++			summary->setIdle(submission->getIdle().size());
++			summary->setRemoved(submission->getRemoved().size());
++			summary->setRunning(submission->getRunning().size());
++			Status* ss = new Status;
++			ss->setCode(new StatusCodeType("OK"));
++			summary->setStatus(ss);
++
++			if (!_getSubmissionSummary->isIncludeJobSummariesNil() && _getSubmissionSummary->getIncludeJobSummaries()) {
++				// client wants the job summaries also
++				JobSummaryPairCollection jobs;
++				submission->getJobSummaries(jobs);
++				for (JobSummaryPairCollection::const_iterator it = jobs.begin(); jobs.end() != it; it++) {
++					JobSummary* js = new JobSummary;
++					createGoodJobResponse<JobSummary>(*js,(*it).first);
++					mapFieldsToSummary(*((*it).second),js);
++					summary->addJobs(js);
++				}
++			}
++
++		}
++		else {
++			SubmissionID* sid = new SubmissionID;
++			summary->setId(sid);
++			StatusCodeType* sst = new StatusCodeType;
++			sst->setStatusCodeType("NO_MATCH");
++			Status* ss = new Status(sst,"Unable to locate submission");
++			summary->setStatus(ss);
++		}
++		submissions->push_back(summary);
++	}
++
++	getSummaryResponse->setSubmissions(submissions);
++
++    return getSummaryResponse;
++}
++
++GetJobStatusResponse* AviaryQueryServiceSkeleton::getJobStatus(wso2wsf::MessageContext* /*outCtx*/
++	,GetJobStatus* _getJobStatus)
++{
++	GetJobStatusResponse* jobStatusResponse = new GetJobStatusResponse;
++	JobServerObject* jso = JobServerObject::getInstance();
++	JobStatusCollection* job_results = new JobStatusCollection;
++
++	IdCollection id_set;
++
++	if (_getJobStatus->isIdsNil() || _getJobStatus->getIds()->size() == 0) {
++		// no ids supplied...they get them all
++		for (JobCollectionType::iterator i = g_jobs.begin(); g_jobs.end() != i; i++) {
++			const char* job_id = (*i).first;
++			if (IS_JOB(job_id)) {
++				id_set.insert(job_id);
++			}
++		}
++	}
++	else {
++		// fast track...client has supplied ids to scan
++		JobIdCollection* id_list = _getJobStatus->getIds();
++		for (JobIdCollection::iterator i = id_list->begin(); id_list->end() != i; i++) {
++			id_set.insert((*i)->getJob().c_str());
++		}
++	}
++
++	for (IdCollection::const_iterator i = id_set.begin(); id_set.end() != i; i++) {
++		JobStatus* js = new JobStatus;
++		const char* job = *i;
++		AviaryStatus status;
++		int job_status = JOB_STATUS_MIN;
++		if (jso->getStatus(job,job_status,status)) {
++			createGoodJobResponse<JobStatus>(*js,job);
++			JobStatusType* jst = new JobStatusType;
++			jst->setJobStatusType(getJobStatusString(job_status));
++			js->setJob_status(jst);
++		}
++		else {
++			// problem...report to client
++			createBadJobResponse<JobStatus>(*js,job,status);
++		}
++		job_results->push_back(js);
++	}
++
++	jobStatusResponse->setJobs(job_results);
++
++    return jobStatusResponse;
++}
++
++GetJobSummaryResponse* AviaryQueryServiceSkeleton::getJobSummary(wso2wsf::MessageContext *outCtx ,AviaryQuery::GetJobSummary* _getJobSummary)
++{
++	GetJobSummaryResponse* jobSummaryResponse = new GetJobSummaryResponse;
++	JobServerObject* jso = JobServerObject::getInstance();
++	JobSummaryCollection* job_results = new JobSummaryCollection;
++	
++	IdCollection id_set;
++
++	if (_getJobSummary->isIdsNil() || _getJobSummary->getIds()->size() == 0) {
++		// no ids supplied...they get them all
++		for (JobCollectionType::iterator i = g_jobs.begin(); g_jobs.end() != i; i++) {
++			const char* job_id = (*i).first;
++			if (IS_JOB(job_id)) {
++				id_set.insert(job_id);
++			}
++		}
++	}
++	else {
++		// fast track...client has supplied ids to scan
++		JobIdCollection* id_list = _getJobSummary->getIds();
++		for (JobIdCollection::iterator i = id_list->begin(); id_list->end() != i; i++) {
++			id_set.insert((*i)->getJob().c_str());
++		}
++	}
++	
++	for (IdCollection::const_iterator i = id_set.begin(); id_set.end() != i; i++) {
++		JobSummary* js = new JobSummary;
++		const char* job = *i;
++		JobSummaryFields jsf;
++		AviaryStatus status;
++		if (jso->getSummary(job,jsf,status)) {
++			createGoodJobResponse<JobSummary>(*js,job);
++			mapFieldsToSummary(jsf,js);
++		}
++		else {
++			// problem...report to client
++			createBadJobResponse<JobSummary>(*js, job, status);
++		}
++		job_results->push_back(js);
++	}
++
++	jobSummaryResponse->setJobs(job_results);
++
++    return jobSummaryResponse;
++}
++
++GetJobDetailsResponse* AviaryQueryServiceSkeleton::getJobDetails(wso2wsf::MessageContext* /* outCtx*/
++	,GetJobDetails* _getJobDetails)
++{
++	GetJobDetailsResponse* jobDetailsResponse = new GetJobDetailsResponse;
++	JobServerObject* jso = JobServerObject::getInstance();
++	JobDetailsCollection* job_results = new JobDetailsCollection;
++
++	IdCollection id_set;
++
++	if (_getJobDetails->isIdsNil() || _getJobDetails->getIds()->size() == 0) {
++		// no ids supplied...they get them all
++		for (JobCollectionType::iterator i = g_jobs.begin(); g_jobs.end() != i; i++) {
++			const char* job_id = (*i).first;
++			if (IS_JOB(job_id)) {
++				id_set.insert(job_id);
++			}
++		}
++	}
++	else {
++		// fast track...client has supplied ids to scan
++		JobIdCollection* id_list = _getJobDetails->getIds();
++		for (JobIdCollection::iterator i = id_list->begin(); id_list->end() != i; i++) {
++			id_set.insert((*i)->getJob().c_str());
++		}
++	}
++
++	for (IdCollection::const_iterator i = id_set.begin(); id_set.end() != i; i++) {
++		JobDetails* jd = new JobDetails;
++		const char* job = *i;
++		aviary::codec::AttributeMapType attr_map;
++		AviaryStatus status;
++		if (jso->getJobAd(job,attr_map,status)) {
++			createGoodJobResponse<JobDetails>(*jd,job);
++			// load attributes
++			AviaryCommon::Attributes* attrs = new AviaryCommon::Attributes;
++			mapToXsdAttributes(attr_map,attrs);
++			jd->setDetails(attrs);
++		}
++		else {
++			// problem...report to client
++			createBadJobResponse<JobDetails>(*jd, job, status);
++		}
++		job_results->push_back(jd);
++	}
++
++	jobDetailsResponse->setJobs(job_results);
++
++    return jobDetailsResponse;
++}
++
++// NOTE: getJobData is the rare case (?) where someone wants to pull the job output
++// thus, we don't batch this - just one at a time
++GetJobDataResponse* AviaryQueryServiceSkeleton::getJobData(wso2wsf::MessageContext* /* outCtx */
++	,GetJobData* _getJobData)
++{
++    GetJobDataResponse* jobDataResponse = new  GetJobDataResponse;
++	JobServerObject* jso = JobServerObject::getInstance();
++
++	const char* job = _getJobData->getData()->getId()->getJob().c_str();
++	AviaryCommon::JobDataType* jdt = _getJobData->getData()->getType();
++	ADBJobDataTypeEnum file_type = jdt->getJobDataTypeEnum();
++	AviaryStatus status;
++	status.type = AviaryStatus::FAIL;
++	string fname, content;
++	int fsize;
++	if (jso->fetchJobData(job,UserFileType(file_type),fname,_getJobData->getMax_bytes(),_getJobData->getFrom_end(),fsize,content,status)) {
++		JobID* jid = new JobID;
++		jid->setJob(job);
++		jid->setPool(jso->getPool());
++		jid->setScheduler(jso->getName());
++		JobData* jd = new JobData;
++		jd->setId(jid);
++		jd->setType(jdt);
++		jobDataResponse->setData(jd);
++		Status* js = new Status;
++		js->setCode(new StatusCodeType("OK"));
++		jobDataResponse->setStatus(js);
++
++		// load requested file data
++		jobDataResponse->setContent(content);
++		jobDataResponse->setFile_name(fname);
++		jobDataResponse->setFile_size(fsize);
++	}
++	else {
++		// problem...report to client
++		JobID* jid = new JobID;
++		jid->setJob(job);
++		JobData* jd = new JobData;
++		jd->setId(jid);
++		jd->setType(jdt);
++		jobDataResponse->setData(jd);
++		StatusCodeType* jst = new StatusCodeType;
++		jst->setStatusCodeTypeEnum(ADBStatusCodeTypeEnum(status.type));
++		Status* js = new Status(jst,status.text);
++		jobDataResponse->setStatus(js);
++	}
++
++    return jobDataResponse;
++}
++
+diff --git a/src/condor_contrib/aviary/src/AviaryQueryServiceSkeleton.h b/src/condor_contrib/aviary/src/AviaryQueryServiceSkeleton.h
+new file mode 100644
+index 0000000..e400201
+--- /dev/null
++++ b/src/condor_contrib/aviary/src/AviaryQueryServiceSkeleton.h
+@@ -0,0 +1,177 @@
++/*
++ * Copyright 2009-2011 Red Hat, Inc.
++ *
++ * 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.
++ */
++
++#ifndef AVIARYQUERYSERVICESKELETON_H
++#define AVIARYQUERYSERVICESKELETON_H
++
++    #include <OMElement.h>
++    #include <MessageContext.h>
++   
++     #include <AviaryQuery_GetJobData.h>
++    
++     #include <AviaryQuery_GetJobDataResponse.h>
++    
++     #include <AviaryQuery_GetJobStatus.h>
++    
++     #include <AviaryQuery_GetJobStatusResponse.h>
++    
++     #include <AviaryQuery_GetSubmissionSummary.h>
++    
++     #include <AviaryQuery_GetSubmissionSummaryResponse.h>
++    
++     #include <AviaryQuery_GetJobDetails.h>
++    
++     #include <AviaryQuery_GetJobDetailsResponse.h>
++
++     #include <AviaryQuery_GetJobSummary.h>
++
++     #include <AviaryQuery_GetJobSummaryResponse.h>
++    
++    
++namespace AviaryQuery {
++    
++
++   /** we have to reserve some error codes for adb and for custom messages */
++    #define AVIARYQUERYSERVICESKELETON_ERROR_CODES_START (AXIS2_ERROR_LAST + 2500)
++
++    typedef enum
++    {
++        AVIARYQUERYSERVICESKELETON_ERROR_NONE = AVIARYQUERYSERVICESKELETON_ERROR_CODES_START,
++
++        AVIARYQUERYSERVICESKELETON_ERROR_LAST
++    } AviaryQueryServiceSkeleton_error_codes;
++
++    
++
++
++class AviaryQueryServiceSkeleton
++{
++        public:
++            AviaryQueryServiceSkeleton(){}
++
++
++     
++
++
++
++
++		 
++
++
++        /**
++         * Auto generated method declaration
++         * for "getJobData|http://grid.redhat.com/aviary-query/" operation.
++         * 
++         * @param _getJobData of the AviaryQuery::GetJobData
++         *
++         * @return AviaryQuery::GetJobDataResponse*
++         */
++        
++
++         virtual 
++        AviaryQuery::GetJobDataResponse* getJobData(wso2wsf::MessageContext *outCtx ,AviaryQuery::GetJobData* _getJobData);
++
++
++     
++
++
++
++
++		 
++
++
++        /**
++         * Auto generated method declaration
++         * for "getJobStatus|http://grid.redhat.com/aviary-query/" operation.
++         * 
++         * @param _getJobStatus of the AviaryQuery::GetJobStatus
++         *
++         * @return AviaryQuery::GetJobStatusResponse*
++         */
++        
++
++         virtual 
++        AviaryQuery::GetJobStatusResponse* getJobStatus(wso2wsf::MessageContext *outCtx ,AviaryQuery::GetJobStatus* _getJobStatus);
++
++
++     
++
++
++
++
++		 
++
++
++        /**
++         * Auto generated method declaration
++         * for "getSubmissionSummary|http://grid.redhat.com/aviary-query/" operation.
++         * 
++         * @param _getSubmissionSummary of the AviaryQuery::GetSubmissionSummary
++         *
++         * @return AviaryQuery::GetSubmissionSummaryResponse*
++         */
++        
++
++         virtual 
++        AviaryQuery::GetSubmissionSummaryResponse* getSubmissionSummary(wso2wsf::MessageContext *outCtx ,AviaryQuery::GetSubmissionSummary* _getSubmissionSummary);
++
++
++     
++
++
++
++
++		 
++
++        /**
++         * Auto generated method declaration
++         * for "getJobDetails|http://grid.redhat.com/aviary-query/" operation.
++         * 
++         * @param _getJobDetails of the AviaryQuery::GetJobDetails
++         *
++         * @return AviaryQuery::GetJobDetailsResponse*
++         */
++        
++
++         virtual 
++        AviaryQuery::GetJobDetailsResponse* getJobDetails(wso2wsf::MessageContext *outCtx ,AviaryQuery::GetJobDetails* _getJobDetails);
++
++
++         /**
++         * Auto generated method declaration
++         * for "getJobSummary|http://grid.redhat.com/aviary-query/" operation.
++         *
++         * @param _getJobSummary of the AviaryQuery::GetJobSummary
++         *
++         * @return AviaryQuery::GetJobSummaryResponse*
++         */
++
++
++         virtual
++        AviaryQuery::GetJobSummaryResponse* getJobSummary(wso2wsf::MessageContext *outCtx ,AviaryQuery::GetJobSummary* _getJobSummary);
++
++
++};
++
++
++}
++
++
++
++        
++#endif // AVIARYQUERYSERVICESKELETON_H
++    
++
+diff --git a/src/condor_contrib/aviary/src/AviaryScheddPlugin.cpp b/src/condor_contrib/aviary/src/AviaryScheddPlugin.cpp
+new file mode 100644
+index 0000000..ec1ceaf
+--- /dev/null
++++ b/src/condor_contrib/aviary/src/AviaryScheddPlugin.cpp
+@@ -0,0 +1,366 @@
++/*
++ * Copyright 2009-2011 Red Hat, Inc.
++ *
++ * 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.
++ */
++
++// condor includes
++#include "condor_common.h"
++#include "condor_qmgr.h"
++#include "condor_config.h"
++
++// local includes
++#include "AviaryScheddPlugin.h"
++#include "Axis2SoapProvider.h"
++#include "SchedulerObject.h"
++
++// Global from the condor_schedd, it's name
++extern char * Name;
++
++// Any key that begins with the '0' char is either the
++// header or a cluster, i.e. not a job
++#define IS_JOB(key) ((key) && '0' != (key)[0])
++
++using namespace std;
++using namespace aviary::job;
++using namespace aviary::soap;
++
++// global SchedulerObject
++// TODO: convert to singleton
++Axis2SoapProvider* provider = NULL;
++SchedulerObject* schedulerObj = NULL;
++
++void
++AviaryScheddPlugin::earlyInitialize()
++{
++
++    // Since this plugin is registered with multiple
++    // PluginManagers it may be initialized more than once,
++    // and we don't want that
++	static bool skip = false;
++	if (skip) return; skip = true;
++
++	// config then env for our all-important axis2 repo dir
++    const char* log_file = "./aviary_job.axis2.log";
++	string repo_path;
++	char *tmp = NULL;
++	if (tmp = param("WSFCPP_HOME")) {
++		repo_path = tmp;
++		free(tmp);
++	}
++	else if (tmp = getenv("WSFCPP_HOME")) {
++		repo_path = tmp;
++	}
++	else {
++		EXCEPT("No WSFCPP_HOME in config or env");
++	}
++
++	int port = param_integer("HTTP_PORT",9090);
++	int level = param_integer("AXIS2_DEBUG_LEVEL",AXIS2_LOG_LEVEL_CRITICAL);
++
++    // init transport here
++    provider = new Axis2SoapProvider(level,log_file,repo_path.c_str());
++    string axis_error;
++    if (!provider->init(port,AXIS2_HTTP_DEFAULT_SO_TIMEOUT,axis_error)) {
++		dprintf(D_ALWAYS, "%s\n",axis_error.c_str());
++        EXCEPT("Failed to initialize Axis2SoapProvider");
++    }
++
++	schedulerObj = SchedulerObject::getInstance();
++
++	dirtyJobs = new DirtyJobsType();
++
++	isHandlerRegistered = false;
++
++	ReliSock *sock = new ReliSock;
++	if (!sock) {
++		EXCEPT("Failed to allocate transport socket");
++	}
++	if (!sock->assign(provider->getHttpListenerSocket())) {
++		EXCEPT("Failed to bind transport socket");
++	}
++	int index;
++	if (-1 == (index =
++			   daemonCore->Register_Socket((Stream *) sock,
++										   "Aviary Method Socket",
++										   (SocketHandlercpp) ( &AviaryScheddPlugin::HandleTransportSocket ),
++										   "Handler for Aviary Methods.",
++										   this))) {
++		EXCEPT("Failed to register transport socket");
++	}
++
++	dprintf(D_ALWAYS,"Axis2 listener on http port: %d\n",port);
++
++	m_initialized = false;
++}
++
++void
++AviaryScheddPlugin::initialize()
++{
++		// Since this plugin is registered with multiple
++		// PluginManagers it may be initialized more than once,
++		// and we don't want that
++	static bool skip = false;
++	if (skip) return; skip = true;
++
++		// WalkJobQueue(int (*func)(ClassAd *))
++	ClassAd *ad = GetNextJob(1);
++	while (ad != NULL) {
++		MyString key;
++		PROC_ID id;
++		int value;
++
++		if (!ad->LookupInteger(ATTR_CLUSTER_ID, id.cluster)) {
++			EXCEPT("%s on job is missing or not an integer", ATTR_CLUSTER_ID);
++		}
++		if (!ad->LookupInteger(ATTR_PROC_ID, id.proc)) {
++			EXCEPT("%s on job is missing or not an integer", ATTR_PROC_ID);
++		}
++		if (!ad->LookupInteger(ATTR_JOB_STATUS, value)) {
++			EXCEPT("%s on job is missing or not an integer", ATTR_JOB_STATUS);
++		}
++
++		key.sprintf("%d.%d", id.cluster, id.proc);
++
++		processJob(key.Value(), ATTR_JOB_STATUS, value);
++
++		FreeJobAd(ad);
++		ad = GetNextJob(0);
++	}
++ 
++	m_initialized = true;
++}
++
++
++void
++AviaryScheddPlugin::shutdown()
++{
++		// Since this plugin is registered with multiple
++		// PluginManagers (eg, shadow) it may be shutdown
++		// more than once, and we don't want that
++	static bool skip = false;
++	if (skip) return; skip = true;
++
++	dprintf(D_FULLDEBUG, "AviaryScheddPlugin: shutting down...\n");
++
++	if (schedulerObj) {
++		delete schedulerObj;
++		schedulerObj = NULL;
++	}
++}
++
++
++void
++AviaryScheddPlugin::update(int cmd, const ClassAd *ad)
++{
++	MyString hashKey;
++
++	switch (cmd) {
++	case UPDATE_SCHEDD_AD:
++		dprintf(D_FULLDEBUG, "Received UPDATE_SCHEDD_AD\n");
++		schedulerObj->update(*ad);
++		break;
++	default:
++		dprintf(D_FULLDEBUG, "Unsupported command: %s\n",
++				getCollectorCommandString(cmd));
++	}
++}
++
++
++void
++AviaryScheddPlugin::archive(const ClassAd */*ad*/) { };
++
++
++void
++AviaryScheddPlugin::newClassAd(const char */*key*/) { };
++
++
++void
++AviaryScheddPlugin::setAttribute(const char *key,
++							   const char *name,
++							   const char *value)
++{
++	if (!m_initialized) return;
++
++//	dprintf(D_FULLDEBUG, "setAttribute: %s[%s] = %s\n", key, name, value);
++
++	markDirty(key, name, value);
++}
++
++
++void
++AviaryScheddPlugin::destroyClassAd(const char *_key)
++{
++	if (!m_initialized) return;
++
++//	dprintf(D_FULLDEBUG, "destroyClassAd: %s\n", key);
++
++	if (!IS_JOB(_key)) return;
++
++		// If we wait to process the deletion the job ad will be gone
++		// and we won't be able to lookup the Submission. So, we must
++		// process the job immediately, but that also means we need to
++		// process all pending changes for the job as well.
++	DirtyJobsType::iterator entry = dirtyJobs->begin();
++	while (dirtyJobs->end() != entry) {
++		string key = (*entry).first;
++		string name = (*entry).second.first;
++		int value = (*entry).second.second;
++
++		if (key == _key) {
++			processJob(key.c_str(), name.c_str(), value);
++
++				// No need to process this entry again later
++			entry = dirtyJobs->erase(entry);
++		} else {
++			entry++;
++		}
++	}
++}
++
++
++void
++AviaryScheddPlugin::deleteAttribute(const char */*key*/,
++								  const char */*name*/) { }
++
++int
++AviaryScheddPlugin::HandleTransportSocket(Stream *)
++{
++    // TODO: respond to a transport callback here?
++    string provider_error;
++    if (!provider->processHttpRequest(provider_error)) {
++        dprintf (D_ALWAYS,"Error processing request: %s\n",provider_error.c_str());
++    }
++
++    return KEEP_STREAM;
++}
++
++void
++AviaryScheddPlugin::processDirtyJobs()
++{
++	BeginTransaction();
++
++	while (!dirtyJobs->empty()) {
++		DirtyJobEntry entry = dirtyJobs->front(); dirtyJobs->pop_front();
++		string key = entry.first;
++		string name = entry.second.first;
++		int value = entry.second.second;
++
++		processJob(key.c_str(), name.c_str(), value);
++	}
++
++	CommitTransaction();
++
++	isHandlerRegistered = false;
++}
++
++
++bool
++AviaryScheddPlugin::processJob(const char *key,
++							 const char *name,
++							 int value)
++{
++	PROC_ID id;
++	ClassAd *jobAd;
++
++		// Skip any key that doesn't point to an actual job
++	if (!IS_JOB(key)) return false;
++
++//	dprintf(D_FULLDEBUG, "Processing: %s\n", key);
++
++	id = getProcByString(key);
++	if (id.cluster < 0 || id.proc < 0) {
++		dprintf(D_FULLDEBUG, "Failed to parse key: %s - skipping\n", key);
++		return false;
++	}
++
++		// Lookup the job ad assocaited with the key. If it is not
++		// present, skip the key
++	if (NULL == (jobAd = ::GetJobAd(id.cluster, id.proc, false))) {
++		dprintf(D_ALWAYS,
++				"NOTICE: Failed to lookup ad for %s - maybe deleted\n",
++				key);
++		return false;
++	}
++
++		// Store two pieces of information in the Job, 1. the
++		// Submission's name, 2. the Submission's id
++		//
++		// Submissions indexed on their name, the id is present
++		// for reconstruction of the Submission
++
++		// XXX: Use the jobAd instead of GetAttribute below, gets us $$() expansion
++
++	MyString submissionName;
++	if (GetAttributeString(id.cluster, id.proc,
++						   ATTR_JOB_SUBMISSION,
++						   submissionName) < 0) {
++			// Provide a default name for the Submission
++
++			// If we are a DAG node, we default to our DAG group
++		PROC_ID dagman;
++		if (GetAttributeInt(id.cluster, id.proc,
++							ATTR_DAGMAN_JOB_ID,
++							&dagman.cluster) >= 0) {
++			dagman.proc = 0;
++
++			if (GetAttributeString(dagman.cluster, dagman.proc,
++								   ATTR_JOB_SUBMISSION,
++								   submissionName) < 0) {
++					// This can only happen if the DAGMan job was
++					// removed, and we remained, which should not
++					// happen, but could. In such a case we are
++					// orphaned, and we'll make a guess. We'll be
++					// wrong if the DAGMan job didn't use the
++					// default, but it is better to be wrong than
++					// to fail entirely, which is the alternative.
++				submissionName.sprintf("%s#%d", Name, dagman.cluster);
++			}
++		} else {
++			submissionName.sprintf("%s#%d", Name, id.cluster);
++		}
++
++		MyString tmp;
++		tmp += "\"";
++		tmp += submissionName;
++		tmp += "\"";
++		SetAttribute(id.cluster, id.proc,
++					 ATTR_JOB_SUBMISSION,
++					 tmp.Value());
++	}
++}
++
++void
++AviaryScheddPlugin::markDirty(const char *key,
++							const char *name,
++							const char *value)
++{
++	if (!IS_JOB(key)) return;
++	if (!(strcasecmp(name, ATTR_JOB_STATUS) == 0 ||
++		  strcasecmp(name, ATTR_LAST_JOB_STATUS) == 0)) return;
++
++	DirtyJobStatus status(name, atoi(value));
++	DirtyJobEntry entry(key, status);
++	dirtyJobs->push_back(DirtyJobEntry(key, DirtyJobStatus(name, atoi(value))));
++
++	if (!isHandlerRegistered) {
++			// To test destroyClassAd, set the timeout here to a few
++			// seconds, submit a job and immediately delete it.
++		daemonCore->Register_Timer(0,
++								   (TimerHandlercpp)
++								   &AviaryScheddPlugin::processDirtyJobs,
++								   "Process Dirty",
++								   this);
++		isHandlerRegistered = true;
++	}
++}
+diff --git a/src/condor_contrib/aviary/src/AviaryScheddPlugin.h b/src/condor_contrib/aviary/src/AviaryScheddPlugin.h
+new file mode 100644
+index 0000000..ad247ac
+--- /dev/null
++++ b/src/condor_contrib/aviary/src/AviaryScheddPlugin.h
+@@ -0,0 +1,93 @@
++/*
++ * Copyright 2009-2011 Red Hat, Inc.
++ *
++ * 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.
++ */
++
++#ifndef _AVIARYSCHEDDPLUGIN_H
++#define _AVIARYSCHEDDPLUGIN_H
++
++// c++ includes
++#include <list>
++#include <string>
++
++// condor includes
++#include "condor_qmgr.h"
++#include "../condor_schedd.V6/ScheddPlugin.h"
++#include "ClassAdLogPlugin.h"
++#include "../condor_daemon_core.V6/condor_daemon_core.h"
++
++// local includes
++#include "SchedulerObject.h"
++#include "PROC_ID_comparator.h"
++
++
++namespace aviary {
++namespace job {
++
++// BIG NOTE: If Service is not first in the parent list the
++//           processDirtyJobs handler will segfault when using the
++//           dirtyJobs list
++class AviaryScheddPlugin : public Service, ClassAdLogPlugin, ScheddPlugin
++{
++
++public:
++
++	void earlyInitialize();
++
++	void initialize();
++
++	void shutdown();
++
++	void update(int cmd, const ClassAd *ad);
++
++	void archive(const ClassAd *ad);
++
++	void newClassAd(const char */*key*/);
++
++	void setAttribute(const char *key,
++					  const char *name,
++					  const char *value);
++
++	void destroyClassAd(const char *key);
++
++	void deleteAttribute(const char *key,
++						 const char *name);
++
++private:
++
++	typedef std::pair<std::string, int> DirtyJobStatus;
++	typedef std::pair<std::string, DirtyJobStatus> DirtyJobEntry;
++	typedef std::list<DirtyJobEntry> DirtyJobsType;
++	DirtyJobsType *dirtyJobs;
++
++
++	bool isHandlerRegistered;
++
++	bool m_initialized;
++
++	bool m_isPublishing;
++
++	int HandleTransportSocket(Stream *);
++
++	void processDirtyJobs();
++
++	bool processJob(const char *key, const char *name, int value);
++
++	void markDirty(const char *key, const char *name, const char *value);
++
++};
++
++}} /* aviary::job */
++
++#endif /* _AVIARYSCHEDDPLUGIN_H */
+diff --git a/src/condor_contrib/aviary/src/AviaryScheddPluginInstantiation.cpp b/src/condor_contrib/aviary/src/AviaryScheddPluginInstantiation.cpp
+new file mode 100644
+index 0000000..71c40c6
+--- /dev/null
++++ b/src/condor_contrib/aviary/src/AviaryScheddPluginInstantiation.cpp
+@@ -0,0 +1,35 @@
++/*
++ * Copyright 2009-2011 Red Hat, Inc.
++ *
++ * 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.
++ */
++
++#include "condor_common.h"
++
++#include "AviaryScheddPlugin.h"
++
++using namespace aviary::job;
++
++AviaryScheddPlugin *scheddPluginInstance;
++
++#ifndef WIN32
++
++void
++__attribute__ ((constructor))
++init(void)
++{
++    scheddPluginInstance = new AviaryScheddPlugin();
++}
++
++#endif
++
+diff --git a/src/condor_contrib/aviary/src/AviaryUtils.cpp b/src/condor_contrib/aviary/src/AviaryUtils.cpp
+new file mode 100644
+index 0000000..61e0693
+--- /dev/null
++++ b/src/condor_contrib/aviary/src/AviaryUtils.cpp
+@@ -0,0 +1,130 @@
++/*
++ * Copyright 2009-2011 Red Hat, Inc.
++ *
++ * 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.
++ */
++
++// condor includes
++#include "condor_common.h"
++#include "condor_config.h"
++#include "condor_classad.h"
++#include "condor_debug.h"
++#include "compat_classad_util.h"
++#include "condor_qmgr.h"
++#include "get_daemon_name.h"
++
++// c++ includes
++#include <map>
++
++// local includes
++#include "AviaryUtils.h"
++
++using namespace std;
++using namespace compat_classad;
++
++string
++aviary::util::getPoolName()
++{
++    string poolName;
++    char *tmp = NULL;
++
++    tmp = param("COLLECTOR_HOST");
++    if (!tmp) {
++        tmp = strdup("NO COLLECTOR_HOST, NOT GOOD");
++    }
++    poolName = tmp;
++    free(tmp); tmp = NULL;
++
++    return poolName;
++}
++
++string
++aviary::util::getScheddName() {
++	string scheddName;
++	char* tmp = NULL;
++
++	tmp = param("SCHEDD_NAME");
++	if (!tmp) {
++		scheddName = default_daemon_name();
++	} else {
++		scheddName = build_valid_daemon_name(tmp);
++		free(tmp); tmp = NULL;
++	}
++
++	return scheddName;
++}
++
++// cleans up the quoted values from the job log reader
++string aviary::util::trimQuotes(const char* str) {
++	string val = str;
++
++	size_t endpos = val.find_last_not_of("\\\"");
++	if( string::npos != endpos ) {
++		val = val.substr( 0, endpos+1 );
++	}
++	size_t startpos = val.find_first_not_of("\\\"");
++	if( string::npos != startpos ) {
++		val = val.substr( startpos );
++	}
++
++	return val;
++}
++
++// validate that an incoming group/user name is
++// alphanumeric, underscores, or a dot separator
++bool aviary::util::isValidGroupUserName(const string& _name, string& _text) {
++	const char* ptr = _name.c_str();
++	while( *ptr ) {
++		char c = *ptr++;
++		if (	('a' > c || c > 'z') &&
++			('A' > c || c > 'Z') &&
++			('0' > c || c > '9') &&
++			(c != '_' ) &&
++			(c != '.' ) ) {
++			_text = "Invalid name for group/user - alphanumeric, underscore and dot characters only";
++			return false;
++		}
++	}
++	return true;
++}
++
++// validate that an incoming attribute name is
++// alphanumeric, or underscores
++bool aviary::util::isValidAttributeName(const string& _name, string& _text) {
++	const char* ptr = _name.c_str();
++	while( *ptr ) {
++		char c = *ptr++;
++		if (	('a' > c || c > 'z') &&
++			('A' > c || c > 'Z') &&
++			('0' > c || c > '9') &&
++			(c != '_' ) ) {
++			_text = "Invalid name for attribute - alphanumeric and underscore characters only";
++			return false;
++		}
++	}
++	return true;
++}
++
++bool aviary::util::checkRequiredAttrs(compat_classad::ClassAd& ad, const char* attrs[], string& missing) {
++	bool status = true;
++	int i = 0;
++
++        while (NULL != attrs[i]) {
++		if (!ad.Lookup(attrs[i])) {
++			missing += " "; missing += attrs[i];
++			status = false;
++		}
++		i++;
++	}
++	return status;
++}
+diff --git a/src/condor_contrib/aviary/src/AviaryUtils.h b/src/condor_contrib/aviary/src/AviaryUtils.h
+new file mode 100644
+index 0000000..b13314d
+--- /dev/null
++++ b/src/condor_contrib/aviary/src/AviaryUtils.h
+@@ -0,0 +1,43 @@
++/*
++ * Copyright 2009-2011 Red Hat, Inc.
++ *
++ * 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.
++ */
++
++#ifndef _AVIARYUTILS_H
++#define _AVIARYUTILS_H
++
++// condor includes
++#include "condor_classad.h"
++
++using namespace std;
++using namespace compat_classad;
++
++namespace aviary {
++namespace util {
++
++string getPoolName();
++
++string getScheddName();
++
++string trimQuotes(const char* value);
++
++bool isValidGroupUserName(const string& _name, string& _text);
++
++bool isValidAttributeName(const string& _name, string& _text);
++
++bool checkRequiredAttrs(ClassAd& ad, const char* attrs[], string& missing);
++
++}}
++
++#endif /* _AVIARYUTILS_H */
+diff --git a/src/condor_contrib/aviary/src/Axis2SoapProvider.cpp b/src/condor_contrib/aviary/src/Axis2SoapProvider.cpp
+new file mode 100644
+index 0000000..fa0e1ca
+--- /dev/null
++++ b/src/condor_contrib/aviary/src/Axis2SoapProvider.cpp
+@@ -0,0 +1,328 @@
++/***************************************************************
++ *
++ * Copyright (C) 2009-2011 Red Hat, Inc.
++ *
++ * 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.
++ *
++ ***************************************************************/
++
++#include <axutil_error_default.h>
++#include <axutil_log_default.h>
++#include <axutil_thread_pool.h>
++#include <axiom_xml_reader.h>
++#include <axutil_file_handler.h>
++#include "Axis2SoapProvider.h"
++
++// NOTE: these types are not in the public
++// Axis2/C API via headers but we need them;
++// review if there is a newer rev after 1.6
++
++// lifted out from http_receiver.c
++typedef struct
++{
++     axis2_transport_receiver_t http_server;
++     axis2_http_svr_thread_t *svr_thread;
++     int port;
++     axis2_conf_ctx_t *conf_ctx;
++     axis2_conf_ctx_t *conf_ctx_private;
++} axis2_http_server_impl_t;
++ 
++#define AXIS2_INTF_TO_IMPL(http_server) \
++ ((axis2_http_server_impl_t *)(http_server))
++ 
++// lifted out from http_svr_thread.c
++struct axis2_http_svr_thread
++{
++    int listen_socket;
++    axis2_bool_t stopped;
++    axis2_http_worker_t *worker;
++    int port;
++};
++
++typedef struct axis2_http_svr_thd_args
++{
++    axutil_env_t *env;
++    axis2_socket_t socket;
++    axis2_http_worker_t *worker;
++    axutil_thread_t *thread;
++} axis2_http_svr_thd_args_t;
++
++using namespace aviary::soap;
++
++Axis2SoapProvider::Axis2SoapProvider(int _log_level, const char* _log_file, const char* _repo_path)
++{
++    if (_log_file) {
++        m_log_file = _log_file;
++    }
++    if (_repo_path) {
++        m_repo_path = _repo_path;
++    }
++    m_log_level = axutil_log_levels_t(_log_level);
++    m_env = NULL;
++    m_http_server = NULL;
++    m_svr_thread = NULL;
++    m_initialized = false;
++}
++
++Axis2SoapProvider::~Axis2SoapProvider()
++{
++    if (m_http_server) {
++        axis2_transport_receiver_free(m_http_server, m_env);
++    }
++
++    if (m_env) {
++        axutil_env_free(m_env);
++    }
++
++    axiom_xml_reader_cleanup();
++
++}
++
++bool
++Axis2SoapProvider::init(int _port, int _read_timeout, std::string& _error)
++{
++    if (m_log_file.empty() || m_repo_path.empty()) {
++        _error = "Log file or repo path is NULL";
++        return false;
++    }
++
++    if (!m_initialized) {
++        axutil_allocator_t* allocator = axutil_allocator_init(NULL);
++        axutil_error_t *error = axutil_error_create(allocator);
++        axutil_log_t *log = axutil_log_create(allocator, NULL, m_log_file.c_str());
++
++        // TODO: not sure we need a TP but don't wanted to get tripped up by a NP
++        // deeper in the stack
++        axutil_thread_pool_t *thread_pool = axutil_thread_pool_init(allocator);
++        axiom_xml_reader_init();
++        m_env = axutil_env_create(allocator);
++        axutil_error_init();
++
++        m_env = axutil_env_create_with_error_log_thread_pool(allocator, error, log, thread_pool);
++        m_env->log->level = m_log_level;
++
++        axis2_status_t status = axutil_file_handler_access(m_repo_path.c_str(), AXIS2_R_OK);
++
++        if (status != AXIS2_SUCCESS) {
++			_error = m_repo_path;
++			_error += " does not exist or insufficient permissions";
++            AXIS2_LOG_ERROR(m_env->log, AXIS2_LOG_SI,_error.c_str());
++            return m_initialized;
++        }
++
++        m_http_server = axis2_http_server_create_with_file(m_env, m_repo_path.c_str(), _port);
++        if (!m_http_server) {
++			_error =  AXIS2_ERROR_GET_MESSAGE(m_env->error);
++            AXIS2_LOG_ERROR(m_env->log, AXIS2_LOG_SI, "HTTP server create failed: %d: %s",
++                            m_env->error->error_number,_error.c_str());
++            return m_initialized;
++        }
++
++        m_svr_thread = createHttpReceiver(m_env,m_http_server,_error); 
++        if (!m_svr_thread) {
++			_error =  AXIS2_ERROR_GET_MESSAGE(m_env->error);
++			AXIS2_LOG_ERROR(m_env->log, AXIS2_LOG_SI, "HTTP receiver create failed: %d: %s",
++                            m_env->error->error_number,_error.c_str());
++            return m_initialized;
++        }
++
++        m_initialized = true;
++    }
++
++    return m_initialized;
++
++}
++
++axis2_http_svr_thread_t*
++Axis2SoapProvider::createHttpReceiver(axutil_env_t* _env, axis2_transport_receiver_t* _server, std::string& _error)
++{
++
++    axis2_http_server_impl_t *server_impl = NULL;
++    axis2_http_worker_t *worker = NULL;
++
++    server_impl = AXIS2_INTF_TO_IMPL(_server);
++    server_impl->svr_thread = axis2_http_svr_thread_create(_env, server_impl->port);
++
++    // shouldn't bother checking this for ST but we'll play along
++    if(!server_impl->svr_thread) {
++        AXIS2_LOG_ERROR(_env->log, AXIS2_LOG_SI, "unable to create server thread for port %d",
++                server_impl->port);
++        return NULL;
++    }
++
++    worker = axis2_http_worker_create(_env, server_impl->conf_ctx);
++    if(!worker) {
++        AXIS2_LOG_ERROR(_env->log, AXIS2_LOG_SI, "axis2 http worker creation failed");
++        axis2_http_svr_thread_free(server_impl->svr_thread, _env);
++        server_impl->svr_thread = NULL;
++        return NULL;
++    }
++
++    axis2_http_worker_set_svr_port(worker, _env, server_impl->port);
++    axis2_http_svr_thread_set_worker(server_impl->svr_thread, _env, worker);
++    return server_impl->svr_thread;
++
++}
++
++SOCKET
++Axis2SoapProvider::getHttpListenerSocket()
++{
++    SOCKET socket = INVALID_SOCKET;
++    if (m_svr_thread) {
++        socket = m_svr_thread->listen_socket;
++    }
++    return socket;
++}
++
++bool
++Axis2SoapProvider::processHttpRequest(std::string& _error)
++{
++    if (!m_initialized) {
++         _error = "Axis2SoapPovider has not been initialized yet";
++        return false;
++    }
++    else {
++
++        AXIS2_ENV_CHECK(m_env, AXIS2_FAILURE);
++
++        int socket = INVALID_SOCKET;
++        axis2_http_svr_thd_args_t *arg_list = NULL;
++
++        socket = (int)axutil_network_handler_svr_socket_accept(m_env, m_svr_thread->listen_socket);
++        if(!m_svr_thread->worker)
++        {
++            AXIS2_LOG_ERROR(m_env->log, AXIS2_LOG_SI,
++                "Worker not ready yet. Cannot serve the request");
++            axutil_network_handler_close_socket(m_env, socket);
++            return false;
++        }
++
++        arg_list = (axis2_http_svr_thd_args_t *)AXIS2_MALLOC(m_env->allocator, sizeof(axis2_http_svr_thd_args_t));
++        if(!arg_list)
++        {
++            AXIS2_LOG_ERROR(m_env->log, AXIS2_LOG_SI,
++                "Memory allocation error in the svr thread loop");
++            return false;
++        }
++
++        arg_list->env = (axutil_env_t *)m_env;
++        arg_list->socket = socket;
++        arg_list->worker = m_svr_thread->worker;
++
++        // single-threaded for DC
++        invokeHttpWorker(NULL, (void *)arg_list);
++    }
++
++    return true;
++}
++
++void *AXIS2_THREAD_FUNC
++Axis2SoapProvider::invokeHttpWorker(
++    axutil_thread_t * thd,
++    void *data)
++{
++    struct AXIS2_PLATFORM_TIMEB t1, t2;
++    axis2_simple_http_svr_conn_t *svr_conn = NULL;
++    axis2_http_simple_request_t *request = NULL;
++    int millisecs = 0;
++    double secs = 0;
++    axis2_http_worker_t *tmp = NULL;
++    axis2_status_t status = AXIS2_FAILURE;
++    axutil_env_t *env = NULL;
++    axis2_socket_t socket;
++    axutil_env_t *thread_env = NULL;
++    axis2_http_svr_thd_args_t *arg_list = NULL;
++
++#ifndef WIN32
++#ifdef AXIS2_SVR_MULTI_THREADED
++    signal(SIGPIPE, SIG_IGN);
++#endif
++#endif
++
++    if(!data)
++    {
++        return NULL;
++    }
++    arg_list = (axis2_http_svr_thd_args_t *)data;
++
++    env = arg_list->env;
++    thread_env = axutil_init_thread_env(env);
++
++    IF_AXIS2_LOG_DEBUG_ENABLED(env->log)
++    {
++        AXIS2_PLATFORM_GET_TIME_IN_MILLIS(&t1);
++    }
++
++    socket = arg_list->socket;
++    svr_conn = axis2_simple_http_svr_conn_create(thread_env, (int)socket);
++    if(!svr_conn)
++    {
++        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "creating simple_http_svr_connection failed");
++        return NULL;
++    }
++
++    axis2_simple_http_svr_conn_set_rcv_timeout(svr_conn, thread_env, m_http_socket_read_timeout);
++
++    /* read HTTPMethod, URL, HTTP Version and http headers. Leave the remaining in the stream */
++    request = axis2_simple_http_svr_conn_read_request(svr_conn, thread_env);
++    if(!request)
++    {
++        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Could not create request");
++        return NULL;
++    }
++
++    tmp = arg_list->worker;
++    status = axis2_http_worker_process_request(tmp, thread_env, svr_conn, request);
++    axis2_simple_http_svr_conn_free(svr_conn, thread_env);
++    axis2_http_simple_request_free(request, thread_env);
++
++    IF_AXIS2_LOG_DEBUG_ENABLED(env->log)
++    {
++        AXIS2_PLATFORM_GET_TIME_IN_MILLIS(&t2);
++        millisecs = t2.millitm - t1.millitm;
++        secs = difftime(t2.time, t1.time);
++        if(millisecs < 0)
++        {
++            millisecs += 1000;
++            secs--;
++        }
++        secs += millisecs / 1000.0;
++
++#if defined(WIN32)
++        AXIS2_LOG_DEBUG(thread_env->log, AXIS2_LOG_SI, "Request processed...");
++#else
++        AXIS2_LOG_DEBUG(thread_env->log, AXIS2_LOG_SI, "Request processed in %.3f seconds", secs);
++#endif
++    }
++
++    if(status == AXIS2_SUCCESS)
++    {
++        AXIS2_LOG_DEBUG(thread_env->log, AXIS2_LOG_SI, "Request served successfully");
++    }
++    else
++    {
++        AXIS2_LOG_WARNING(thread_env->log, AXIS2_LOG_SI, "Error occurred in processing request ");
++    }
++
++    // just ST here
++    AXIS2_FREE(thread_env->allocator, arg_list);
++    axutil_free_thread_env(thread_env);
++    thread_env = NULL;
++
++    return NULL;
++}
++
++// TODO: need a public axis2_tcp_worker.h for this
++//Axis2SoapProvider::processTcpRequest() {
++//    axis2_tcp_worker_process_request();
++//}
+diff --git a/src/condor_contrib/aviary/src/Axis2SoapProvider.h b/src/condor_contrib/aviary/src/Axis2SoapProvider.h
+new file mode 100644
+index 0000000..1828ee8
+--- /dev/null
++++ b/src/condor_contrib/aviary/src/Axis2SoapProvider.h
+@@ -0,0 +1,80 @@
++/***************************************************************
++ *
++ * Copyright (C) 2009-2011 Red Hat, Inc.
++ *
++ * 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.
++ *
++ ***************************************************************/
++
++#ifndef _AXIS2SOAPPROVIDER_H
++#define _AXIS2SOAPPROVIDER_H
++
++#include <string>
++#include <axis2_http_server.h>
++#include <axis2_http_transport.h>
++#include <platforms/axutil_platform_auto_sense.h>
++#include <axis2_http_worker.h>
++#include <axutil_network_handler.h>
++#include <axis2_http_svr_thread.h>
++// TODO: future tcp support
++//#include <axis2_tcp_worker.h>
++
++// borrow what DC does
++#if !defined(WIN32)
++#  ifndef SOCKET
++#    define SOCKET int
++#  endif
++#  ifndef INVALID_SOCKET
++#    define INVALID_SOCKET -1
++#  endif
++#endif /* not WIN32 */
++
++#define DEFAULT_LOG_FILE "./axis2.log"
++#define DEFAULT_REPO_FILE "../axis2.xml"
++#define DEFAULT_PORT 9090
++
++// C++ wrapper around a SINGLE-THREADED
++// Axis2/C engine; suitable for integration
++// with DaemonCore socket registration
++// ./configure --enable-multi-thread=no
++
++namespace aviary {
++namespace soap {
++
++class Axis2SoapProvider {
++    public:
++        Axis2SoapProvider(int _log_level=AXIS2_LOG_LEVEL_DEBUG, const char* _log_file=DEFAULT_LOG_FILE, const char* _repo_path=DEFAULT_REPO_FILE);
++        ~Axis2SoapProvider();
++        bool init(int _port, int _read_timeout, std::string& _error);
++        SOCKET getHttpListenerSocket();
++        bool processHttpRequest(std::string& _error);
++
++		const axutil_env_t* getEnv() {return m_env;}
++
++    private:
++        std::string m_log_file;
++        std::string m_repo_path;
++        axutil_log_levels_t m_log_level;
++        axutil_env_t* m_env;
++        axis2_transport_receiver_t* m_http_server;
++        axis2_http_svr_thread_t* m_svr_thread;
++        int m_http_socket_read_timeout;
++        bool m_initialized;
++
++        axis2_http_svr_thread_t* createHttpReceiver(axutil_env_t* _env, axis2_transport_receiver_t* _server, std::string& _error);
++        void *AXIS2_THREAD_FUNC invokeHttpWorker( axutil_thread_t * thd, void *data );
++};
++
++}}
++
++#endif    // _AXIS2SOAPPROVIDER_H
+diff --git a/src/condor_contrib/aviary/src/CMakeLists.txt b/src/condor_contrib/aviary/src/CMakeLists.txt
+new file mode 100644
+index 0000000..b39d38d
+--- /dev/null
++++ b/src/condor_contrib/aviary/src/CMakeLists.txt
+@@ -0,0 +1,85 @@
++ ###############################################################
++ # 
++ # Copyright (C) 2009-2011, Red Hat, Inc.
++ # 
++ # 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. 
++ # 
++ ###############################################################
++
++# shouldn't happen if gen code checked-in
++if ( NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../codegen" )
++     message( FATAL_ERROR "run ../gen-xsd-cpp.sh first!")
++endif ()
++
++############################
++# file target references.
++############################
++file( GLOB COMMON_GEN_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/../codegen/common/src/*.cpp )
++file( GLOB JOB_GEN_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/../codegen/job/src/*.cpp )
++file( GLOB JOB_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/AviaryJobService*.cpp )
++file( GLOB QUERY_GEN_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/../codegen/query/src/*.cpp )
++file( GLOB QUERY_SRCS ${CMAKE_CURRENT_SOURCE_DIR} AviaryQueryService*.cpp )
++
++file( GLOB SCHED_PLUGIN_SRCS Codec.cpp AviaryUtils.cpp SchedulerObject.cpp
++			PROC_ID_comparator.cpp Axis2SoapProvider.cpp AviaryScheddPlugin*.cpp )
++
++file( GLOB JOB_SERVER_SRCS aviary_query_server.cpp Axis2SoapProvider.cpp 
++							SubmissionObject.cpp JobServerJobLogConsumer.cpp
++							Job.cpp HistoryFile.cpp HistoryProcessingUtils.cpp Globals.cpp
++							Codec.cpp JobServerObject.cpp AviaryUtils.cpp )
++
++############################
++# schedd plugin
++############################
++src_target_ref( condor_collector "hashkey" COLLECTOR_REF )
++src_target_ref( utils "set_user_priv_from_ad" UTILS_REF )
++
++add_library (aviary_job_axis SHARED ${COMMON_GEN_SRCS} ${JOB_GEN_SRCS} ${JOB_SRCS} Codec.cpp AviaryUtils.cpp SchedulerObject.cpp )
++# remove unresolved deps by copying in -lwso2_wsf objects
++target_link_libraries(aviary_job_axis --whole-archive -lwso2_wsf --no-whole-archive)
++
++condor_plugin( AviaryScheddPlugin-plugin "${COLLECTOR_REF};${UTILS_REF};${SCHED_PLUGIN_SRCS}" "${C_LIBEXEC}" "${WSO2_FOUND}" ON)
++# remove unresolved deps by copying in -laxis2_engine objects
++target_link_libraries(AviaryScheddPlugin-plugin --whole-archive -laxis2_engine --no-whole-archive)
++
++############################
++# query server (aka ye old job server)
++############################
++add_library (aviary_query_axis SHARED ${COMMON_GEN_SRCS} ${QUERY_GEN_SRCS} ${QUERY_SRCS} )
++target_link_libraries (aviary_query_axis ${WSO2_FOUND})
++
++condor_exe( aviary_query_server "${JOB_SERVER_SRCS}"
++			"${C_SBIN}" "${CONDOR_LIBS};${PCRE_FOUND};${OPENSSL_FOUND};${COREDUMPER_FOUND};${KRB5_FOUND};${GLOBUS_FOUND};${GCB_FOUND};${WSO2_FOUND}" OFF )
++
++############################
++# install targets && configure our axis2.xml for platform
++############################
++configure_file("${CMAKE_CURRENT_SOURCE_DIR}/../etc/axis2.xml.in" "${CMAKE_CURRENT_BINARY_DIR}/../etc/axis2.xml" @ONLY)
++install (FILES ${CMAKE_CURRENT_BINARY_DIR}/../etc/axis2.xml DESTINATION ${CMAKE_INSTALL_PREFIX} )
++
++install (TARGETS aviary_query_axis DESTINATION ${C_SERVICES}/query)
++install (FILES ${CMAKE_CURRENT_SOURCE_DIR}/../services/query/services.xml DESTINATION ${C_SERVICES}/query )
++install (FILES ${CMAKE_CURRENT_SOURCE_DIR}/../etc/aviary-common.xsd
++			${CMAKE_CURRENT_SOURCE_DIR}/../etc/aviary-query.xsd
++			${CMAKE_CURRENT_SOURCE_DIR}/../etc/aviary-query.wsdl
++		DESTINATION ${C_SERVICES}/query )
++
++install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/../etc/61aviary.config DESTINATION "${C_ETC_EXAMPLES}")
++
++install (TARGETS aviary_job_axis DESTINATION ${C_SERVICES}/job)
++install (FILES ${CMAKE_CURRENT_SOURCE_DIR}/../services/job/services.xml DESTINATION ${C_SERVICES}/job )
++install (FILES ${CMAKE_CURRENT_SOURCE_DIR}/../etc/aviary-common.xsd
++				${CMAKE_CURRENT_SOURCE_DIR}/../etc/aviary-job.xsd
++				${CMAKE_CURRENT_SOURCE_DIR}/../etc/aviary-job.wsdl
++		DESTINATION ${C_SERVICES}/job )
++
+diff --git a/src/condor_contrib/aviary/src/Codec.cpp b/src/condor_contrib/aviary/src/Codec.cpp
+new file mode 100644
+index 0000000..aa3535b
+--- /dev/null
++++ b/src/condor_contrib/aviary/src/Codec.cpp
+@@ -0,0 +1,144 @@
++/***************************************************************
++ *
++ * Copyright (C) 2009-2011 Red Hat, Inc.
++ *
++ * 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.
++ *
++ ***************************************************************/
++
++// condor includes
++#include "condor_common.h"
++#include "condor_qmgr.h"
++
++// local includes
++#include "Codec.h"
++#include "AviaryUtils.h"
++
++using namespace compat_classad;
++using namespace aviary::codec;
++using namespace aviary::util;
++
++// TODO: defer until linking issues sorted
++//Codec*
++//DefaultCodecFactory::createCodec() {
++//    if (!m_codec) {
++//        m_codec = new BaseCodec;
++//    }
++//    return m_codec;
++//}
++
++BaseCodec::BaseCodec()
++{
++    //
++}
++
++BaseCodec::~BaseCodec()
++{
++    //
++}
++
++
++bool
++BaseCodec::addAttributeToMap (ClassAd& ad, const char* name, AttributeMapType& _map)
++{
++    ExprTree *expr;
++
++    // All these extra lookups are horrible. They have to
++    // be there because the ClassAd may have multiple
++    // copies of the same attribute name! This means that
++    // the last attribute with a given name will set the
++    // value, but the last attribute tends to be the
++    // attribute with the oldest (wrong) value. How
++    // annoying is that!
++    if (!(expr = ad.Lookup(name))) {
++        dprintf(D_FULLDEBUG, "Warning: failed to lookup attribute '%s' from ad\n", name);
++        return false;
++    }
++
++    classad::Value value;
++    ad.EvaluateExpr(expr,value);
++	const char* key = strdup(name);
++    switch (value.GetType()) {
++        // seems this covers expressions also
++        case classad::Value::BOOLEAN_VALUE:
++            _map[key] = new AviaryAttribute(AviaryAttribute::EXPR_TYPE,strdup(trimQuotes(ExprTreeToString(expr)).c_str()));
++            break;
++        case classad::Value::INTEGER_VALUE:
++            _map[key] = new AviaryAttribute(AviaryAttribute::INTEGER_TYPE,strdup(ExprTreeToString(expr)));;
++            break;
++        case classad::Value::REAL_VALUE:
++            _map[key] = new AviaryAttribute(AviaryAttribute::FLOAT_TYPE,strdup(ExprTreeToString(expr)));
++            break;
++        case classad::Value::STRING_VALUE:
++        default:
++            _map[key] = new AviaryAttribute(AviaryAttribute::STRING_TYPE,strdup(trimQuotes(ExprTreeToString(expr)).c_str()));
++    }
++
++    return true;
++}
++
++bool
++BaseCodec::classAdToMap(ClassAd& ad, AttributeMapType& _map)
++{
++    ExprTree *expr;
++	const char *name;
++	ad.ResetExpr();
++	_map.clear();
++	while (ad.NextExpr(name,expr)) {
++		if (!addAttributeToMap(ad, name, _map)) {
++                    return false;
++		}
++	}
++
++// //debug
++//        if (DebugFlags & D_FULLDEBUG) {
++//            ad.dPrint(D_FULLDEBUG|D_NOHEADER);
++//        }
++
++    return true;
++}
++
++
++bool
++BaseCodec::mapToClassAd(AttributeMapType& _map, ClassAd& ad)
++{
++
++    for (AttributeMapIterator entry = _map.begin(); _map.end() != entry; entry++) {
++        const char* name = entry->first;
++        AviaryAttribute* value = entry->second;
++
++        switch (value->getType()) {
++            case AviaryAttribute::INTEGER_TYPE:
++                ad.Assign(name, atoi(value->getValue()));
++                break;
++            case AviaryAttribute::FLOAT_TYPE:
++                ad.Assign(name, atof(value->getValue()));
++                break;
++            case AviaryAttribute::STRING_TYPE:
++                ad.Assign(name, value->getValue());
++                break;
++            case AviaryAttribute::EXPR_TYPE:
++                ad.AssignExpr(name, value->getValue());
++                break;
++            default:
++                dprintf(D_FULLDEBUG, "Warning: Unknown/unsupported type in map for attribute '%s'\n", name);
++        }
++    }
++
++//     // debug
++//     if (DebugFlags & D_FULLDEBUG) {
++//           ad.dPrint(D_FULLDEBUG|D_NOHEADER);
++//     }
++
++    return true;
++}
+diff --git a/src/condor_contrib/aviary/src/Codec.h b/src/condor_contrib/aviary/src/Codec.h
+new file mode 100644
+index 0000000..b73a958
+--- /dev/null
++++ b/src/condor_contrib/aviary/src/Codec.h
+@@ -0,0 +1,127 @@
++/***************************************************************
++ *
++ * Copyright (C) 2009-2011 Red Hat, Inc.
++ *
++ * 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.
++ *
++ ***************************************************************/
++
++#ifndef _CODEC_H
++#define _CODEC_H
++
++// c++ includes
++#include <map>
++#include <vector>
++
++// condor includes
++#include <compat_classad.h>
++
++using namespace std;
++using namespace compat_classad;
++
++namespace aviary {
++namespace codec {
++
++// universal err struct
++struct AviaryStatus
++{
++	// keep these aligned with whatever public API
++	// in XSD, JSON, etc.
++    enum StatusType
++    {
++		// don't use "OK"
++        A_OK = 0,
++        FAIL = 1,
++        NO_MATCH = 2,
++        STRING_TYPE = 3,
++		INVALID_OFFSET = 4,
++		UNIMPLEMENTED = 5,
++		UNAVAILABLE = 6
++    };
++
++    StatusType type;
++    string text;
++};
++
++class AviaryAttribute
++{
++public:
++    enum AttributeType
++    {
++        EXPR_TYPE = 0,
++        INTEGER_TYPE = 1,
++        FLOAT_TYPE = 2,
++        STRING_TYPE = 3
++    };
++    AviaryAttribute ( AttributeType _type, const char* _value): m_type(_type), m_value(_value) {};
++    ~AviaryAttribute();
++
++    AttributeType getType() const { return m_type; }
++    const char * getValue() const { return m_value; }
++
++private:
++    AttributeType m_type;
++    const char * m_value;
++};
++
++typedef map<const char*, AviaryAttribute*> AttributeMapType;
++typedef AttributeMapType::const_iterator AttributeMapIterator;
++
++// TODO: revisit
++// singleton class for encoding/decoding from/to transport-specific types
++// to a simple type to be used in the impl;
++// intent is to sit above ClassAds but still interact with them;
++// base is suitable for SOAP, but QMF might need subclassing
++// with it's !!descriptors idiom
++class Codec {
++public:
++    virtual bool addAttributeToMap(ClassAd& ad, const char* name, AttributeMapType& _map) = 0;
++    virtual bool classAdToMap(ClassAd &ad, AttributeMapType &_map) = 0;
++    virtual bool mapToClassAd(AttributeMapType &_map, ClassAd &ad) = 0;
++
++};
++
++// TODO: defer until linking issues sorted
++//class CodecFactory {
++// public:
++//     virtual Codec* createCodec() = 0;
++// 
++// };
++// 
++// class DefaultCodecFactory: public CodecFactory {
++// public:
++//     virtual Codec* createCodec();
++// protected:
++//     Codec* m_codec;
++// };
++
++class BaseCodec: public Codec {
++public:
++    //friend class DefaultCodecFactory;
++    virtual bool addAttributeToMap(ClassAd& ad, const char* name, AttributeMapType& _map);
++    virtual bool classAdToMap(ClassAd &ad, AttributeMapType &_map);
++    virtual bool mapToClassAd(AttributeMapType &_map, ClassAd &ad);
++
++//protected:
++    BaseCodec();
++    ~BaseCodec();
++
++private:
++    BaseCodec (const BaseCodec &);
++    BaseCodec& operator= (const BaseCodec &);
++
++};
++
++}}
++
++#endif    // _CODEC_H
+diff --git a/src/condor_contrib/aviary/src/Globals.cpp b/src/condor_contrib/aviary/src/Globals.cpp
+new file mode 100644
+index 0000000..14e36fb
+--- /dev/null
++++ b/src/condor_contrib/aviary/src/Globals.cpp
+@@ -0,0 +1,29 @@
++/***************************************************************
++ *
++ * Copyright (C) 2009-2011 Red Hat, Inc.
++ * 
++ * 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.
++ *
++ ***************************************************************/
++
++#include "Globals.h"
++
++namespace aviary {
++namespace query {
++
++JobCollectionType g_jobs;
++SubmissionCollectionType g_submissions;
++OwnerlessClusterType g_ownerless_clusters;
++OwnerlessSubmissionType g_ownerless_submissions;
++
++}}
+\ No newline at end of file
+diff --git a/src/condor_contrib/aviary/src/Globals.h b/src/condor_contrib/aviary/src/Globals.h
+new file mode 100644
+index 0000000..2b09add
+--- /dev/null
++++ b/src/condor_contrib/aviary/src/Globals.h
+@@ -0,0 +1,51 @@
++/***************************************************************
++ *
++ * Copyright (C) 2009-2011 Red Hat, Inc.
++ * 
++ * 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.
++ *
++ ***************************************************************/
++
++#ifndef _GLOBALS_H
++#define _GLOBALS_H
++
++// condor includes
++#include "condor_common.h"
++
++// c++ includes
++#include <map>
++
++// local includes
++#include "Job.h"
++#include "JobServerObject.h"
++#include "SubmissionObject.h"
++#include "cmpstr.h"
++
++using namespace std;
++
++namespace aviary {
++namespace query {
++
++typedef map<const char *, Job *, cmpstr> JobCollectionType;
++typedef map<const char *, SubmissionObject *, cmpstr> SubmissionCollectionType;
++typedef map<int, string> OwnerlessClusterType;
++typedef map<int, SubmissionObject*> OwnerlessSubmissionType;
++
++extern JobCollectionType g_jobs;
++extern SubmissionCollectionType g_submissions;
++extern OwnerlessClusterType g_ownerless_clusters;
++extern OwnerlessSubmissionType g_ownerless_submissions;
++
++}}
++
++#endif /* _GLOBALS_H */
+diff --git a/src/condor_contrib/aviary/src/HistoryFile.cpp b/src/condor_contrib/aviary/src/HistoryFile.cpp
+new file mode 100644
+index 0000000..81cc624
+--- /dev/null
++++ b/src/condor_contrib/aviary/src/HistoryFile.cpp
+@@ -0,0 +1,380 @@
++/*
++ * Copyright 2009-2011 Red Hat, Inc.
++ *
++ * 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.
++ */
++
++#include "condor_common.h"
++
++#include "condor_config.h"
++#include "condor_debug.h"
++
++#include "condor_attributes.h"
++
++#include "directory.h"
++
++#include "HistoryFile.h"
++
++#include "HistoryProcessingUtils.h"
++
++#include <libgen.h> // dirname
++
++#include <string>
++
++#define HISTORY_INDEX_SUFFIX ".idx"
++using std::string;
++
++
++HistoryFile::HistoryFile(const string name):
++	m_name(name),
++	m_stat(NULL),
++	m_file(NULL),
++	m_index(NULL)
++{
++}
++
++HistoryFile::~HistoryFile()
++{
++	cleanup();
++}
++
++void
++HistoryFile::cleanup()
++{
++	m_entries.clear();
++	if (m_file) { fclose(m_file); m_file = NULL; }
++	if (m_index) { fclose(m_index); m_index = NULL; }
++	if (m_stat) { free(m_stat); m_stat = NULL; }
++}
++
++HistoryFile::HistoryFile(const HistoryFile &base)
++{
++	m_file = NULL;
++	m_index = NULL;
++	m_stat = NULL;
++
++	*this = base;
++}
++
++HistoryFile &
++HistoryFile::operator=(const HistoryFile &base)
++{
++	if (this != &base) {
++		(*this).m_name = base.m_name;
++
++		cleanup();
++
++		// Don't just copy the stat and FILE* members, initialize them
++		CondorError errstack;
++		if (!init(errstack)) {
++			// XXX: Should throw an exception here
++			dprintf ( D_ALWAYS, "HistoryFile::operator=: %s\n",
++					errstack.getFullText(true));		
++		}
++	}
++
++	return *this;
++}
++
++bool
++HistoryFile::init(CondorError &errstack)
++{
++	StatWrapper stat_wrapper;
++
++	if (stat_wrapper.Stat(m_name.c_str())) {
++		errstack.pushf("HistoryFile::init", 1,
++					   "Failed to stat %s: %d (%s)\n",
++					   m_name.c_str(),
++					   stat_wrapper.GetErrno(),
++					   strerror(stat_wrapper.GetErrno()));
++		return false;
++	}
++
++	m_stat = (StatStructType *) malloc(sizeof(StatStructType));
++	ASSERT(m_stat);
++	memcpy(m_stat, stat_wrapper.GetBuf(), sizeof(StatStructType));
++	if (!S_ISREG(m_stat->st_mode)) {
++		errstack.pushf("HistoryFile::init", 2,
++					   "%s: not a regular file\n",
++					   m_name.c_str());
++		return false;
++	}
++
++	m_file = safe_fopen_wrapper(m_name.c_str(), "r");
++	if (NULL == m_file) {
++		errstack.pushf("HistoryFile::init", 4,
++					   "Failed to fopen %s: %d (%s)\n",
++					   m_name.c_str(), errno, strerror(errno));
++		return false;
++	}
++
++	// Store the index in history.INO.idx to handle renames
++	MyString tmp;
++	char *buf = strdup(m_name.c_str());
++	ASSERT(buf);
++	long unsigned int id;
++	ASSERT(getId(id));
++	tmp.sprintf("%s%shistory.%ld%s", dirname(buf), DIR_DELIM_STRING, id, HISTORY_INDEX_SUFFIX);
++	m_index_name = tmp.Value();
++	free(buf);
++
++	const char *mode = "r+";
++
++	if (stat_wrapper.Stat(m_index_name.c_str())) {
++			// Not being available is acceptable
++		if (ENOENT != stat_wrapper.GetErrno()) {
++			errstack.pushf("HistoryFile::init", 1,
++						   "Failed to stat %s: %d (%s)\n",
++						   m_index_name.c_str(),
++						   stat_wrapper.GetErrno(),
++						   strerror(stat_wrapper.GetErrno()));
++			return false;
++		}
++
++		mode = "w+";
++ 	}
++
++	const StatStructType *stat = stat_wrapper.GetBuf();
++	if (!S_ISREG(stat->st_mode)) {
++		errstack.pushf("HistoryFile::init", 2,
++					   "%s: not a regular file\n",
++					   m_index_name.c_str());
++		return false;
++	}
++
++	m_index = safe_fopen_wrapper(m_index_name.c_str(), mode);
++	if (NULL == m_index) {
++		errstack.pushf("HistoryFile::init", 4,
++					   "Failed to fopen %s: %d (%s)\n",
++					   m_index_name.c_str(), errno, strerror(errno));
++		return false;
++	}
++
++	return true;
++}
++
++bool
++HistoryFile::getId(long unsigned int &id)
++{
++	if (!m_stat) return false;
++
++	id = m_stat->st_ino;
++	return true;
++}
++
++HistoryFile::HistoryEntriesTypeIterators
++HistoryFile::poll(CondorError &/*errstack*/)
++{
++	// Record the end of the current set of records, used to
++	// return just the newly read records
++	int size = m_entries.size();
++
++	// Load from the index
++	CondorError ignored_errstack;
++	if (!pollIndex(ignored_errstack)) {
++		dprintf(D_FULLDEBUG, "%s\n", ignored_errstack.getFullText(true));		
++	}
++
++	// Seek to the end of the last known record
++	if (!m_entries.empty()) {
++		HistoryEntry entry = m_entries.back();
++		fseek(m_file, entry.stop, SEEK_SET);
++	}
++
++	int end, error, empty;
++	end = 0;
++	while (!end) {
++		long int start, stop;
++
++		start = ftell(m_file);
++
++		// NOTE: If the ClassAd parsing completes without finding
++		// the delimiter the result is end=1 and empty=0. This
++		// should be sufficient for identifying incomplete
++		// records that are otherwise valid.
++		ClassAd ad(m_file, "***", end, error, empty);
++
++		stop = ftell(m_file);
++
++		if (end) continue;
++		if (error) {
++			error = 0;
++			dprintf(D_ALWAYS, "HistoryFile::poll: malformed ad, skipping\n");
++			continue;
++		}
++		if (empty) {
++			empty = 0;
++			dprintf(D_ALWAYS, "HistoryFile::poll: empty ad, skipping\n");
++			continue;
++		}
++
++		int cluster, proc, q_date, status, entered_status;
++		char *global_id = NULL, *cmd = NULL, *args1 = NULL, *args2 = NULL;
++		char *release_reason = NULL, *hold_reason = NULL;
++		char *submission = NULL;
++		char *owner = NULL;
++		if (!ad.LookupInteger(ATTR_CLUSTER_ID, cluster)) {
++			dprintf(D_ALWAYS, "HistoryFile::poll: no %s, skipping\n",
++					ATTR_CLUSTER_ID);
++			continue;
++		}
++		if (!ad.LookupInteger(ATTR_PROC_ID, proc)) {
++			dprintf(D_ALWAYS, "HistoryFile::poll: no %s, skipping\n",
++					ATTR_PROC_ID);
++			continue;
++		}
++		if (!ad.LookupInteger(ATTR_Q_DATE, q_date)) {
++			dprintf(D_ALWAYS, "HistoryFile::poll: no %s, skipping: %d.%d\n",
++					ATTR_Q_DATE, cluster, proc);
++			continue;
++		}
++		if (!ad.LookupInteger(ATTR_JOB_STATUS, status)) {
++			dprintf(D_ALWAYS, "HistoryFile::poll: no %s, skipping: %d.%d\n",
++					ATTR_JOB_STATUS, cluster, proc);
++			continue;
++		}
++		if (!ad.LookupInteger(ATTR_ENTERED_CURRENT_STATUS, entered_status)) {
++			dprintf(D_ALWAYS, "HistoryFile::poll: no %s, skipping: %d.%d\n",
++					ATTR_ENTERED_CURRENT_STATUS, cluster, proc);
++			continue;
++		}
++		if (!ad.LookupString(ATTR_GLOBAL_JOB_ID, &global_id)) {
++			dprintf(D_ALWAYS, "HistoryFile::poll: no %s, skipping: %d.%d\n",
++					ATTR_GLOBAL_JOB_ID, cluster, proc);
++			continue;
++		}
++		if (!ad.LookupString(ATTR_JOB_CMD, &cmd)) {
++			dprintf(D_ALWAYS, "HistoryFile::poll: no %s, skipping: %d.%d\n",
++					ATTR_JOB_CMD, cluster, proc);
++			continue;
++		}
++		ad.LookupString(ATTR_JOB_ARGUMENTS1, &args1);
++		ad.LookupString(ATTR_JOB_ARGUMENTS2, &args2);
++		ad.LookupString(ATTR_RELEASE_REASON, &release_reason);
++		ad.LookupString(ATTR_HOLD_REASON, &hold_reason);
++		ad.LookupString(ATTR_JOB_SUBMISSION, &submission);
++		ad.LookupString(ATTR_OWNER, &owner);
++
++		// Write an index record
++		fprintf(m_index,
++				"%ld %ld %s %d %d %d %d %d\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n",
++				start, stop, global_id,
++				cluster, proc,
++				q_date, status, entered_status,
++				submission ? submission : "",
++				owner ? owner : "",
++				cmd,
++				args1 ? args1 : "",
++				args2 ? args2 : "",
++				release_reason ? release_reason : "",
++				hold_reason ? hold_reason : "");
++
++		HistoryEntry entry;
++
++		entry.file = m_name;
++		entry.start = start;
++		entry.stop = stop;
++		entry.id = global_id;
++		entry.cluster = cluster;
++		entry.proc = proc;
++		entry.q_date = q_date;
++		entry.status = status;
++		entry.entered_status = entered_status;
++		if (submission) entry.submission = submission;
++		if (owner) entry.owner = owner;
++		entry.cmd = cmd;
++		if (args1) entry.args1 = args1;
++		if (args2) entry.args2 = args2;
++		if (release_reason) entry.release_reason = release_reason;
++		if (hold_reason) entry.hold_reason = hold_reason;
++
++		m_entries.push_back(entry);
++	}
++
++		// Return iterators for newly read records
++	return HistoryFile::HistoryEntriesTypeIterators(m_entries.begin() + size,
++													m_entries.end());
++}
++
++/**
++ * Index format:
++ *  start(%ld) stop(%ld) id(%s) cluster(%d) proc(%d) q_date(%d) status(%d) entered_status(%d)
++ *  submission(%s)
++ *  cmd(%s)
++ *  args1(%s)
++ * 	args2(%s)
++ *  release_reason(%s)
++ *  hold_reason(%s)
++ */
++bool
++HistoryFile::pollIndex(CondorError &errstack)
++{
++	while (1) {
++		int code;
++		HistoryEntry entry;
++
++		entry.file = m_name;
++		char *id = NULL;
++		code = fscanf(m_index, "%ld %ld %as %d %d %d %d %d",
++					  &entry.start, &entry.stop, &id,
++					  &entry.cluster, &entry.proc,
++					  &entry.q_date, &entry.status, &entry.entered_status);
++		if (code != 8) {
++			// Ok, at the end of the file, we're done
++			// code check is to handle truncated final entry
++			if (feof(m_index) && code < 0) {
++				break;
++			}
++
++			// XXX: EINTR?
++			errstack.pushf("HistoryFile::pollIndex", 6,
++						   "Failed to fscanf HistoryEntry from %s, "
++						   "rc=%d: %d (%s)\n",
++						   m_index_name.c_str(), code, errno, strerror(errno));
++
++			return false;
++		}
++
++		MyString buf;
++
++		buf.readLine(m_index); // consume newline
++
++#define BUF_SET(dest,attr)											\
++		if (buf.readLine(m_index)) {								\
++			buf.trim();												\
++			if (!buf.IsEmpty()) {									\
++				dest = buf.Value();									\
++			}														\
++		} else {													\
++			errstack.pushf("HistoryFile::pollIndex", 7,				\
++						   "Failed to read %s's %s from %s\n",		\
++						   id, attr, m_index_name.c_str());			\
++			return false;											\
++		}
++
++		BUF_SET(entry.submission, ATTR_JOB_SUBMISSION);
++		BUF_SET(entry.owner, ATTR_OWNER);
++		BUF_SET(entry.cmd, ATTR_JOB_CMD);
++		BUF_SET(entry.args1, ATTR_JOB_ARGUMENTS1);
++		BUF_SET(entry.args2, ATTR_JOB_ARGUMENTS2);
++		BUF_SET(entry.release_reason, ATTR_RELEASE_REASON);
++		BUF_SET(entry.hold_reason, ATTR_HOLD_REASON);
++
++		entry.id = id;
++		free(id); id = NULL;
++
++		m_entries.push_back(entry);
++	}
++
++	return true;
++}
+diff --git a/src/condor_contrib/aviary/src/HistoryFile.h b/src/condor_contrib/aviary/src/HistoryFile.h
+new file mode 100644
+index 0000000..a7b0adc
+--- /dev/null
++++ b/src/condor_contrib/aviary/src/HistoryFile.h
+@@ -0,0 +1,90 @@
++/*
++ * Copyright 2009-2011 Red Hat, Inc.
++ *
++ * 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.
++ */
++
++#ifndef _HISTORYFILE_H
++#define _HISTORYFILE_H
++
++#include <string>
++#include <deque>
++
++using std::string;
++using std::deque;
++using std::pair;
++
++#include "stat_wrapper.h"
++#include "CondorError.h"
++
++namespace aviary {
++namespace history {
++		
++struct HistoryEntry
++{
++	string file;
++	long int start; // ftell stream index for record start
++	long int stop;  // ftell stream index for record end
++	string id;
++	int q_date;
++	int cluster;
++	int proc;
++	int status;
++	int entered_status;
++	string submission;
++	string owner;
++	string cmd;
++	string args1;
++	string args2;
++	string release_reason;
++	string hold_reason;
++};
++
++class HistoryFile
++{
++public:
++	typedef deque<HistoryEntry> HistoryEntriesType;
++	typedef HistoryEntriesType::const_iterator HistoryEntriesTypeIterator;
++	typedef pair<HistoryEntriesTypeIterator,
++				 HistoryEntriesTypeIterator> HistoryEntriesTypeIterators;
++
++	HistoryFile(const string name);
++
++	~HistoryFile();
++
++	HistoryFile(const HistoryFile &base);
++	HistoryFile & operator=(const HistoryFile &base);
++
++	bool init(CondorError &errstack);
++
++	bool getId(long unsigned int &id);
++
++	HistoryEntriesTypeIterators poll(CondorError &errstack);
++
++	void cleanup();
++
++private:
++	string m_name;
++	string m_index_name;
++	HistoryEntriesType m_entries;
++	StatStructType *m_stat;
++	FILE *m_file;
++	FILE *m_index;
++
++	bool pollIndex(CondorError &errstack);
++
++};
++
++}}
++
++#endif /* _HISTORYFILE_H */
+diff --git a/src/condor_contrib/aviary/src/HistoryProcessingUtils.cpp b/src/condor_contrib/aviary/src/HistoryProcessingUtils.cpp
+new file mode 100644
+index 0000000..0936f4d
+--- /dev/null
++++ b/src/condor_contrib/aviary/src/HistoryProcessingUtils.cpp
+@@ -0,0 +1,265 @@
++/*
++ * Copyright 2009-2011 Red Hat, Inc.
++ *
++ * 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.
++ */
++
++// condor includes
++#include "condor_common.h"
++#include "condor_config.h"
++#include "condor_debug.h"
++#include "condor_attributes.h"
++#include "CondorError.h"
++#include "directory.h"
++#include "stat_wrapper.h"
++
++//local includes
++#include "JobServerJobLogConsumer.h"
++#include "Job.h"
++#include "HistoryProcessingUtils.h"
++#include "HistoryFile.h"
++#include "AviaryUtils.h"
++#include "Globals.h"
++
++// platform includes
++#include <libgen.h> // dirname
++
++// c++ includes
++#include <string>
++#include <deque>
++#include <set>
++
++using namespace aviary::query;
++
++#define HISTORY_INDEX_SUFFIX ".idx"
++using namespace std;
++
++typedef set<long unsigned int> HistoryFileListType;
++static HistoryFileListType m_historyFiles;
++MyString m_path;
++
++// force a reset of history processing
++void aviary::history::init_history_files() {
++    m_historyFiles.clear();
++    processHistoryDirectory();
++    processOrphanedIndices();
++    processCurrentHistory(true);
++}
++
++// Processing jobs from history file must allow for
++// duplicates, such as when current history file is renamed.
++static
++void
++process ( const HistoryEntry &entry )
++{
++    MyString key;
++
++    key.sprintf ( "%d.%d", entry.cluster, entry.proc );
++
++    const char* key_cstr = key.StrDup();
++
++    HistoryJobImpl *hji = new HistoryJobImpl (entry);
++
++    JobCollectionType::const_iterator element = g_jobs.find ( key_cstr );
++    if ( g_jobs.end() != element )
++    {
++	(*element).second->setImpl(hji);
++	dprintf ( D_FULLDEBUG, "HistoryJobImpl added to '%s'\n", key_cstr );
++    }
++    else {
++      // live job long gone...could be a restart
++      Job* job = new Job(key_cstr);
++      job->setImpl(hji);
++      g_jobs[key_cstr] = job;
++      dprintf ( D_FULLDEBUG, "HistoryJobImpl created for '%s'\n", key_cstr);
++    }
++
++	// // debug
++	// fprintf ( stdout,
++	//          "%ld %ld %s %d %d %d %d %d %s %s %s %s %s %s %s\n",
++	//          entry.start, entry.stop, entry.id.c_str(),
++	//          entry.cluster, entry.proc,
++	//          entry.q_date, entry.status, entry.entered_status,
++	//          entry.submission.c_str(),
++	//          entry.owner.c_str(),
++	//          entry.cmd.c_str(),
++	//          entry.args1.c_str(),
++	//          entry.args2.c_str(),
++	//          entry.release_reason.c_str(),
++	//          entry.hold_reason.c_str() );
++}
++
++/**
++ * Process the history directory and maintain the history file map
++ *
++ * Only handle rotated history files, those history.* that are not an
++ * index. For each one that is not in the history file map, create a
++ * new HistoryFile, poll it for entries to process, and add it to the
++ * map.
++ */
++void
++aviary::history::processHistoryDirectory()
++{
++    const char *file = NULL;
++
++    Directory dir ( m_path.Value() );
++    dir.Rewind();
++    while ( ( file = dir.Next() ) )
++    {
++        // Skip all non-history files, e.g. history and history.*.idx
++        if ( strncmp ( file, "history.", 8 ) ||
++                !strncmp ( file + ( strlen ( file ) - 4 ), HISTORY_INDEX_SUFFIX, 4 ) ) continue;
++
++        HistoryFile h_file ( ( m_path + DIR_DELIM_STRING + file ).Value() );
++        CondorError errstack;
++        if ( !h_file.init ( errstack ) )
++        {
++            dprintf ( D_ALWAYS, "%s\n", errstack.getFullText() );
++            return;
++        }
++        errstack.clear();
++
++        long unsigned int id;
++        ASSERT ( h_file.getId ( id ) );
++        HistoryFileListType::iterator entry = m_historyFiles.find ( id );
++        if ( m_historyFiles.end() == entry )
++        {
++            HistoryFile::HistoryEntriesTypeIterators ij = h_file.poll ( errstack );
++            for ( HistoryFile::HistoryEntriesTypeIterator i = ij.first;
++                    i != ij.second;
++                    i++ )
++            {
++                process ( ( *i ) );
++            }
++
++            m_historyFiles.insert ( id );
++        }
++    }
++}
++
++/**
++ * Process orphaned index files, those that exist but do not have a
++ * corresponding history file.
++ *
++ * Process all .idx files looking for the corresponding HistoryFile in
++ * the history file map.
++ */
++void
++aviary::history::processOrphanedIndices()
++{
++    const char *file = NULL;
++
++    Directory dir ( m_path.Value() );
++    dir.Rewind();
++    while ( ( file = dir.Next() ) )
++    {
++        // Skip all non-history index files, e.g. history and history.*
++        if ( strncmp ( file, "history.", 8 ) ||
++                strncmp ( file + ( strlen ( file ) - 4 ), HISTORY_INDEX_SUFFIX, 4 ) ) continue;
++
++        // XXX: This is ugly because it indicates we know details
++        // of how HistoryFile implements index files.
++
++        // The index file is "history.%ld.idx" where %ld is the id
++        // of the history file the index is for.
++
++        long unsigned int id;
++        int count = sscanf ( file, "history.%ld.idx", &id );
++        if ( 1 != count )
++        {
++            dprintf ( D_ALWAYS, "Error parsing %s, skipping.\n", file );
++            continue;
++        }
++
++        HistoryFileListType::iterator entry = m_historyFiles.find ( id );
++        if ( m_historyFiles.end() == entry )
++        {
++            // The index is dangling, remove it.
++            if ( !dir.Remove_Current_File() )
++            {
++               dprintf ( D_ALWAYS, "Failed to remove: %s\n", file );
++            }
++        }
++    }
++}
++
++/**
++ * Process the current history file.
++ *
++ * 1) check to see if it is properly initialized, recording id (inode)
++ * 2) stat the current history file
++ * 3) poll for new entries and process them
++ * 4) detect rotations
++ */
++void
++aviary::history::processCurrentHistory(bool force_reset)
++{
++    static MyString currentHistoryFilename = m_path + DIR_DELIM_STRING + "history";
++    static HistoryFile currentHistory ( currentHistoryFilename.Value() );
++
++    CondorError errstack;
++
++    if (force_reset) {
++       currentHistory.cleanup();
++    }
++
++	// (1)
++    long unsigned int id;
++    if ( !currentHistory.getId ( id ) || force_reset)
++    {
++        if ( !currentHistory.init ( errstack ) )
++        {
++            dprintf ( D_ALWAYS, "%s\n", errstack.getFullText() );
++            return;
++        }
++        ASSERT ( currentHistory.getId ( id ) );
++        m_historyFiles.insert ( id );
++    }
++
++    // (2)
++    // Stat before poll to handle race of: poll + write + rotate + stat
++    StatWrapper stat_wrapper;
++    if ( stat_wrapper.Stat ( currentHistoryFilename ) )
++    {
++        dprintf ( D_ALWAYS, "Failed to stat %s: %d (%s)\n",
++                  currentHistoryFilename.Value(),
++                  stat_wrapper.GetErrno(), strerror ( stat_wrapper.GetErrno() ) );
++        return;
++    }
++    const StatStructType *stat = stat_wrapper.GetBuf();
++    ASSERT ( currentHistory.getId ( id ) );
++
++    // (3)
++    errstack.clear();
++    HistoryFile::HistoryEntriesTypeIterators poll = currentHistory.poll ( errstack );
++    for ( HistoryFile::HistoryEntriesTypeIterator i = poll.first;
++            i != poll.second;
++            i++ )
++    {
++        process ( ( *i ) );
++    }
++
++    // (4)
++    // If different the file has rotated
++    if ( id != stat->st_ino )
++    {
++        currentHistory = HistoryFile ( currentHistoryFilename.Value() );
++        if ( !currentHistory.init ( errstack ) )
++        {
++            dprintf ( D_ALWAYS, "%s\n", errstack.getFullText() );
++            return;
++        }
++        ASSERT ( currentHistory.getId ( id ) );
++        m_historyFiles.insert ( id );
++    }
++}
+diff --git a/src/condor_contrib/aviary/src/HistoryProcessingUtils.h b/src/condor_contrib/aviary/src/HistoryProcessingUtils.h
+new file mode 100644
+index 0000000..c16531a
+--- /dev/null
++++ b/src/condor_contrib/aviary/src/HistoryProcessingUtils.h
+@@ -0,0 +1,34 @@
++/*
++ * Copyright 2009-2011 Red Hat, Inc.
++ *
++ * 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.
++ */
++
++#ifndef _HISTORYPROCESSINGUTILS_H
++#define _HISTORYPROCESSINGUTILS_H
++
++#include "Job.h"
++#include "AviaryUtils.h"
++
++namespace aviary {
++namespace history {
++
++void init_history_files();
++void processHistoryDirectory();
++void processOrphanedIndices();
++void processCurrentHistory(bool force_reset = false);
++bool populateMapFromClassAd ( ClassAd& ad, AttributeMapType& _map );
++
++}}
++
++#endif /* _HISTORYPROCESSINGUTILS_H */
+diff --git a/src/condor_contrib/aviary/src/Job.cpp b/src/condor_contrib/aviary/src/Job.cpp
+new file mode 100644
+index 0000000..8465593
+--- /dev/null
++++ b/src/condor_contrib/aviary/src/Job.cpp
+@@ -0,0 +1,691 @@
++/***************************************************************
++ *
++ * Copyright (C) 2009-2011 Red Hat, Inc.
++ *
++ * 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.
++ *
++ ***************************************************************/
++
++// condor includes
++#include "condor_common.h"
++#include "condor_debug.h"
++#include "condor_attributes.h"
++#include "condor_parser.h"
++#include "compat_classad.h"
++#include "proc.h"
++#include "stl_string_utils.h"
++
++// c++ includes
++#include <sstream>
++
++// local includes
++#include "Globals.h"
++#include "AviaryUtils.h"
++
++using namespace std;
++using namespace compat_classad;
++using namespace aviary::query;
++using namespace aviary::util;
++
++// Any key that begins with the '0' char is either the
++// header or a cluster, i.e. not a job
++#define IS_JOB(key) ((key) && '0' != (key)[0])
++
++// summary attributes
++ const char *ATTRS[] = {ATTR_CLUSTER_ID,
++                           ATTR_PROC_ID,
++                           ATTR_GLOBAL_JOB_ID,
++                           ATTR_Q_DATE,
++                           ATTR_ENTERED_CURRENT_STATUS,
++                           ATTR_JOB_STATUS,
++                           ATTR_JOB_CMD,
++                           ATTR_JOB_ARGUMENTS1,
++                           ATTR_JOB_ARGUMENTS2,
++                           ATTR_RELEASE_REASON,
++                           ATTR_HOLD_REASON,
++                           ATTR_JOB_SUBMISSION,
++                           ATTR_OWNER,
++                           NULL
++                          };
++
++// TODO: C++ utils which may very well exist elsewhere :-)
++template <class T>
++bool from_string ( T& t,
++                   const string& s,
++                   ios_base& ( *f ) ( ios_base& ) )
++{
++    istringstream iss ( s );
++    return ! ( iss >> f >> t ).fail();
++}
++
++template <class T>
++string to_string ( T t, ios_base & ( *f ) ( ios_base& ) )
++{
++    ostringstream oss;
++    oss << f << t;
++    return oss.str();
++}
++
++//////////////
++// LiveJobImpl
++//////////////
++LiveJobImpl::LiveJobImpl (const char* cluster_proc, ClusterJobImpl* parent)
++{
++    m_job = NULL;
++    m_parent = NULL;
++    m_summary_ad = NULL;
++    m_full_ad = new ClassAd();
++    if ( parent)
++    {
++        m_parent = parent;
++        m_parent->incrementRef();
++        m_full_ad->ChainToAd ( parent->m_full_ad );
++    }
++
++    dprintf ( D_FULLDEBUG, "LiveJobImpl created for '%s'\n", cluster_proc);
++}
++
++LiveJobImpl::~LiveJobImpl()
++{
++    // unchain our parent first
++    if (m_full_ad) {
++        m_full_ad->Unchain();
++        delete m_full_ad;
++        m_full_ad = NULL;
++    }
++
++    if (m_summary_ad) {
++        delete m_summary_ad;
++        m_summary_ad = NULL;
++    }
++
++    if (m_parent) {
++        m_parent->decrementRef();
++    }
++
++    dprintf ( D_FULLDEBUG, "LiveJobImpl destroyed: key '%s'\n", m_job->getKey());
++}
++
++bool
++LiveJobImpl::get ( const char *_name, const AviaryAttribute *&_attribute ) const
++{
++    // our job ad is chained so lookups will
++    // encompass our parent ad as well as the child
++
++    // parse the type
++    ExprTree *expr = NULL;
++    if ( ! ( expr = m_full_ad->Lookup ( _name ) ) )
++    {
++	    dprintf ( D_FULLDEBUG,
++                  "warning: failed to lookup attribute %s in job '%s'\n", _name, m_job->getKey() );
++        return false;
++    }
++    // decode the type
++    classad::Value value;
++    m_full_ad->EvaluateExpr(expr,value);
++    switch ( value.GetType() )
++    {
++        case classad::Value::INTEGER_VALUE:
++        {
++            int i;
++            if ( !m_full_ad->LookupInteger ( _name, i ) )
++            {
++                return false;
++            }
++            _attribute = new AviaryAttribute ( AviaryAttribute::INTEGER_TYPE, to_string<int> ( i,dec ).c_str() );
++            return true;
++        }
++        case classad::Value::REAL_VALUE:
++        {
++            float f;
++            if ( !m_full_ad->LookupFloat ( _name, f ) )
++            {
++                return false;
++            }
++            _attribute = new AviaryAttribute ( AviaryAttribute::FLOAT_TYPE, to_string<float> ( f,dec ).c_str() );
++            return true;
++        }
++        case classad::Value::STRING_VALUE:
++        {
++            MyString str;
++            if ( !m_full_ad->LookupString ( _name, str ) )
++            {
++                return false;
++            }
++            _attribute = new AviaryAttribute ( AviaryAttribute::STRING_TYPE, str.StrDup() );
++            return true;
++        }
++        default:
++        {
++            ExprTree* tree = NULL;
++            if ( ! ( tree = m_full_ad->Lookup ( _name ) ) )
++            {
++                return false;
++            }
++            const char* rhs;
++            rhs = ExprTreeToString( expr );
++            _attribute = new AviaryAttribute ( AviaryAttribute::EXPR_TYPE, rhs );
++            return true;
++        }
++    }
++
++    return false;
++}
++
++int LiveJobImpl::getStatus() const
++{
++    const AviaryAttribute* attr;
++
++    if ( !this->get ( ATTR_JOB_STATUS, attr ) )
++    {
++	// assume we might get cluster jobs here also
++	return JOB_STATUS_MIN;
++    }
++
++    return strtol ( attr->getValue(), ( char ** ) NULL, 10 );
++}
++
++void
++LiveJobImpl::set ( const char *_name, const char *_value )
++{
++
++    if ( strcasecmp ( _name, ATTR_JOB_SUBMISSION ) == 0 )
++    {
++        string val = trimQuotes( _value );
++        // grab the cluster from our key
++        PROC_ID id = getProcByString(m_job->getKey());
++	if (m_job) {
++		m_job->setSubmission ( val.c_str(), id.cluster );
++	}
++    }
++
++    // our status is changing...decrement for old one
++    if ( strcasecmp ( _name, ATTR_JOB_STATUS ) == 0 )
++    {
++	if ( m_job )
++        {
++	    m_job->setStatus(this->getStatus());
++            m_job->decrementSubmission ();
++        }
++    }
++
++    if ( strcasecmp ( _name, ATTR_OWNER ) == 0 )
++    {
++	// need to leave an owner for this job
++	// to be picked up soon
++	// if we are in here, we don't have m_submission
++	PROC_ID id = getProcByString(m_job->getKey());
++	string val = trimQuotes( _value );
++	g_ownerless_clusters[id.cluster] = val;
++	m_job->updateSubmission(id.cluster,val.c_str());
++    }
++
++    // parse the type
++    ExprTree *expr;
++    if ( ParseClassAdRvalExpr ( _value, expr ) )
++    {
++        dprintf ( D_ALWAYS,
++                  "error: parsing %s[%s] = %s, skipping\n",
++                  m_job->getKey(), _name, _value );
++        return;
++    }
++    // add this value to the classad
++    classad::Value value;
++    expr->Evaluate(value);
++    switch ( value.GetType() )
++    {
++        case classad::Value::INTEGER_VALUE:
++            int i;
++            from_string<int> ( i, string ( _value ), dec );
++            m_full_ad->Assign ( _name, i );
++            break;
++        case classad::Value::REAL_VALUE:
++            float f;
++            from_string<float> ( f, string ( _value ), dec );
++            m_full_ad->Assign ( _name, f );
++            break;
++        case classad::Value::STRING_VALUE:
++            m_full_ad->Assign ( _name, _value );
++            break;
++        default:
++            m_full_ad->AssignExpr ( _name, _value );
++            break;
++    }
++    delete expr; expr = NULL;
++
++    // our status has changed...increment for new one
++    if ( strcasecmp ( _name, ATTR_JOB_STATUS ) == 0 )
++    {
++        if ( m_job )
++        {
++	    m_job->setStatus(this->getStatus());
++            m_job->incrementSubmission ();
++        }
++    }
++}
++
++void
++LiveJobImpl::remove ( const char *_name )
++{
++	// seems we implode if we don't unchain first
++	classad::ClassAd* cp = m_full_ad->GetChainedParentAd();
++	m_full_ad->Delete ( _name );
++	m_full_ad->ChainToAd(cp);
++}
++
++const ClassAd* LiveJobImpl::getSummary () const
++{
++	ClassAd* _summary_ad = NULL;
++	if (!m_summary_ad) {
++		_summary_ad = new ClassAd();
++		_summary_ad->ResetExpr();
++		int i = 0;
++		while (NULL != ATTRS[i]) {
++			const AviaryAttribute* attr = NULL;
++			if (this->get(ATTRS[i],attr)) {
++				switch (attr->getType()) {
++					case AviaryAttribute::FLOAT_TYPE:
++						_summary_ad->Assign(ATTRS[i], atof(attr->getValue()));
++						break;
++					case AviaryAttribute::INTEGER_TYPE:
++						_summary_ad->Assign(ATTRS[i], atol(attr->getValue()));
++						break;
++					case AviaryAttribute::EXPR_TYPE:
++					case AviaryAttribute::STRING_TYPE:
++					default:
++						_summary_ad->Assign(ATTRS[i], strdup(attr->getValue()));
++				}
++			}
++		i++;
++		}
++	} else {
++		_summary_ad = m_summary_ad;
++	}
++
++	return _summary_ad;
++}
++
++const ClassAd* LiveJobImpl::getFullAd () const
++{
++    return m_full_ad;
++}
++
++/////////////////
++// ClusterJobImpl
++/////////////////
++ClusterJobImpl::ClusterJobImpl(const char* key): LiveJobImpl(key, NULL)
++{
++        m_ref_count = 0;
++}
++
++ClusterJobImpl::~ClusterJobImpl()
++{
++        dprintf ( D_FULLDEBUG, "ClusterJobImpl destroyed: key '%s'\n", m_job->getKey());
++}
++
++void
++ClusterJobImpl::incrementRef()
++{
++        m_ref_count++;
++}
++
++void
++ClusterJobImpl::decrementRef()
++{
++        --m_ref_count;
++}
++
++/////////////////
++// HistoryJobImpl
++/////////////////
++HistoryJobImpl::HistoryJobImpl ( const HistoryEntry& _he):
++	m_he(_he)
++{
++    m_job = NULL;
++    g_ownerless_clusters[_he.cluster] = _he.owner;
++    dprintf ( D_FULLDEBUG, "HistoryJobImpl created for '%d.%d'\n", _he.cluster, _he.proc );
++}
++
++HistoryJobImpl::~HistoryJobImpl ()
++{
++	dprintf ( D_FULLDEBUG, "HistoryJobImpl destroyed: key '%s'\n", m_job->getKey());
++}
++
++int HistoryJobImpl::getStatus() const
++{
++    return m_he.status;
++}
++
++int HistoryJobImpl::getCluster() const
++{
++	return m_he.cluster;
++}
++
++const char* HistoryJobImpl::getSubmissionId() const
++{
++	return m_he.submission.c_str();
++}
++
++void HistoryJobImpl::getSummary ( ClassAd& _ad ) const
++{
++	_ad.ResetExpr();
++	// use HistoryEntry data only
++	_ad.Assign(ATTR_GLOBAL_JOB_ID,m_he.id.c_str());
++	_ad.Assign(ATTR_CLUSTER_ID,m_he.cluster);
++	_ad.Assign(ATTR_PROC_ID,m_he.proc);
++	_ad.Assign(ATTR_Q_DATE,m_he.q_date);
++	_ad.Assign(ATTR_JOB_STATUS,m_he.status);
++	_ad.Assign(ATTR_ENTERED_CURRENT_STATUS,m_he.entered_status);
++	_ad.Assign(ATTR_JOB_SUBMISSION,m_he.submission.c_str());
++	_ad.Assign(ATTR_OWNER,m_he.owner.c_str());
++	_ad.Assign(ATTR_JOB_CMD,m_he.cmd.c_str());
++
++	// beyond here these may be empty so don't
++	// automatically add to summary
++	if (!m_he.args1.empty()) {
++		_ad.Assign(ATTR_JOB_ARGUMENTS1,m_he.args1.c_str());
++	}
++	if (!m_he.args2.empty()) {
++		_ad.Assign(ATTR_JOB_ARGUMENTS2,m_he.args2.c_str());
++	}
++	if (!m_he.release_reason.empty()) {
++		_ad.Assign(ATTR_RELEASE_REASON,m_he.release_reason.c_str());
++	}
++	if (!m_he.hold_reason.empty()) {
++		_ad.Assign(ATTR_HOLD_REASON,m_he.hold_reason.c_str());
++	}
++
++}
++
++// specialization: this GetFullAd has to retrieve its classad attributes
++// from the history file based on index pointers
++void
++ HistoryJobImpl::getFullAd ( ClassAd& _ad) const
++{
++    // fseek to he.start
++    // ClassAd method to deserialize from a file with "***"
++
++    FILE * hFile;
++    int end = 0;
++    int error = 0;
++    int empty = 0;
++	string _text;
++
++    // TODO: move the ClassAd/file deserialize back to HistoryFile???
++    const char* fName = m_he.file.c_str();
++    if ( ! ( hFile = safe_fopen_wrapper ( fName, "r" ) ) )
++    {
++		sprintf(_text,"unable to open history file '%s'", m_he.file.c_str());
++        dprintf ( D_ALWAYS, "%s\n",_text.c_str());
++		_ad.Assign("JOB_AD_ERROR",_text.c_str());
++		return;
++    }
++    if ( fseek ( hFile , m_he.start , SEEK_SET ) )
++    {
++		sprintf(_text,"bad seek in '%s' at index %d", m_he.file.c_str(),m_he.start);
++        dprintf ( D_ALWAYS, "%s\n",_text.c_str());
++		_ad.Assign("JOB_AD_ERROR",_text.c_str());
++        return;
++    }
++
++    ClassAd myJobAd ( hFile, "***", end, error, empty );
++    fclose ( hFile );
++
++	// debug logging and error to i/f for now
++	// we might not have our original history file anymore
++    if ( error )
++    {
++		sprintf(_text,"malformed ad for job '%s' in file '%s'",m_job->getKey(), m_he.file.c_str());
++        dprintf ( D_FULLDEBUG, "%s\n", _text.c_str());
++		_ad.Assign("JOB_AD_ERROR",_text.c_str());
++		return;
++    }
++    if ( empty )
++    {
++		sprintf(_text,"empty ad for job '%s' in '%s'", m_job->getKey(),m_he.file.c_str());
++        dprintf ( D_FULLDEBUG,"%s\n", _text.c_str());
++		_ad.Assign("JOB_AD_ERROR",_text.c_str());
++		return;
++    }
++
++	if (!_ad.CopyFrom(myJobAd)) {
++		sprintf(_text,"problem copying contents of history ClassAd for '%s'",m_job->getKey());
++		dprintf ( D_ALWAYS, "%s\n",_text.c_str());
++		_ad.Assign("JOB_AD_ERROR",_text.c_str());
++	}
++
++}
++
++//////
++// Job
++//////
++Job::Job(const char* _key):  m_submission(NULL), m_live_job(NULL), m_history_job(NULL), m_key(_key) 
++{
++        dprintf (D_FULLDEBUG,"Job::Job of '%s'\n", m_key);
++}
++
++Job::~Job() {
++	// Destroy will be safe way to
++	// cleanup
++
++	dprintf (D_FULLDEBUG,"Job::~Job of '%s'\n", m_key);
++
++    this->decrementSubmission();
++
++	delete m_live_job;
++	delete m_history_job;
++
++	delete m_key;
++	// submissions are shared and can't be deleted here
++}
++
++void Job::setImpl (LiveJobImpl* lji)
++{
++	lji->setJob(this);
++	// probably shouldn't happen
++	if (m_live_job) {
++		delete m_live_job;
++	}
++	m_live_job = lji;
++
++	// status of a live job always has precedence
++	// so decrement if the history job got in ahead of it
++	if (m_history_job) {
++		m_status = m_history_job->getStatus();
++		m_submission->decrement(this);
++	}
++	m_status = m_live_job->getStatus();
++}
++
++void Job::setImpl (HistoryJobImpl* hji)
++{
++	hji->setJob(this);
++	// probably shouldn't happen
++	if (m_history_job) {
++		delete m_history_job;
++	}
++	m_history_job = hji;
++
++	// stay away from extra inc/decs if the live job is still doing its thing
++	if (!m_submission) {
++		m_status = m_history_job->getStatus();
++		setSubmission(m_history_job->getSubmissionId(),m_history_job->getCluster());
++	}
++
++	// call Destroy to see if we can clean up the live job
++	this->destroy();
++}
++
++void Job::setStatus(int status)
++{
++	m_status = status;
++}
++
++const char* Job::getKey() const
++{
++	return m_key;
++}
++
++void Job::set ( const char *_name, const char *_value ) {
++	if (m_live_job) {
++		m_live_job->set(_name,_value);
++	}
++	// ignore for history jobs
++}
++
++void Job::remove ( const char *_name ) {
++	if (m_live_job) {
++		m_live_job->remove(_name);
++	}
++	// ignore for history jobs
++}
++
++void Job::incrementSubmission() {
++	if (m_submission) {
++		m_submission->increment(this);
++	}
++}
++
++void Job::decrementSubmission() {
++	if (m_submission) {
++		m_submission->decrement(this);
++	}
++}
++
++void
++Job::updateSubmission ( int cluster, const char* owner )
++{
++	OwnerlessSubmissionType::const_iterator it = g_ownerless_submissions.find ( cluster );
++	if ( g_ownerless_submissions.end() != it ) {
++		SubmissionObject* submission = (*it).second;
++		submission->setOwner(owner);
++		g_ownerless_submissions.erase(cluster);
++	}
++}
++
++void
++Job::setSubmission ( const char* _subName, int cluster )
++{
++	const char* owner = NULL;
++
++	// need to see if someone has left us an owner
++	OwnerlessClusterType::const_iterator it = g_ownerless_clusters.find ( cluster );
++	if ( g_ownerless_clusters.end() != it )
++	{
++		owner = ( *it ).second.c_str() ;
++	}
++
++	SubmissionCollectionType::const_iterator element = g_submissions.find ( _subName );
++	SubmissionObject *submission;
++	if ( g_submissions.end() == element )
++	{
++		submission = new SubmissionObject ( _subName, owner );
++		g_submissions[strdup ( _subName ) ] = submission;
++	}
++	else
++	{
++		submission = ( *element ).second;
++	}
++	m_submission = submission;
++
++	m_submission->increment(this);
++
++	if (owner) {
++		// ensure that the submission has an owner
++		m_submission->setOwner ( owner );
++		g_ownerless_clusters.erase ( cluster );
++	}
++	else {
++		// add it to our list to be updated for owner
++		g_ownerless_submissions[cluster] = m_submission;
++	}
++
++}
++
++bool ClusterJobImpl::destroy()
++{
++        return m_ref_count == 0;
++}
++
++bool
++LiveJobImpl::destroy()
++{
++        return ((this->getStatus() == COMPLETED) || (this->getStatus() == REMOVED));
++}
++
++bool
++Job::destroy()
++{
++
++        bool live_destroy = (m_live_job && m_live_job->destroy());
++
++        if (m_history_job && live_destroy) {
++                // must be a proc
++                delete m_live_job;
++                m_live_job = NULL;
++                return false;
++        }
++
++        // hint to caller
++        return live_destroy;
++}
++
++// space v. speed tradeoff here - we want to keep the size of the job server down
++// since we may have to support millions of jobs in memory
++void Job::getFullAd ( ClassAd& _ad) const
++{
++	// history ads are always reconstructed
++	// so we deep copy the live job ad to be consistent
++	// on the interface
++
++	if (m_live_job) {
++		_ad = *(m_live_job->getFullAd());
++	}
++	else {
++		m_history_job->getFullAd(_ad);
++	}
++
++}
++
++// poke a hole for live job ad chaining
++const ClassAd* Job::getClassAd() const
++{
++	const ClassAd* ad_ptr = NULL;
++	if (m_live_job) {
++		ad_ptr = m_live_job->getFullAd();
++	}
++	return ad_ptr;
++
++}
++
++void Job::getSummary ( ClassAd& _ad) const
++{
++	//same thing as full ad
++	if (m_live_job) {
++		_ad = *(m_live_job->getSummary());
++	}
++	else {
++		m_history_job->getSummary(_ad);
++	}
++}
++
++int Job::getStatus() const
++{
++	return m_status;
++}
++
++JobImpl* Job::getImpl() {
++        // only will provide live job impl
++        // if it's NULL the caller needs to deal
++        return m_live_job;
++}
+diff --git a/src/condor_contrib/aviary/src/Job.h b/src/condor_contrib/aviary/src/Job.h
+new file mode 100644
+index 0000000..77e2af6
+--- /dev/null
++++ b/src/condor_contrib/aviary/src/Job.h
+@@ -0,0 +1,160 @@
++/***************************************************************
++ *
++ * Copyright (C) 2009-2011 Red Hat, Inc.
++ *
++ * 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.
++ *
++ ***************************************************************/
++
++#ifndef _JOB_H
++#define _JOB_H
++
++// c++ includes
++#include <string>
++#include <map>
++#include <set>
++#include <vector>
++
++// condor includes
++#include "condor_common.h"
++#include "condor_debug.h"
++#include "condor_classad.h"
++
++// local includes
++#include "Codec.h"
++#include "HistoryFile.h"
++#include "cmpstr.h"
++
++using std::string;
++using std::map;
++using std::set;
++using std::vector;
++
++using namespace aviary::codec;
++using namespace aviary::history;
++
++namespace aviary {
++namespace query {
++
++class SubmissionObject;
++class Job;
++
++// interface class for job impls
++class JobImpl
++{
++public:
++        Job* getJob() { return m_job; }
++        void setJob(Job* _job) { m_job = _job; }
++
++protected:
++        Job* m_job;
++        JobImpl() {};
++};
++
++class ClusterJobImpl;
++
++// Job delegate that encapsulates the job active in the queue
++class LiveJobImpl: public JobImpl
++{
++    public:
++        LiveJobImpl ( const char*, ClusterJobImpl* );
++        virtual ~LiveJobImpl();
++        int getStatus () const;
++        const ClassAd* getSummary () const;
++        const ClassAd* getFullAd () const;
++        void set ( const char* , const char* );
++        bool get ( const char * , const AviaryAttribute *& ) const;
++        void remove ( const char* );
++
++        virtual bool destroy();
++
++    private:
++        ClusterJobImpl* m_parent;
++        ClassAd* m_full_ad;
++        ClassAd* m_summary_ad;
++};
++
++class ClusterJobImpl: public LiveJobImpl
++{
++public:
++        ClusterJobImpl(const char*);
++        ~ClusterJobImpl();
++        void incrementRef();
++        void decrementRef();
++        bool destroy();
++
++private:
++        int m_ref_count;
++};
++
++// Job delegate that encapsulates the archived job history
++// and can derive the attributes of its associated class ad
++class HistoryJobImpl: public JobImpl
++{
++    public:
++        HistoryJobImpl (const HistoryEntry&);
++        ~HistoryJobImpl();
++        int  getStatus () const;
++        void getSummary ( ClassAd& ) const;
++        void getFullAd ( ClassAd& ) const;
++        int  getCluster() const;
++        const char* getSubmissionId () const;
++
++    private:
++        HistoryEntry m_he;
++};
++
++// the public face of jobs
++// not for subclassing - clients (generally) shouldn't be
++// burdened with the live/history distinction
++class Job
++{
++    public:
++        Job(const char*);
++        ~Job();
++
++        const char * getKey() const;
++
++        int  getStatus () const;
++        void setStatus(int);
++
++        void getSummary (ClassAd&) const;
++        void getFullAd (ClassAd&) const;
++        const ClassAd* getClassAd() const;
++
++        void set ( const char* , const char* );
++        void remove ( const char* );
++
++        void setSubmission ( const char*, int );
++        void updateSubmission ( int, const char* );
++        void incrementSubmission();
++        void decrementSubmission();
++
++        void setImpl(LiveJobImpl*);
++        void setImpl(HistoryJobImpl*);
++        JobImpl* getImpl();
++
++        bool destroy();
++
++    private:
++        SubmissionObject *m_submission;
++        // live job to start, history job when ready
++        LiveJobImpl* m_live_job;
++        HistoryJobImpl* m_history_job;
++        const char* m_key;
++        int m_status;
++};
++
++}}
++
++#endif /* _JOB_H */
+diff --git a/src/condor_contrib/aviary/src/JobServerJobLogConsumer.cpp b/src/condor_contrib/aviary/src/JobServerJobLogConsumer.cpp
+new file mode 100644
+index 0000000..eb8c320
+--- /dev/null
++++ b/src/condor_contrib/aviary/src/JobServerJobLogConsumer.cpp
+@@ -0,0 +1,226 @@
++/***************************************************************
++ *
++ * Copyright (C) 2009-2011 Red Hat, Inc.
++ * 
++ * 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.
++ *
++ ***************************************************************/
++
++// condor includes
++#include "condor_common.h"
++#include "condor_debug.h"
++#include "condor_exprtype.h"
++#include "condor_attributes.h"
++#include "condor_astbase.h"
++#include "condor_parser.h"
++#include "condor_qmgr.h"
++#include "ClassAdLogReader.h"
++
++// local includes
++#include "JobServerJobLogConsumer.h"
++#include "Globals.h"
++#include "HistoryProcessingUtils.h"
++
++using namespace aviary::query;
++using namespace aviary::history;
++
++#define IS_JOB(key) ((key) && '0' != (key)[0])
++
++JobServerJobLogConsumer::JobServerJobLogConsumer(): m_reader(NULL)
++{ }
++
++JobServerJobLogConsumer::~JobServerJobLogConsumer()
++{ }
++
++void
++JobServerJobLogConsumer::Reset()
++{
++	// When deleting jobs, to avoid problems with jobs referencing
++	// deleted clusters, we must be sure to delete the clusters
++	// last
++
++	dprintf(D_FULLDEBUG, "JobServerJobLogConsumer::Reset() - deleting jobs and submissions\n");
++
++	for (JobCollectionType::iterator i = g_jobs.begin();
++	     g_jobs.end() != i; i++) {
++		// Skip clusters for now
++		if ('0' != (*i).second->getKey()[0]) {
++			delete (*i).second;
++			g_jobs.erase(i);
++		}
++	}
++
++	for (JobCollectionType::iterator i = g_jobs.begin();
++		  g_jobs.end() != i; i++) {
++		     delete (*i).second;
++		     g_jobs.erase(i);
++	}
++
++	for (SubmissionCollectionType::iterator i = g_submissions.begin();
++		       g_submissions.end() != i; i++) {
++			  delete (*i).second;
++			  g_submissions.erase(i);
++	}
++
++	// due to the shared use of g_jobs
++	// a JobLogReader->Reset() might cause
++	// us to reload our history
++	init_history_files();
++
++}
++
++bool
++JobServerJobLogConsumer::NewClassAd(const char *_key,
++									const char */*type*/,
++									const char */*target*/)
++{
++
++	const char* key_dup = strdup(_key);
++
++	dprintf(D_FULLDEBUG, "JobServerJobLogConsumer::NewClassAd processing _key='%s'\n", _key);
++
++	// ignore the marker
++	if (strcmp(_key,"0.0") == 0) {
++	  return true;
++	}
++
++	if ('0' == _key[0]) {
++		// Cluster ad
++		if (g_jobs.end() == g_jobs.find(_key)) {
++			Job* new_cluster_job = new Job(key_dup);
++			new_cluster_job->setImpl(new ClusterJobImpl(key_dup));
++			g_jobs[key_dup] = new_cluster_job;
++		}
++	} else {
++		// Proc ad
++
++		// first see if some other proc job is here
++		// ie history
++		if (g_jobs.end() != g_jobs.find(_key)) {
++			return true;
++		}
++
++		PROC_ID proc = getProcByString(_key);
++		MyString cluster_key;
++
++		cluster_key.sprintf("0%d.-1", proc.cluster);
++
++		const char *cluster_dup = cluster_key.StrDup();
++		JobCollectionType::const_iterator element = g_jobs.find(cluster_dup);
++        ClusterJobImpl* cluster_impl = NULL;
++
++		if (g_jobs.end() == element) {
++			// didn't find an existing cluster job so create a new one
++			Job* new_cluster_job = new Job(cluster_dup);
++            cluster_impl = new ClusterJobImpl(cluster_dup);
++            new_cluster_job->setImpl(cluster_impl);
++            g_jobs[cluster_dup] = new_cluster_job;
++		} else {
++			// found an existing cluster job - we'll assume it is the cluster parent
++			cluster_impl = static_cast<ClusterJobImpl*>((*element).second->getImpl());
++		}
++
++        Job* new_proc_job = new Job(key_dup);
++        new_proc_job->setImpl(new LiveJobImpl(key_dup, cluster_impl));
++        g_jobs[key_dup] = new_proc_job;
++
++	}
++
++	return true;
++}
++
++bool
++JobServerJobLogConsumer::DestroyClassAd(const char *_key)
++{
++
++	// ignore the marker
++	if (strcmp(_key,"0.0") == 0) {
++	  return true;
++	}
++
++   dprintf ( D_FULLDEBUG, "JobServerJobLogConsumer::DestroyClassAd - key '%s'\n", _key);
++    JobCollectionType::iterator g_element = g_jobs.find(_key);
++
++    if (g_jobs.end() == g_element) {
++        dprintf(D_ALWAYS,
++                "error reading %s: no such job found for key '%s'\n",
++                m_reader->GetClassAdLogFileName(), _key);
++        return false;
++    }
++
++    Job* job = (*g_element).second;
++    // Destroy will figure out the submission decrement
++    if (job->destroy()) {
++            delete job;
++            job = NULL;
++            g_jobs.erase(g_element);
++    }
++
++    return true;
++}
++
++bool
++JobServerJobLogConsumer::SetAttribute(const char *_key,
++									  const char *_name,
++									  const char *_value)
++{
++
++	// ignore the marker
++	if (strcmp(_key,"0.0") == 0) {
++	  return true;
++	}
++
++	if (0 == strcmp(_name,"NextClusterNum") ) {
++		// skip over these
++		//dprintf(D_FULLDEBUG, "%s: skipping job entry '%s' for '%s = %s'\n",
++		//	m_reader->GetJobLogFileName(), _key, _name, _value);
++		return true;
++	}
++
++    JobCollectionType::const_iterator g_element = g_jobs.find(_key);
++
++	if (g_jobs.end() == g_element) {
++		dprintf(D_ALWAYS,
++				"error reading %s : no such job '%s' for '%s = %s'\n",
++				m_reader->GetClassAdLogFileName(),
++				_key, _name, _value);
++		return false;
++	}
++
++	(*g_element).second->set(_name, _value);
++
++	return true;
++}
++
++bool
++JobServerJobLogConsumer::DeleteAttribute(const char *_key,
++										 const char *_name)
++{
++	// ignore the marker
++	if (strcmp(_key,"0.0") == 0) {
++	  return true;
++	}
++
++	JobCollectionType::const_iterator g_element = g_jobs.find(_key);
++
++	if (g_jobs.end() == g_element) {
++		dprintf(D_ALWAYS,
++				"error reading %s: no such job '%s' for 'delete %s'\n",
++                m_reader->GetClassAdLogFileName(), _key, _name);
++		return false;
++	}
++
++	(*g_element).second->remove(_name);
++
++	return true;
++}
+diff --git a/src/condor_contrib/aviary/src/JobServerJobLogConsumer.h b/src/condor_contrib/aviary/src/JobServerJobLogConsumer.h
+new file mode 100644
+index 0000000..22703ed
+--- /dev/null
++++ b/src/condor_contrib/aviary/src/JobServerJobLogConsumer.h
+@@ -0,0 +1,62 @@
++/***************************************************************
++ *
++ * Copyright (C) 2009-2011 Red Hat, Inc.
++ * 
++ * 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.
++ *
++ ***************************************************************/
++
++#ifndef _JOBSERVERJOBLOGCONSUMER_H
++#define _JOBSERVERJOBLOGCONSUMER_H
++
++// condor includes
++#include "condor_common.h"
++#include "condor_debug.h"
++#include "ClassAdLogReader.h"
++
++// local includes
++#include "Job.h"
++#include "SubmissionObject.h"
++
++// c++ includes
++#include <string>
++#include <map>
++#include <set>
++
++using namespace std;
++
++class JobServerJobLogConsumer: public ClassAdLogConsumer
++{
++public:
++	JobServerJobLogConsumer();
++	~JobServerJobLogConsumer();
++
++	void Reset();
++	bool NewClassAd(const char *key,
++					const char *type,
++					const char *target);
++	bool DestroyClassAd(const char *key);
++	bool SetAttribute(const char *key,
++					  const char *name,
++					  const char *value);
++	bool DeleteAttribute(const char *key,
++						 const char *name);
++    void SetJobLogReader(ClassAdLogReader *_reader) { m_reader = _reader; }
++
++
++private:
++
++    ClassAdLogReader *m_reader;
++};
++
++#endif /* _JOBSERVERJOBLOGCONSUMER_H */
+diff --git a/src/condor_contrib/aviary/src/JobServerObject.cpp b/src/condor_contrib/aviary/src/JobServerObject.cpp
+new file mode 100644
+index 0000000..ee76024
+--- /dev/null
++++ b/src/condor_contrib/aviary/src/JobServerObject.cpp
+@@ -0,0 +1,374 @@
++/*
++ * Copyright 2009-2011 Red Hat, Inc.
++ *
++ * 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.
++ */
++
++//condor includes
++#include "condor_common.h"
++#include "condor_config.h"
++#include "condor_attributes.h"
++#include "condor_debug.h"
++#include "condor_qmgr.h"
++#include "set_user_priv_from_ad.h"
++#include "stat_info.h"
++#include "stl_string_utils.h"
++
++// C++ includes
++// enable for debugging classad to ostream
++// watch out for unistd clash
++//#include <sstream>
++
++//local includes
++#include "JobServerObject.h"
++#include "AviaryConversionMacros.h"
++#include "AviaryUtils.h"
++#include "Codec.h"
++#include "JobServerJobLogConsumer.h"
++#include "Globals.h"
++
++using namespace std;
++using namespace aviary::query;
++using namespace aviary::util;
++using namespace aviary::codec;
++
++JobServerObject* JobServerObject::m_instance = NULL;
++
++JobServerObject::JobServerObject ()
++{
++	m_name = getScheddName();
++	m_pool = getPoolName();
++	m_codec = new BaseCodec;
++}
++
++JobServerObject::~JobServerObject()
++{
++	delete m_codec;
++}
++
++JobServerObject* JobServerObject::getInstance()
++{
++    if (!m_instance) {
++        m_instance = new JobServerObject();
++    }
++    return m_instance;
++}
++
++void
++JobServerObject::update ( const ClassAd &ad )
++{
++    MGMT_DECLARATIONS;
++
++    m_stats.Pool = getPoolName();
++    STRING ( CondorPlatform );
++    STRING ( CondorVersion );
++    TIME_INTEGER ( DaemonStartTime );
++//  TIME_INTEGER(JobQueueBirthdate);
++    STRING ( Machine );
++//  INTEGER(MaxJobsRunning);
++    INTEGER ( MonitorSelfAge );
++    DOUBLE ( MonitorSelfCPUUsage );
++    DOUBLE ( MonitorSelfImageSize );
++    INTEGER ( MonitorSelfRegisteredSocketCount );
++    INTEGER ( MonitorSelfResidentSetSize );
++    TIME_INTEGER ( MonitorSelfTime );
++    STRING ( MyAddress );
++    //TIME_INTEGER(MyCurrentTime);
++    STRING ( Name );
++//  INTEGER(NumUsers);
++    STRING ( PublicNetworkIpAddr );
++//  INTEGER(TotalHeldJobs);
++//  INTEGER(TotalIdleJobs);
++//  INTEGER(TotalJobAds);
++//  INTEGER(TotalRemovedJobs);
++//  INTEGER(TotalRunningJobs);
++
++    m_stats.System = m_stats.Machine;
++}
++
++Job*
++getValidKnownJob(const char* key, AviaryStatus &_status) {
++
++	// #1: is it even a proper "cluster.proc"?
++	PROC_ID id = getProcByString(key);
++	if (id.cluster < 0 || id.proc < 0) {
++		sprintf (_status.text, "Invalid job id '%s'",key);
++		dprintf(D_FULLDEBUG, "%s\n", _status.text.c_str());
++		_status.type = AviaryStatus::FAIL;
++		return NULL;
++	}
++
++	// #2 is it anywhere in our job map?
++    JobCollectionType::const_iterator element = g_jobs.find(key);
++    if ( g_jobs.end() == element ) {
++		sprintf (_status.text, "Unknown local job id '%s'",key);
++		dprintf(D_FULLDEBUG, "%s\n", _status.text.c_str());
++		_status.type = AviaryStatus::NO_MATCH;
++		return NULL;
++    }
++
++	return (*element).second;
++}
++
++bool JobServerObject::getStatus(const char* key, int& job_status, AviaryStatus &_status) {
++	Job* job = NULL;
++	if (!(job = getValidKnownJob(key,_status))) {
++		return false;
++	}
++
++	job_status = job->getStatus();
++
++	_status.type = AviaryStatus::A_OK;
++	return true;
++}
++
++bool JobServerObject::getSummary(const char* key, JobSummaryFields& _summary, AviaryStatus &_status) {
++	Job* job = NULL;
++	if (!(job = getValidKnownJob(key,_status))) {
++		return false;
++	}
++
++    ClassAd classAd;
++    job->getSummary ( classAd );
++    // little cheat for ad problems with history lookups
++    string str;
++    if ( classAd.LookupString("JOB_AD_ERROR", str) )
++    {
++		sprintf(_status.text,"Error obtaining ClassAd for job '%s'; ",key);
++		_status.text += str;
++		dprintf(D_ALWAYS,"%s\n",_status.text.c_str());
++        return false;
++    }
++
++	// return the limited attributes
++    classAd.LookupString(ATTR_JOB_CMD,_summary.cmd);
++	classAd.LookupString(ATTR_JOB_ARGUMENTS1,_summary.args1);
++	classAd.LookupString(ATTR_JOB_ARGUMENTS2,_summary.args2);
++	classAd.LookupString(ATTR_HOLD_REASON,_summary.hold_reason);
++	classAd.LookupString(ATTR_RELEASE_REASON,_summary.release_reason);
++	classAd.LookupString(ATTR_REMOVE_REASON,_summary.remove_reason);
++	classAd.LookupString(ATTR_JOB_SUBMISSION,_summary.submission_id);
++	classAd.LookupString(ATTR_OWNER,_summary.owner);
++	classAd.LookupInteger(ATTR_Q_DATE,_summary.queued);
++	classAd.LookupInteger(ATTR_ENTERED_CURRENT_STATUS,_summary.last_update);
++	_summary.status = job->getStatus();
++
++	_status.type = AviaryStatus::A_OK;
++    return true;
++}
++
++bool
++JobServerObject::getJobAd ( const char* key, AttributeMapType& _map, AviaryStatus &_status)
++{
++	Job* job = NULL;
++	if (!(job = getValidKnownJob(key,_status))) {
++		return false;
++	}
++    // call Job::getFullAd and use utils to populate the map
++    ClassAd classAd;
++    job->getFullAd ( classAd );
++    // little cheat for ad problems with history lookups
++    string str;
++    if ( classAd.LookupString("JOB_AD_ERROR", str) )
++    {
++		sprintf(_status.text,"Error obtaining ClassAd for job '%s'; ",key);
++		_status.text += str;
++		dprintf(D_ALWAYS,"%s\n",_status.text.c_str());
++    }
++
++    // return all the attributes in the ClassAd
++    if ( !m_codec->classAdToMap ( classAd, _map  ) )
++    {
++		sprintf(_status.text,"Error mapping info for job '%s'; ",key);
++		dprintf(D_ALWAYS,"%s\n",_status.text.c_str());
++        return false;
++    }
++
++    // debug
++//    if (DebugFlags & D_FULLDEBUG) {
++//        classAd.dPrint(D_FULLDEBUG|D_NOHEADER);
++//        std::ostringstream oss;
++//        oss << _map;
++//        dprintf(D_FULLDEBUG|D_NOHEADER, oss.str().c_str());
++//    }
++
++	_status.type = AviaryStatus::A_OK;
++    return true;
++}
++
++bool
++JobServerObject::fetchJobData(const char* key,
++					   const UserFileType ftype,
++					   std::string& fname,
++					   int max_bytes,
++					   bool from_end,
++					   int& fsize,
++					   std::string &data,
++					   AviaryStatus &_status)
++{
++	int32_t start;
++	int32_t end;
++	priv_state prev_priv_state;
++	int fd = -1;
++	int count;
++	int length;
++	int whence;
++	char *buffer;
++	bool fetched;
++	Job* job = NULL;
++
++	if (!(job =getValidKnownJob(key,_status))) {
++		return false;
++	}
++
++
++	ClassAd ad;
++	string str;
++	job->getFullAd ( ad );
++	if ( ad.LookupString("JOB_AD_ERROR", str)  ) {
++		sprintf(_status.text,"Error checking ClassAd for user priv on job '%s'; ",key);
++		_status.text += str;
++		dprintf(D_ALWAYS,"%s\n",_status.text.c_str());
++		return false;
++	}
++	
++	// find out what the actual file is from classad lookup
++	switch (ftype) {
++		case ERR:
++			if ( !ad.LookupString(ATTR_JOB_ERROR, fname)  ) {
++				sprintf (_status.text,  "No error file for job '%s'",key);
++				dprintf(D_ALWAYS,"%s\n", _status.text.c_str());
++				return false;
++			}
++			break;
++		case LOG:
++			if ( !ad.LookupString(ATTR_ULOG_FILE, fname)  ) {
++				sprintf (_status.text,  "No log file for job '%s'",key);
++				dprintf(D_ALWAYS,"%s\n", _status.text.c_str());
++				return false;
++			}
++			break;
++		case OUT:
++			if ( !ad.LookupString(ATTR_JOB_OUTPUT, fname)  ) {
++				sprintf (_status.text,  "No output file for job '%s'",key);
++				dprintf(D_ALWAYS,"%s\n", _status.text.c_str());
++				return false;
++			}
++			break;
++		default:
++			// ruh-roh...asking for a file type we don't know about
++			sprintf (_status.text,  "Unknown file type for job '%s'",key);
++			dprintf(D_ALWAYS,"%s\n", _status.text.c_str());
++			return false;
++	}
++	
++	StatInfo the_file(fname.c_str());
++	if (the_file.Error()) {
++		sprintf (_status.text, "Error opening requested file '%s', error %d",fname.c_str(),the_file.Errno());
++		dprintf(D_ALWAYS,"%s\n", _status.text.c_str());
++		return false;
++	}
++
++	fsize = the_file.GetFileSize();
++
++	// we calculate these based on file size
++	if (from_end) {
++		end = fsize;
++		start = end - max_bytes;
++	}
++	else {
++		start = 0;
++		end = max_bytes;
++	}
++
++	// start >= 0, end >= 0 :: lseek(start, SEEK_SET), read(end - start)
++	//  end < start :: error, attempt to read backwards
++	// start >= 0, end < 0 :: error, don't know length
++	// start < 0, end > 0 :: attempt to read off end of file, end = 0
++	// start < 0, end <= 0 :: lseek(start, SEEK_END), read(abs(start - end))
++	//  end < start :: error, attempt to read backwards
++
++	// TODO: redundant checks given above
++	if ((start >= 0 && end >= 0 && end < start) ||
++		(start >= 0 && end < 0) ||
++		(start < 0 && end <= 0 && end < start)) {
++		_status.text = "Invalid start and end values";
++		return false;
++	}
++
++	// Instead of reading off the end of the file, read to the
++	// end of it
++	if (start < 0 && end > 0) {
++		end = 0;
++	}
++
++	if (start >= 0) {
++		whence = SEEK_SET;
++		length = end - start;
++	} else {
++		whence = SEEK_END;
++		length = abs(start - end);
++	}
++
++	// TODO: Sanity check that length isn't too big?
++	buffer = new char[length + 1];
++
++	prev_priv_state = set_user_priv_from_ad(ad);
++
++	if (-1 != (fd = safe_open_wrapper(fname.c_str(),
++									  O_RDONLY | _O_BINARY,
++									  0))) {
++			// If we are seeking from the end of the file, it is
++			// possible that we will try to seek off the front of the
++			// file. To avoid this, we check the file's size and set
++			// the max length that we are able to seek
++		if (SEEK_END == whence) {
++			struct stat buf;
++			if (-1 != fstat(fd, &buf)) {
++				if (buf.st_size < abs(start)) {
++					start = -buf.st_size;
++				}
++			} // if fstat fails, we just continue having made an effort
++		}
++
++		if (-1 != lseek(fd, start, whence)) {				
++			if (-1 == (count = full_read(fd, buffer, length))) {
++				_status.text = "Failed to read from " + fname;
++				fetched = false;
++			} else {
++					// Terminate the string.
++				buffer[count] = '\0';
++
++				data = buffer;
++				fetched = true;
++			}
++
++			close(fd); // assume closed on failure?
++		} else {
++			_status.text = "Failed to seek in " + fname;
++			fetched = false;
++		}
++	} else {
++		_status.text = "Failed to open " + fname;
++		fetched = false;
++	}
++
++	set_priv(prev_priv_state);
++
++	delete [] buffer;
++
++	if (fetched) {
++		_status.type = AviaryStatus::A_OK;
++	}
++	return fetched;
++}
+diff --git a/src/condor_contrib/aviary/src/JobServerObject.h b/src/condor_contrib/aviary/src/JobServerObject.h
+new file mode 100644
+index 0000000..d305270
+--- /dev/null
++++ b/src/condor_contrib/aviary/src/JobServerObject.h
+@@ -0,0 +1,124 @@
++/*
++ * Copyright 2009-2011 Red Hat, Inc.
++ *
++ * 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.
++ */
++
++#ifndef _JOBSERVEROBJECT_H
++#define _JOBSERVEROBJECT_H
++
++// condor includes
++#include "condor_common.h"
++#include "condor_classad.h"
++
++// local includes
++#include "Codec.h"
++
++struct a;
++struct a;
++struct a;
++struct a;
++using namespace std;
++using namespace compat_classad;
++using namespace aviary::codec;
++
++namespace aviary {
++namespace query {
++
++struct JobServerStats {
++    // Properties
++    string      CondorPlatform;
++    string      CondorVersion;
++    int64_t     DaemonStartTime;
++    string      Pool;
++    string      System;
++    uint32_t    MaxJobsRunning;
++    string      Machine;
++    string      MyAddress;
++    string      Name;
++	string		PublicNetworkIpAddr;
++
++    // Statistics
++    uint32_t    MonitorSelfAge;
++    double      MonitorSelfCPUUsage;
++    double      MonitorSelfImageSize;
++    uint32_t    MonitorSelfRegisteredSocketCount;
++    uint32_t    MonitorSelfResidentSetSize;
++    int64_t     MonitorSelfTime;
++    uint32_t    NumUsers;
++};
++
++enum UserFileType {
++	ERR = 0,
++	LOG = 1,
++	OUT = 2
++};
++
++struct JobSummaryFields {
++	int status;
++	string cmd;
++	string args1;
++	string args2;
++	int queued;
++	int last_update;
++	string hold_reason;
++	string release_reason;
++	string remove_reason;
++	string submission_id;
++	string owner;
++};
++
++typedef pair<const char*,JobSummaryFields*> JobSummaryPair;
++typedef vector<JobSummaryPair> JobSummaryPairCollection;
++
++class JobServerObject
++{
++public:
++
++	void update(const ClassAd &ad);
++
++	bool getStatus(const char* id, int& status, AviaryStatus &_status);
++	bool getSummary(const char* key, JobSummaryFields& _summary, AviaryStatus &_status);
++	bool getJobAd(const char* id, AttributeMapType& _map, AviaryStatus &_status);
++	bool fetchJobData(const char* key,
++					   const UserFileType ftype,
++					   std::string& fname,
++					   int max_bytes,
++					   bool from_end,
++					   int& fsize,
++					   std::string &data,
++			           AviaryStatus &_status);
++
++    ~JobServerObject();
++	static JobServerObject* getInstance();
++
++	const char* getName() { return m_name.c_str(); }
++	const char* getPool() { return m_pool.c_str(); }
++
++private:
++    JobServerObject();
++	JobServerObject(JobServerObject const&);
++	JobServerObject& operator=(JobServerObject const&);
++
++	string m_name;
++	string m_pool;
++	JobServerStats m_stats;
++	Codec* m_codec;
++
++	static JobServerObject* m_instance;
++
++};
++
++}} /* aviary::query */
++
++#endif /* _JOBSERVEROBJECT_H */
+diff --git a/src/condor_contrib/aviary/src/PROC_ID_comparator.cpp b/src/condor_contrib/aviary/src/PROC_ID_comparator.cpp
+new file mode 100644
+index 0000000..6eb94ba
+--- /dev/null
++++ b/src/condor_contrib/aviary/src/PROC_ID_comparator.cpp
+@@ -0,0 +1,41 @@
++/*
++ * Copyright 2009-2011 Red Hat, Inc.
++ *
++ * 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.
++ */
++
++// condor includes
++#include "condor_common.h"
++#include "condor_debug.h"
++#include "proc.h"
++
++// local includes
++#include "PROC_ID_comparator.h"
++
++using namespace aviary::util;
++
++bool
++PROC_ID_comparator::operator()(const std::string &lhs, const std::string &rhs)
++{
++	PROC_ID lhs_id, rhs_id;
++
++		// !!! The EXCEPT macro is "#define EXCEPT \", so we must
++		// !!! enclose it in { }'s else we'll always EXCEPT
++
++	if (!StrToProcId(lhs.c_str(), lhs_id)) { EXCEPT("Invalid LHS PROC_ID %s", lhs.c_str()); }
++	if (!StrToProcId(rhs.c_str(), rhs_id)) { EXCEPT("Invalid RHS PROC_ID %s", rhs.c_str()); }
++
++	return
++		(lhs_id.cluster < rhs_id.cluster) ||
++		((lhs_id.cluster == rhs_id.cluster) && (lhs_id.proc < rhs_id.proc));
++}
+diff --git a/src/condor_contrib/aviary/src/PROC_ID_comparator.h b/src/condor_contrib/aviary/src/PROC_ID_comparator.h
+new file mode 100644
+index 0000000..4a45d1c
+--- /dev/null
++++ b/src/condor_contrib/aviary/src/PROC_ID_comparator.h
+@@ -0,0 +1,32 @@
++/*
++ * Copyright 2009-2011 Red Hat, Inc.
++ *
++ * 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.
++ */
++
++#ifndef _PROC_ID_COMPARATOR_H
++#define _PROC_ID_COMPARATOR_H
++
++#include <string>
++
++namespace aviary {
++namespace util {
++
++struct PROC_ID_comparator
++{
++	bool operator()(const std::string &lhs, const std::string &rhs);
++};
++
++}};
++
++#endif /* _PROC_ID_COMPARATOR_H */
+diff --git a/src/condor_contrib/aviary/src/SchedulerObject.cpp b/src/condor_contrib/aviary/src/SchedulerObject.cpp
+new file mode 100644
+index 0000000..5f48c97
+--- /dev/null
++++ b/src/condor_contrib/aviary/src/SchedulerObject.cpp
+@@ -0,0 +1,363 @@
++/*
++ * Copyright 2009-2011 Red Hat, Inc.
++ *
++ * 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.
++ */
++
++// condor includes
++#include "condor_common.h"
++#include "condor_config.h"
++#include "condor_attributes.h"
++#include "condor_debug.h"
++#include "condor_qmgr.h"
++#include "../condor_schedd.V6/scheduler.h"
++
++// local includes
++#include "AviaryUtils.h"
++#include "AviaryConversionMacros.h"
++#include "SchedulerObject.h"
++#include "Codec.h"
++
++// Global Scheduler object, used for needReschedule
++extern Scheduler scheduler;
++extern char * Name;
++
++using namespace aviary::job;
++using namespace aviary::util;
++using namespace aviary::codec;
++
++SchedulerObject* SchedulerObject::m_instance = NULL;
++
++SchedulerObject::SchedulerObject()
++{
++    m_pool = getPoolName();
++	m_name = getScheddName();
++    m_codec = new BaseCodec();
++}
++
++SchedulerObject::~SchedulerObject()
++{
++	delete m_codec;
++}
++
++SchedulerObject* SchedulerObject::getInstance()
++{
++    if (!m_instance) {
++        m_instance = new SchedulerObject();
++    }
++    return m_instance;
++}
++
++void
++SchedulerObject::update(const ClassAd &ad)
++{
++	MGMT_DECLARATIONS;
++
++	m_stats.Pool = getPoolName();
++	STRING(CondorPlatform);
++	STRING(CondorVersion);
++	TIME_INTEGER(DaemonStartTime);
++	TIME_INTEGER(JobQueueBirthdate);
++	STRING(Machine);
++	INTEGER(MaxJobsRunning);
++	INTEGER(MonitorSelfAge);
++	DOUBLE(MonitorSelfCPUUsage);
++	DOUBLE(MonitorSelfImageSize);
++	INTEGER(MonitorSelfRegisteredSocketCount);
++	INTEGER(MonitorSelfResidentSetSize);
++	TIME_INTEGER(MonitorSelfTime);
++	STRING(MyAddress);
++    //TIME_INTEGER(MyCurrentTime);
++	STRING(Name);
++	INTEGER(NumUsers);
++	STRING(MyAddress);
++	INTEGER(TotalHeldJobs);
++	INTEGER(TotalIdleJobs);
++	INTEGER(TotalJobAds);
++	INTEGER(TotalRemovedJobs);
++	INTEGER(TotalRunningJobs);
++	m_stats.System = m_stats.Machine;
++
++	// debug
++	if (DebugFlags & D_FULLDEBUG) {
++		const_cast<ClassAd*>(&ad)->dPrint(D_FULLDEBUG|D_NOHEADER);
++	}
++}
++
++
++bool
++SchedulerObject::submit(AttributeMapType &jobAdMap, std::string &id, std::string &text)
++{
++	int cluster;
++	int proc;
++
++    if (!m_codec) {
++        text = "Codec has not been initialized";
++        return false;
++    }
++
++	// our mandatory set of attributes for a submit
++	const char* required[] = {
++				ATTR_JOB_CMD,
++				ATTR_REQUIREMENTS,
++				ATTR_OWNER,
++				ATTR_JOB_IWD,
++				NULL
++				};
++
++		// 1. Create transaction
++	BeginTransaction();
++
++		// 2. Create cluster
++	if (-1 == (cluster = NewCluster())) {
++		AbortTransaction();
++		text = "Failed to create new cluster";
++		return false;
++	}
++
++		// 3. Create proc
++	if (-1 == (proc = NewProc(cluster))) {
++		AbortTransaction();
++		text = "Failed to create new proc";
++		return false;
++	}
++
++		// 4. Submit job ad
++
++		// Schema: (vanilla job)
++		// Schedd demands - Owner, JobUniverse
++		// To run - JobStatus, Requirements
++
++		// Schedd excepts if no Owner
++		// Schedd prunes on startup if no Owner or JobUniverse
++		// Schedd won't run job without JobStatus
++		// Job cannot match without Requirements
++		// Shadow rejects jobs without an Iwd
++		// Shadow: Job has no CondorVersion, assuming pre version 6.3.3
++		// Shadow: Unix Vanilla job is pre version 6.3.3, setting 'TransferFiles = "NEVER"'
++		// Starter won't run job without Cmd
++		// Starter needs a valid Owner (local account name) if not using nobody
++		// condor_q requires ClusterId (int), ProcId (int), QDate (int), RemoteUserCpu (float), JobStatus (int), JobPrio (int), ImageSize (int), Owner (str) and Cmd (str)
++
++		// Schema: (vm job)
++		// ShouldTransferFiles - unset by default, must be set
++
++	ClassAd ad;
++	int universe;
++
++    // ShouldTransferFiles - unset by default, must be set
++    // shadow will try to setup local transfer sandbox otherwise
++    // without good priv
++    ad.Assign(ATTR_SHOULD_TRANSFER_FILES, "NO");
++
++	if (!m_codec->mapToClassAd(jobAdMap, ad)) {
++		AbortTransaction();
++		text = "Failed to parse job ad";
++		return false;
++	}
++
++	std::string missing;
++	if (!checkRequiredAttrs(ad, required, missing)) {
++		AbortTransaction();
++		text = "Job ad is missing required attributes: " + missing;
++		return false;
++	}
++
++		// EARLY SET: These attribute are set early so the incoming ad
++		// has a change to override them.
++	::SetAttribute(cluster, proc, ATTR_JOB_STATUS, "1"); // 1 = idle
++
++		// Junk that condor_q wants, but really shouldn't be necessary
++	::SetAttribute(cluster, proc, ATTR_JOB_REMOTE_USER_CPU, "0.0"); // float
++	::SetAttribute(cluster, proc, ATTR_JOB_PRIO, "0");              // int
++	::SetAttribute(cluster, proc, ATTR_IMAGE_SIZE, "0");            // int
++
++	if (!ad.LookupInteger(ATTR_JOB_UNIVERSE, universe)) {
++		char* uni_str = param("DEFAULT_UNIVERSE");
++		if (!uni_str) {
++			universe = CONDOR_UNIVERSE_VANILLA;
++		}
++		else {
++			universe = CondorUniverseNumber(uni_str);
++		}
++		::SetAttributeInt(cluster, proc, ATTR_JOB_UNIVERSE, universe );
++	}
++	// more stuff - without these our idle stats are whack
++	if ( universe != CONDOR_UNIVERSE_MPI && universe != CONDOR_UNIVERSE_PVM ) {
++		::SetAttribute(cluster, proc, ATTR_MAX_HOSTS, "1");              // int
++		::SetAttribute(cluster, proc, ATTR_MIN_HOSTS, "1");            // int
++	}
++	::SetAttribute(cluster, proc, ATTR_CURRENT_HOSTS, "0"); // int
++
++	ExprTree *expr;
++	const char *name;
++	std::string value;
++	ad.ResetExpr();
++	while (ad.NextExpr(name,expr)) {
++
++			// All these extra lookups are horrible. They have to
++			// be there because the ClassAd may have multiple
++			// copies of the same attribute name! This means that
++			// the last attribute with a given name will set the
++			// value, but the last attribute tends to be the
++			// attribute with the oldest (wrong) value. How
++			// annoying is that!
++		if (!(expr = ad.Lookup(name))) {
++			dprintf(D_ALWAYS, "Failed to lookup %s\n", name);
++
++			AbortTransaction();
++			text = "Failed to parse job ad attribute";
++			return false;
++		}
++
++        value = ExprTreeToString(expr);
++        ::SetAttribute(cluster, proc, name, value.c_str());
++	}
++
++		// LATE SET: These attributes are set late, after the incoming
++		// ad, so they override whatever the incoming ad set.
++	char buf[22]; // 22 is max size for an id, 2^32 + . + 2^32 + \0
++	snprintf(buf, 22, "%d", cluster);
++	::SetAttribute(cluster, proc, ATTR_CLUSTER_ID, buf);
++	snprintf(buf, 22, "%d", proc);
++	::SetAttribute(cluster, proc, ATTR_PROC_ID, buf);
++	snprintf(buf, 22, "%d", time(NULL));
++	::SetAttribute(cluster, proc, ATTR_Q_DATE, buf);
++
++		// Could check for some invalid attributes, e.g
++		//  JobUniverse <= CONDOR_UNIVERSE_MIN or >= CONDOR_UNIVERSE_MAX
++	
++		// 5. Commit transaction
++	CommitTransaction();
++
++
++		// 6. Reschedule
++	scheduler.needReschedule();
++
++
++		// 7. Return identifier
++		// TODO: dag ids?
++	MyString tmp;
++	//tmp.sprintf("%s#%d.%d", Name, cluster, proc);
++	// we have other API compositions for job id and submission id
++	// so let's return raw cluster.proc
++	tmp.sprintf("%d.%d", cluster, proc);
++	id = tmp.Value();
++
++	return true;
++}
++
++bool
++SchedulerObject::setAttribute(std::string key,
++							  std::string name,
++							  std::string value,
++							  std::string &text)
++{
++	PROC_ID id = getProcByString(key.c_str());
++	if (id.cluster < 0 || id.proc < 0) {
++		dprintf(D_FULLDEBUG, "SetAttribute: Failed to parse id: %s\n", key.c_str());
++		text = "Invalid Id";
++		return false;
++	}
++
++	if (!isValidAttributeName(name,text)) {
++		return false;
++	}
++
++		// All values are strings in the eyes of
++		// ::SetAttribute. Their type is inferred when read from
++		// the ClassAd log. It is important that the incoming
++		// value is properly quoted to differentiate between EXPR
++		// and STRING.
++	if (::SetAttribute(id.cluster,
++					   id.proc,
++					   name.c_str(),
++					   value.c_str())) {
++		text = "Failed to set attribute " + name + " to " + value;
++		return false;
++	}
++
++	return true;
++}
++
++bool
++SchedulerObject::hold(std::string key, std::string &reason, std::string &text)
++{
++	PROC_ID id = getProcByString(key.c_str());
++	if (id.cluster < 0 || id.proc < 0) {
++		dprintf(D_FULLDEBUG, "Hold: Failed to parse id: %s\n", key.c_str());
++		text = "Invalid Id";
++		return false;
++	}	
++
++	if (!holdJob(id.cluster,
++				 id.proc,
++				 reason.c_str(),
++				 true, // Always perform this action within a transaction
++				 true, // Always notify the shadow of the hold
++				 false, // Do not email the user about this action
++				 false, // Do not email admin about this action
++				 false // This is not a system related (internal) hold
++				 )) {
++		text = "Failed to hold job";
++		return false;
++	}
++
++	return true;
++}
++
++bool
++SchedulerObject::release(std::string key, std::string &reason, std::string &text)
++{
++	PROC_ID id = getProcByString(key.c_str());
++	if (id.cluster < 0 || id.proc < 0) {
++		dprintf(D_FULLDEBUG, "Release: Failed to parse id: %s\n", key.c_str());
++		text = "Invalid Id";
++		return false;
++	}
++
++	if (!releaseJob(id.cluster,
++					id.proc,
++					reason.c_str(),
++					true, // Always perform this action within a transaction
++					false, // Do not email the user about this action
++					false // Do not email admin about this action
++					)) {
++		text = "Failed to release job";
++		return false;
++	}
++
++	return true;
++}
++
++bool
++SchedulerObject::remove(std::string key, std::string &reason, std::string &text)
++{
++	PROC_ID id = getProcByString(key.c_str());
++	if (id.cluster < 0 || id.proc < 0) {
++		dprintf(D_FULLDEBUG, "Remove: Failed to parse id: %s\n", key.c_str());
++		text = "Invalid Id";
++		return false;
++	}	
++
++	if (!abortJob(id.cluster,
++				  id.proc,
++				  reason.c_str(),
++				  true // Always perform within a transaction
++				  )) {
++		text = "Failed to remove job";
++		return false;
++	}
++
++	return true;
++}
+diff --git a/src/condor_contrib/aviary/src/SchedulerObject.h b/src/condor_contrib/aviary/src/SchedulerObject.h
+new file mode 100644
+index 0000000..670218e
+--- /dev/null
++++ b/src/condor_contrib/aviary/src/SchedulerObject.h
+@@ -0,0 +1,100 @@
++/*
++ * Copyright 2009-2011 Red Hat, Inc.
++ *
++ * 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.
++ */
++
++#ifndef _SCHEDULEROBJECT_H
++#define _SCHEDULEROBJECT_H
++
++// condor includes
++#include "condor_common.h"
++#include "condor_classad.h"
++
++// local includes
++#include "Codec.h"
++#include "AviaryUtils.h"
++
++using namespace std;
++using namespace aviary::util;
++using namespace aviary::codec;
++
++namespace aviary {
++namespace job {
++
++struct SchedulerStats {
++    // Properties
++    string      CondorPlatform;
++    string      CondorVersion;
++    int64_t     DaemonStartTime;
++    string      Pool;
++    string      System;
++    int64_t     JobQueueBirthdate;
++    uint32_t    MaxJobsRunning;
++    string      Machine;
++    string      MyAddress;
++    string      Name;
++
++    // Statistics
++    uint32_t    MonitorSelfAge;
++    double      MonitorSelfCPUUsage;
++    double      MonitorSelfImageSize;
++    uint32_t    MonitorSelfRegisteredSocketCount;
++    uint32_t    MonitorSelfResidentSetSize;
++    int64_t     MonitorSelfTime;
++    uint32_t    NumUsers;
++    uint32_t    TotalHeldJobs;
++    uint32_t    TotalIdleJobs;
++    uint32_t    TotalJobAds;
++    uint32_t    TotalRemovedJobs;
++    uint32_t    TotalRunningJobs;
++};
++
++class SchedulerObject {
++public:
++
++
++	void update(const ClassAd &ad);
++	bool submit(AttributeMapType& jobAdMap, string& id, string& text);
++	bool setAttribute(string id,
++                      string name,
++                      string value,
++                      string &text);
++	bool hold(string id, string &reason, string &text);
++	bool release(string id, string &reason, string &text);
++	bool remove(string id, string &reason, string &text);
++
++    static SchedulerObject* getInstance();
++
++	const char* getPool() {return m_pool.c_str(); }
++	const char* getName() {return m_name.c_str(); }
++
++	~SchedulerObject();
++
++private:
++    SchedulerObject();
++	SchedulerObject(SchedulerObject const&);
++	SchedulerObject& operator=(SchedulerObject const&);
++
++    string m_pool;
++    string m_name;
++	Codec* m_codec;
++    SchedulerStats m_stats;
++    static SchedulerObject* m_instance;
++
++};
++
++
++}} /* aviary::job */
++
++#endif /* _SCHEDULEROBJECT_H */
+diff --git a/src/condor_contrib/aviary/src/SubmissionObject.cpp b/src/condor_contrib/aviary/src/SubmissionObject.cpp
+new file mode 100644
+index 0000000..9ca84b3
+--- /dev/null
++++ b/src/condor_contrib/aviary/src/SubmissionObject.cpp
+@@ -0,0 +1,221 @@
++/***************************************************************
++ *
++ * Copyright (C) 2009-2011 Red Hat, Inc.
++ *
++ * 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.
++ *
++ ***************************************************************/
++
++// condor includes
++#include "condor_common.h"
++#include "condor_config.h"
++#include "condor_debug.h"
++#include "condor_attributes.h"
++#include "proc.h"
++
++// local includes
++#include "SubmissionObject.h"
++#include "JobServerObject.h"
++#include "AviaryUtils.h"
++
++using namespace std;
++using namespace aviary::query;
++using namespace aviary::codec;
++using namespace aviary::util;
++
++SubmissionObject::SubmissionObject (
++                                     const char *_name,
++                                     const char *_owner ) :
++        ownerSet ( false )
++{
++	m_name = _name;
++    if ( _owner )
++    {
++        setOwner ( _owner );
++    }
++    else
++    {
++        setOwner ( "Unknown" );
++        ownerSet = false;
++    }
++
++    m_codec = new BaseCodec;
++
++    dprintf ( D_FULLDEBUG, "Created new SubmissionObject '%s' for '%s'\n", _name, _owner);
++}
++
++SubmissionObject::~SubmissionObject()
++{
++	dprintf ( D_FULLDEBUG, "SubmissionObject::~SubmissionObject for '%s'\n", m_name.c_str());
++	delete m_codec;
++}
++
++void
++SubmissionObject::increment ( const Job *job )
++{
++    int status = job->getStatus();
++
++    dprintf ( D_FULLDEBUG, "SubmissionObject::increment '%s' on '%s'\n", getJobStatusString(status), job->getKey());
++
++    switch ( status )
++    {
++        case IDLE:
++            m_idle.insert ( job );
++            break;
++        case RUNNING:
++            m_running.insert ( job );
++            break;
++        case REMOVED:
++            m_removed.insert ( job );
++            break;
++        case COMPLETED:
++            m_completed.insert ( job );
++            break;
++        case HELD:
++            m_held.insert ( job );
++            break;
++        default:
++            dprintf ( D_ALWAYS, "error: Unknown %s of %d on %s\n",
++                      ATTR_JOB_STATUS, status, job->getKey() );
++            break;
++    }
++}
++
++void
++SubmissionObject::decrement ( const Job *job )
++{
++    int status = job->getStatus();
++
++    dprintf ( D_FULLDEBUG, "SubmissionObject::decrement '%s' on '%s'\n", getJobStatusString(status), job->getKey());
++
++    switch ( status )
++    {
++        case IDLE:
++            m_idle.erase ( job );
++            break;
++        case RUNNING:
++            m_running.erase ( job );
++            break;
++        case REMOVED:
++            m_removed.erase ( job );
++            break;
++        case COMPLETED:
++            m_completed.erase ( job );
++            break;
++        case HELD:
++            m_held.erase ( job );
++            break;
++        default:
++            dprintf ( D_ALWAYS, "error: Unknown %s of %d on %s\n",
++                      ATTR_JOB_STATUS, status, job->getKey() );
++            break;
++    }
++}
++
++
++const SubmissionObject::JobSet &
++SubmissionObject::getIdle()
++{
++    return m_idle;
++}
++
++const SubmissionObject::JobSet &
++SubmissionObject::getRunning()
++{
++    return m_running;
++}
++
++const SubmissionObject::JobSet &
++SubmissionObject::getRemoved()
++{
++    return m_removed;
++}
++
++const SubmissionObject::JobSet &
++SubmissionObject::getCompleted()
++{
++    return m_completed;
++}
++
++const SubmissionObject::JobSet &
++SubmissionObject::getHeld()
++{
++    return m_held;
++}
++
++void
++SubmissionObject::setOwner ( const char *_owner )
++{
++    if ( !ownerSet )
++    {
++        m_owner = _owner;
++        ownerSet = true;
++    }
++}
++
++JobSummaryPair makeJobPair(const Job* job) {
++	JobServerObject* jso = JobServerObject::getInstance();
++	const char* job_cp = job->getKey();
++	JobSummaryFields* jsf = new JobSummaryFields;
++	AviaryStatus status;
++	// TODO: should check this return val i suppose
++	jso->getSummary(job_cp, *jsf, status);
++	return make_pair(job_cp,jsf);
++}
++
++void
++SubmissionObject::getJobSummaries ( JobSummaryPairCollection &jobs)
++{
++
++    // id, timestamp (which?), command, args, ins, outs, state, message
++    // id, time queued, time entered current state, state, command, args, hold reason, release reason
++
++    // find all the jobs in their various states...
++
++    //1) Idle
++    for ( SubmissionObject::JobSet::const_iterator i = getIdle().begin();
++            getIdle().end() != i; i++ )
++    {
++		jobs.push_back(makeJobPair(*i));
++	}
++
++    //2) Running
++    for ( SubmissionObject::JobSet::const_iterator i = getRunning().begin();
++            getRunning().end() != i;
++            i++ )
++    {
++		jobs.push_back(makeJobPair(*i));
++    }
++
++    //3) Removed
++    for ( SubmissionObject::JobSet::const_iterator i = getRemoved().begin();
++            getRemoved().end() != i; i++ )
++    {
++		jobs.push_back(makeJobPair(*i));
++    }
++
++    //4) Completed
++    for ( SubmissionObject::JobSet::const_iterator i = getCompleted().begin();
++            getCompleted().end() != i; i++ )
++    {
++		jobs.push_back(makeJobPair(*i));
++    }
++
++    //5) Held
++    for ( SubmissionObject::JobSet::const_iterator i = getHeld().begin();
++            getHeld().end() != i; i++ )
++    {
++		jobs.push_back(makeJobPair(*i));
++    }
++
++}
+diff --git a/src/condor_contrib/aviary/src/SubmissionObject.h b/src/condor_contrib/aviary/src/SubmissionObject.h
+new file mode 100644
+index 0000000..2b0f7a6
+--- /dev/null
++++ b/src/condor_contrib/aviary/src/SubmissionObject.h
+@@ -0,0 +1,88 @@
++/***************************************************************
++ *
++ * Copyright (C) 2009-2011 Red Hat, Inc.
++ * 
++ * 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.
++ *
++ ***************************************************************/
++
++#ifndef _SUBMISSIONOBJECT_H
++#define _SUBMISSIONOBJECT_H
++
++// c++ includes
++#include <string>
++#include <map>
++#include <set>
++
++// coondor includes
++#include "condor_common.h"
++
++// local includes
++#include "Job.h"
++#include "JobServerObject.h"
++
++using std::string;
++using std::map;
++using std::set;
++
++namespace aviary {
++namespace query {
++		
++struct cmpjob {
++	bool operator()(const Job *a, const Job *b) const {
++		return strcmp(a->getKey(), b->getKey()) < 0;
++	}
++};
++
++class SubmissionObject
++{
++public:
++    friend class Job;
++	typedef set<const Job *, cmpjob> JobSet;
++
++	SubmissionObject( const char *name, const char *owner);
++	~SubmissionObject();
++
++	const JobSet & getIdle();
++	const JobSet & getRunning();
++	const JobSet & getRemoved();
++	const JobSet & getCompleted();
++	const JobSet & getHeld();
++
++	void setOwner(const char *owner);
++	const char* getOwner() { return m_owner.c_str(); }
++	const char* getName() { return m_name.c_str(); }
++	void getJobSummaries(JobSummaryPairCollection& _jobs);
++
++protected:
++	void increment(const Job *job);
++	void decrement(const Job *job);
++
++private:
++	JobSet m_idle;
++	JobSet m_running;
++	JobSet m_removed;
++	JobSet m_completed;
++	JobSet m_held;
++
++	bool ownerSet;
++
++	string m_name;
++	string m_owner;
++	Codec* m_codec;
++
++};
++
++}}
++
++#endif /* _SUBMISSIONOBJECT_H */
+diff --git a/src/condor_contrib/aviary/src/aviary_query_server.cpp b/src/condor_contrib/aviary/src/aviary_query_server.cpp
+new file mode 100644
+index 0000000..1231a27
+--- /dev/null
++++ b/src/condor_contrib/aviary/src/aviary_query_server.cpp
+@@ -0,0 +1,279 @@
++/***************************************************************
++ *
++ * Copyright (C) 2009-2011 Red Hat, Inc.
++ * 
++ * 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.
++ *
++ ***************************************************************/
++
++// condor includes
++#include "condor_common.h"
++#include "condor_daemon_core.h"
++#include "condor_debug.h"
++#include "condor_attributes.h"
++#include "get_daemon_name.h"
++#include "subsystem_info.h"
++#include "condor_config.h"
++#include "stat_info.h"
++#include "JobLogMirror.h"
++
++// local includes
++#include "Axis2SoapProvider.h"
++#include "JobServerJobLogConsumer.h"
++#include "JobServerObject.h"
++#include "HistoryProcessingUtils.h"
++#include "Globals.h"
++
++// about self
++DECL_SUBSYSTEM("QUERY_SERVER", SUBSYSTEM_TYPE_DAEMON );	// used by Daemon Core
++
++using namespace std;
++using namespace aviary::query;
++using namespace aviary::soap;
++using namespace aviary::history;
++
++ClassAd	*ad = NULL;
++Axis2SoapProvider* provider = NULL;
++JobLogMirror *mirror = NULL;
++JobServerJobLogConsumer *consumer = NULL;
++JobServerObject *job_server = NULL;
++
++extern MyString m_path;
++
++void init_classad();
++void Dump();
++int HandleTransportSocket(Service *, Stream *);
++int HandleResetSignal(Service *, int);
++void ProcessHistoryTimer(Service*);
++
++//-------------------------------------------------------------
++
++int main_init(int /* argc */, char * /* argv */ [])
++{
++	dprintf(D_ALWAYS, "main_init() called\n");
++
++	// setup the job log consumer
++	consumer = new JobServerJobLogConsumer();
++	mirror = new JobLogMirror(consumer);
++	mirror->init();
++
++    // config then env for our all-important axis2 repo dir
++    const char* log_file = "./aviary_query.axis2.log";
++	string repo_path;
++	char *tmp = NULL;
++	if (tmp = param("WSFCPP_HOME")) {
++		repo_path = tmp;
++		free(tmp);
++	}
++	else if (tmp = getenv("WSFCPP_HOME")) {
++		repo_path = tmp;
++	}
++	else {
++		EXCEPT("No WSFCPP_HOME in config or env");
++	}
++
++	int port = param_integer("HTTP_PORT",9091);
++	int level = param_integer("AXIS2_DEBUG_LEVEL",AXIS2_LOG_LEVEL_CRITICAL);
++
++    // init transport here
++    provider = new Axis2SoapProvider(level,log_file,repo_path.c_str());
++
++    std::string axis_error;
++    if (!provider->init(port,AXIS2_HTTP_DEFAULT_SO_TIMEOUT,axis_error)) {
++		dprintf(D_ALWAYS, "%s\n",axis_error.c_str());
++        EXCEPT("Failed to initialize Axis2SoapProvider");
++    }
++
++	init_classad();
++
++	ReliSock *sock = new ReliSock;
++	if (!sock) {
++		EXCEPT("Failed to allocate transport socket");
++	}
++
++	if (!sock->assign(provider->getHttpListenerSocket())) {
++		EXCEPT("Failed to bind transport socket");
++	}
++	int index;
++	if (-1 == (index =
++			   daemonCore->Register_Socket((Stream *) sock,
++                                           "Transport method socket",
++										   (SocketHandler)
++										   HandleTransportSocket,
++                                           "Handler for transport invocations"))) {
++		EXCEPT("Failed to register transport socket");
++	}
++
++	job_server = JobServerObject::getInstance();
++
++	dprintf(D_ALWAYS,"Axis2 listener on http port: %d\n",port);
++
++    // before doing any job history processing, set the location of the files
++    // TODO: need to test mal-HISTORY values: HISTORY=/tmp/somewhere
++    const char* tmp2 = param ( "HISTORY" );
++    StatInfo si( tmp2 );
++    tmp2 = si.DirPath ();
++    if ( !tmp2 )
++    {
++        dprintf ( D_ALWAYS, "warning: No HISTORY defined - Aviary Query Server will not process history jobs\n" );
++    }
++    else
++    {
++        m_path = tmp2;
++        dprintf ( D_FULLDEBUG, "HISTORY path is %s\n",tmp2 );
++        // register a timer for processing of historical job files
++        if (-1 == (index =
++            daemonCore->Register_Timer(
++                0,
++                param_integer("HISTORY_INTERVAL",120),
++                (TimerHandler)ProcessHistoryTimer,
++                "Timer for processing job history files"
++                ))) {
++        EXCEPT("Failed to register history timer");
++        }
++    }
++
++    // useful for testing job coalescing
++    // and potentially just useful
++	if (-1 == (index =
++		daemonCore->Register_Signal(SIGUSR1,
++				    "Forced Reset Signal",
++				    (SignalHandler)
++				    HandleResetSignal,
++				    "Handler for Reset signals"))) {
++		EXCEPT("Failed to register Reset signal");
++	}
++
++	return TRUE;
++}
++
++void
++init_classad()
++{
++	if ( ad ) {
++		delete ad;
++	}
++	ad = new ClassAd();
++
++	ad->SetMyTypeName("QueryServer");
++	ad->SetTargetTypeName("Daemon");
++
++	char* default_name = default_daemon_name();
++		if( ! default_name ) {
++			EXCEPT( "default_daemon_name() returned NULL" );
++		}
++	ad->Assign(ATTR_NAME, default_name);
++	delete [] default_name;
++
++	ad->Assign(ATTR_MY_ADDRESS, my_ip_string());
++
++	// Initialize all the DaemonCore-provided attributes
++	daemonCore->publish( ad );
++
++}
++
++//-------------------------------------------------------------
++
++int 
++main_config()
++{
++	dprintf(D_ALWAYS, "main_config() called\n");
++
++	return TRUE;
++}
++
++//-------------------------------------------------------------
++
++void Stop()
++{
++	if (param_boolean("DUMP_STATE", false)) {
++		Dump();
++	}
++
++	delete job_server;
++
++	DC_Exit(0);
++}
++
++//-------------------------------------------------------------
++
++int main_shutdown_fast()
++{
++	dprintf(D_ALWAYS, "main_shutdown_fast() called\n");
++
++	Stop();
++
++	DC_Exit(0);
++	return TRUE;	// to satisfy c++
++}
++
++//-------------------------------------------------------------
++
++int main_shutdown_graceful()
++{
++	dprintf(D_ALWAYS, "main_shutdown_graceful() called\n");
++
++	Stop();
++
++	DC_Exit(0);
++	return TRUE;	// to satisfy c++
++}
++
++//-------------------------------------------------------------
++
++void
++main_pre_dc_init( int /* argc */, char* /* argv */ [] )
++{
++		// dprintf isn't safe yet...
++}
++
++
++void
++main_pre_command_sock_init( )
++{
++}
++
++
++int
++HandleTransportSocket(Service *, Stream *)
++{
++	// respond to a transport callback here
++	std::string provider_error;
++    if (!provider->processHttpRequest(provider_error)) {
++        dprintf (D_ALWAYS,"Error processing request: %s\n",provider_error.c_str());
++    }
++
++	return KEEP_STREAM;
++}
++
++int
++HandleResetSignal(Service *, int)
++{
++	consumer->Reset();
++
++    return TRUE;
++}
++
++void ProcessHistoryTimer(Service*) {
++	dprintf(D_FULLDEBUG, "ProcessHistoryTimer() called\n");
++    processHistoryDirectory();
++    processOrphanedIndices();
++    processCurrentHistory();
++}
++
++
++void
++Dump()
++{
++	dprintf(D_ALWAYS|D_NOHEADER, "DUMP called\n");
++}
+diff --git a/src/condor_contrib/aviary/src/cmpstr.h b/src/condor_contrib/aviary/src/cmpstr.h
+new file mode 100644
+index 0000000..a4b2fbe
+--- /dev/null
++++ b/src/condor_contrib/aviary/src/cmpstr.h
+@@ -0,0 +1,28 @@
++/***************************************************************
++ *
++ * Copyright (C) 2009-2011 Red Hat, Inc.
++ * 
++ * 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.
++ *
++ ***************************************************************/
++
++#ifndef _CMPSTR_H
++#define _CMPSTR_H
++
++struct cmpstr {
++   bool operator()(const char *a, const char *b) const {
++      return strcmp(a, b) < 0;
++   }
++};
++
++#endif /* _CMPSTR_H */
+diff --git a/src/condor_contrib/aviary/test/jobcontrol.py b/src/condor_contrib/aviary/test/jobcontrol.py
+new file mode 100755
+index 0000000..a7c051f
+--- /dev/null
++++ b/src/condor_contrib/aviary/test/jobcontrol.py
+@@ -0,0 +1,57 @@
++#!/usr/bin/env python
++# -*- coding: utf-8 -*-
++#
++# Copyright 2009-2011 Red Hat, Inc.
++#
++# 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.
++#
++
++# uses Suds - https://fedorahosted.org/suds/
++from suds import *
++from suds.client import Client
++from sys import exit, argv, stdin
++import time
++
++# change these for other default locations and ports
++job_wsdl = 'file:/var/lib/condor/aviary/services/job/aviary-job.wsdl'
++
++cmds = ['holdJob', 'releaseJob', 'removeJob']
++
++cmdarg = len(argv) > 1 and argv[1]
++cproc =  len(argv) > 2 and argv[2]
++job_url = len(argv) > 3 and argv[3] or "http://localhost:9090/services/job/"
++
++if cmdarg not in cmds:
++	print "error unknown command: ", cmdarg
++	print "available commands are: ",cmds
++	exit(1)
++
++client = Client(job_wsdl);
++job_url += cmdarg
++client.set_options(location=job_url)
++
++# set up our JobID
++jobId = client.factory.create('ns0:JobID')
++jobId.job = cproc
++
++try:
++	func = getattr(client.service, cmdarg, None)
++	if callable(func):
++	    result = func(jobId,"test")
++except Exception, e:
++	print "unable to access scheduler at: ", job_url
++	print e
++	exit(1)
++
++if result.code != "OK":
++	print result.code,"; ", result.text
+diff --git a/src/condor_contrib/aviary/test/jobquery.py b/src/condor_contrib/aviary/test/jobquery.py
+new file mode 100755
+index 0000000..f311c38
+--- /dev/null
++++ b/src/condor_contrib/aviary/test/jobquery.py
+@@ -0,0 +1,68 @@
++#!/usr/bin/env python
++# -*- coding: utf-8 -*-
++#
++# Copyright 2009-2011 Red Hat, Inc.
++#
++# 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.
++#
++
++# uses Suds - https://fedorahosted.org/suds/
++import logging
++from suds import *
++from suds.client import Client
++from sys import exit, argv, stdin
++import time
++
++# enable these to see the SOAP messages
++#logging.basicConfig(level=logging.INFO)
++#logging.getLogger('suds.client').setLevel(logging.DEBUG)
++
++# change these for other default locations and ports
++job_wsdl = 'file:/var/lib/condor/aviary/services/query/aviary-query.wsdl'
++
++cmds = ['getJobStatus', 'getJobSummary', 'getJobDetails']
++
++cmdarg = len(argv) > 1 and argv[1]
++cproc =  len(argv) > 2 and argv[2]
++job_url = len(argv) > 3 and argv[3] or "http://localhost:9091/services/query/"
++
++if cmdarg not in cmds:
++	print "error unknown command: ", cmdarg
++	print "available commands are: ",cmds
++	exit(1)
++
++client = Client(job_wsdl);
++job_url += cmdarg
++client.set_options(location=job_url)
++
++# enable to see service schema
++#print client
++
++# set up our JobID
++if cproc:
++	jobId = client.factory.create("ns0:JobID")
++	jobId.job = cproc
++else:
++	# returns all jobs
++	jobId = None
++
++try:
++	func = getattr(client.service, cmdarg, None)
++	if callable(func):
++	    result = func(jobId)
++except Exception, e:
++	print "invocation failed: ", job_url
++	print e
++	exit(1)
++
++print result
+diff --git a/src/condor_contrib/aviary/test/setattr.py b/src/condor_contrib/aviary/test/setattr.py
+new file mode 100755
+index 0000000..175210c
+--- /dev/null
++++ b/src/condor_contrib/aviary/test/setattr.py
+@@ -0,0 +1,54 @@
++#!/usr/bin/env python
++# -*- coding: utf-8 -*-
++#
++# Copyright 2009-2011 Red Hat, Inc.
++#
++# 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.
++#
++
++# uses Suds - https://fedorahosted.org/suds/
++from suds import *
++from suds.client import Client
++from sys import exit, argv, stdin
++import time
++
++# change these for other default locations and ports
++job_wsdl = 'file:/var/lib/condor/aviary/services/job/aviary-job.wsdl'
++
++cproc =  len(argv) > 1 and argv[1]
++attr_name = len(argv) > 2 and argv[2]
++attr_value = len(argv) > 3 and argv[3]
++job_url = len(argv) > 4 and argv[4] or "http://localhost:9090/services/job/setJobAttribute"
++
++client = Client(job_wsdl);
++client.set_options(location=job_url)
++
++# set up our JobID
++jobId = client.factory.create('ns0:JobID')
++jobId.job = cproc
++
++# set up the Attribute
++aviary_attr = client.factory.create('ns0:Attribute')
++aviary_attr.name = attr_name
++aviary_attr.type = "STRING";
++aviary_attr.value = '"'+attr_value+'"'
++
++try:
++	result = client.service.setJobAttribute(jobId, aviary_attr)
++except Exception, e:
++	print "unable to access scheduler at: ", job_url
++	print e
++	exit(1)
++
++if result.code != "OK":
++	print result.code,"; ", result.text
+diff --git a/src/condor_contrib/aviary/test/submissions.py b/src/condor_contrib/aviary/test/submissions.py
+new file mode 100755
+index 0000000..1f03d63
+--- /dev/null
++++ b/src/condor_contrib/aviary/test/submissions.py
+@@ -0,0 +1,55 @@
++#!/usr/bin/env python
++# -*- coding: utf-8 -*-
++#
++# Copyright 2009-2011 Red Hat, Inc.
++#
++# 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.
++#
++
++# uses Suds - https://fedorahosted.org/suds/
++import logging
++from suds import *
++from suds.client import Client
++from sys import exit, argv
++
++# enable these to see the SOAP messages
++#logging.basicConfig(level=logging.INFO)
++#logging.getLogger('suds.client').setLevel(logging.DEBUG)
++
++query_wsdl = 'file:/var/lib/condor/aviary/services/query/aviary-query.wsdl'
++
++sub_name = len(argv) > 1 and argv[1]
++query_url = len(argv) > 2 and argv[2] or 'http://localhost:9091/services/query/getSubmissionSummary'
++
++client = Client(query_wsdl);
++client.set_options(location=query_url)
++
++# enable to see service schema
++#print client
++
++# set up our ID
++if sub_name:
++	subId = client.factory.create("ns0:SubmissionID")
++	subId.name = sub_name
++else:
++	# returns all jobs
++	subId = None
++
++try:
++	submissions = client.service.getSubmissionSummary(subId)
++except Exception, e:
++	print "invocation failed: ", query_url
++	print e
++	exit(1)
++
++print submissions
+diff --git a/src/condor_contrib/aviary/test/submit.py b/src/condor_contrib/aviary/test/submit.py
+new file mode 100755
+index 0000000..87b2f44
+--- /dev/null
++++ b/src/condor_contrib/aviary/test/submit.py
+@@ -0,0 +1,89 @@
++#!/usr/bin/env python
++# -*- coding: utf-8 -*-
++#
++# Copyright 2009-2011 Red Hat, Inc.
++#
++# 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.
++#
++
++# uses Suds - https://fedorahosted.org/suds/
++from suds import *
++from suds.client import Client
++from sys import exit, argv
++import time, pwd
++
++uid = pwd.getpwuid(os.getuid())[0]
++if not uid:
++    uid = "condor"
++
++quiet = False
++
++# change these for other default locations and ports
++job_wsdl = 'file:/var/lib/condor/aviary/services/job/aviary-job.wsdl'
++job_url = 'http://localhost:9090/services/job/submitJob'
++
++for arg in argv[1:]:
++	if arg == '-q':
++		quiet = True
++	if "http://" in arg:
++		url = arg
++
++client = Client(job_wsdl);
++client.set_options(location=job_url)
++
++if not quiet:
++	print client
++	
++# add specific requirements here
++req1 = client.factory.create("ns0:ResourceConstraint")
++req1.type = 'OS'
++req1.value = 'LINUX'
++reqs = [ req1 ]
++
++# add extra Condor-specific or custom job attributes here
++extra1 = client.factory.create("ns0:Attribute")
++extra1.name = 'RECIPE'
++extra1.type = 'STRING'
++extra1.value = 'SECRET_SAUCE'
++extras = [ extra1 ]
++
++try:
++	result = client.service.submitJob( \
++	# the executable command
++		'/bin/sleep', \
++	# some arguments for the command
++		'120', \
++	# the submitter name
++		uid, \
++	# initial working directory wwhere job will execute
++		'/tmp', \
++	# an arbitrary string identifying the target submission group
++		'python_test_submit', \
++	# special resource requirements
++		reqs,	\
++	# additional attributes
++		extras
++	)
++except Exception, e:
++	print "invocation failed at: ", job_url
++	print e
++	exit(1)	
++
++if result.status.code != "OK":
++	print result.status.code,"; ", result.status.text
++	exit(1)
++
++if not quiet:
++	print result
++else:
++	print result.id.job;
+diff --git a/src/condor_contrib/mgmt/qmf/daemons/Globals.cpp b/src/condor_contrib/mgmt/qmf/daemons/Globals.cpp
+index 0a850ff..37a5873 100644
+--- a/src/condor_contrib/mgmt/qmf/daemons/Globals.cpp
++++ b/src/condor_contrib/mgmt/qmf/daemons/Globals.cpp
+@@ -20,4 +20,5 @@
+ 
+ JobCollectionType g_jobs;
+ SubmissionCollectionType g_submissions;
+-OwnerlessClusterType g_ownerless;
+\ No newline at end of file
++OwnerlessClusterType g_ownerless_clusters;
++OwnerlessSubmissionType g_ownerless_submissions;
+diff --git a/src/condor_contrib/mgmt/qmf/daemons/Globals.h b/src/condor_contrib/mgmt/qmf/daemons/Globals.h
+index 989d7ac..8850a0c 100644
+--- a/src/condor_contrib/mgmt/qmf/daemons/Globals.h
++++ b/src/condor_contrib/mgmt/qmf/daemons/Globals.h
+@@ -33,10 +33,12 @@ using namespace std;
+ 
+ typedef map<const char *, Job *, cmpstr> JobCollectionType;
+ typedef map<const char *, SubmissionObject *, cmpstr> SubmissionCollectionType;
+-typedef map<int, const char *> OwnerlessClusterType;
++typedef map<int, string> OwnerlessClusterType;
++typedef map<int, SubmissionObject*> OwnerlessSubmissionType;
+ 
+ extern JobCollectionType g_jobs;
+ extern SubmissionCollectionType g_submissions;
+-extern OwnerlessClusterType g_ownerless;
++extern OwnerlessClusterType g_ownerless_clusters;
++extern OwnerlessSubmissionType g_ownerless_submissions;
+ 
+ #endif /* _GLOBALS_H */
+diff --git a/src/condor_contrib/mgmt/qmf/daemons/Job.cpp b/src/condor_contrib/mgmt/qmf/daemons/Job.cpp
+index 22ea98a..301949e 100644
+--- a/src/condor_contrib/mgmt/qmf/daemons/Job.cpp
++++ b/src/condor_contrib/mgmt/qmf/daemons/Job.cpp
+@@ -247,7 +247,8 @@ LiveJobImpl::Set ( const char *_name, const char *_value )
+ 	// if we are in here, we don't have m_submission
+ 	PROC_ID id = getProcByString(m_job->GetKey());
+ 	std::string val = TrimQuotes( _value );
+-	g_ownerless[id.cluster] = strdup( val.c_str() );
++	g_ownerless_clusters[id.cluster] = val;
++	m_job->UpdateSubmission(id.cluster,val.c_str());
+     }
+ 
+     // parse the type
+@@ -372,7 +373,7 @@ HistoryJobImpl::HistoryJobImpl ( const HistoryEntry& _he):
+ 	m_he(_he)
+ {
+     m_job = NULL;
+-    g_ownerless[_he.cluster] = strdup(_he.owner.c_str());
++    g_ownerless_clusters[_he.cluster] = _he.owner;
+     dprintf ( D_FULLDEBUG, "HistoryJobImpl created for '%d.%d'\n", _he.cluster, _he.proc );
+ }
+ 
+@@ -585,18 +586,26 @@ void Job::DecrementSubmission() {
+ }
+ 
+ void
++Job::UpdateSubmission ( int cluster, const char* owner )
++{
++	OwnerlessSubmissionType::const_iterator it = g_ownerless_submissions.find ( cluster );
++	if ( g_ownerless_submissions.end() != it ) {
++		SubmissionObject* submission = (*it).second;
++		submission->SetOwner(owner);
++		g_ownerless_submissions.erase(cluster);
++	}
++}
++
++void
+ Job::SetSubmission ( const char* _subName, int cluster )
+ {
+ 	const char* owner = NULL;
+ 
+ 	// need to see if someone has left us an owner
+-	OwnerlessClusterType::const_iterator it = g_ownerless.find ( cluster );
+-	if ( g_ownerless.end() == it )
++	OwnerlessClusterType::const_iterator it = g_ownerless_clusters.find ( cluster );
++	if ( g_ownerless_clusters.end() != it )
+ 	{
+-		dprintf ( D_FULLDEBUG, "warning: unable to resolve owner for Job key '%s' and cluster '%d'\n", GetKey(), cluster );
+-	}
+-	else {
+-		owner = ( *it ).second ;
++		owner = ( *it ).second.c_str() ;
+ 	}
+ 
+ 	SubmissionCollectionType::const_iterator element = g_submissions.find ( _subName );
+@@ -617,7 +626,11 @@ Job::SetSubmission ( const char* _subName, int cluster )
+ 	if (owner) {
+ 		// ensure that the submission has an owner
+ 		m_submission->SetOwner ( owner );
+-		g_ownerless.erase ( cluster );
++		g_ownerless_clusters.erase ( cluster );
++	}
++	else {
++		// add it to our list to be updated for owner
++		g_ownerless_submissions[cluster] = m_submission;
+ 	}
+ 
+ }
+diff --git a/src/condor_contrib/mgmt/qmf/daemons/Job.h b/src/condor_contrib/mgmt/qmf/daemons/Job.h
+index 2a640f5..147b10b 100644
+--- a/src/condor_contrib/mgmt/qmf/daemons/Job.h
++++ b/src/condor_contrib/mgmt/qmf/daemons/Job.h
+@@ -149,6 +149,7 @@ class Job
+         void Remove ( const char* );
+ 
+         void SetSubmission ( const char*, int );
++        void UpdateSubmission ( int, const char* );
+         void IncrementSubmission();
+         void DecrementSubmission();
+ 
+diff --git a/src/condor_contrib/mgmt/qmf/daemons/JobServerJobLogConsumer.cpp b/src/condor_contrib/mgmt/qmf/daemons/JobServerJobLogConsumer.cpp
+index 62f22c2..7eb7342 100644
+--- a/src/condor_contrib/mgmt/qmf/daemons/JobServerJobLogConsumer.cpp
++++ b/src/condor_contrib/mgmt/qmf/daemons/JobServerJobLogConsumer.cpp
+@@ -118,9 +118,7 @@ JobServerJobLogConsumer::NewClassAd(const char *_key,
+ 		JobCollectionType::const_iterator element = g_jobs.find(cluster_dup);
+         ClusterJobImpl* cluster_impl = NULL;
+ 
+-		// TODO this code assumes that we will always get the parent 
+-		// classad before its child from the job log...this is not strictly
+-		// guaranteed (e.g., compressed log?)
++		// either find an existing cluster parent or create a new one
+ 		if (g_jobs.end() == element) {
+ 			// didn't find an existing job so create a new one
+ 			Job* new_cluster_job = new Job(cluster_dup);
+@@ -136,13 +134,6 @@ JobServerJobLogConsumer::NewClassAd(const char *_key,
+         new_proc_job->SetImpl(new LiveJobImpl(key_dup, cluster_impl));
+         g_jobs[key_dup] = new_proc_job;
+ 
+-//		if (cluster_job) {
+-//			ClassAd ad;
+-//			cluster_job->GetFullAd(ad);
+-//			dprintf(D_FULLDEBUG, "JobServerJobLogConsumer::NewClassAd found a parent ClassAd from cluster...\n");
+-//			ad.dPrint(D_FULLDEBUG|D_NOHEADER);
+-//		}
+-
+ 	}
+ 
+ 	return true;
+diff --git a/src/condor_contrib/mgmt/qmf/plugins/NegotiatorObject.cpp b/src/condor_contrib/mgmt/qmf/plugins/NegotiatorObject.cpp
+index 78baa6c..48290df 100644
+--- a/src/condor_contrib/mgmt/qmf/plugins/NegotiatorObject.cpp
++++ b/src/condor_contrib/mgmt/qmf/plugins/NegotiatorObject.cpp
+@@ -188,7 +188,7 @@ NegotiatorObject::SetLimit(std::string &name, double max, std::string &text)
+ 		return STATUS_USER + 1;
+ 	}
+ 
+-	if (!IsValidGroupUserName(name,text)) {
++	if (!IsValidParamName(name,text)) {
+ 		return STATUS_USER + 2;
+ 	}
+ 
+@@ -233,7 +233,7 @@ NegotiatorObject::SetRawConfig(std::string &name, std::string &value, std::strin
+ 		return STATUS_USER + 1;
+ 	}
+ 
+-	if (!IsValidAttributeName(name,text)) {
++	if (!IsValidParamName(name,text)) {
+ 		return STATUS_USER + 2;
+ 	}
+ 
+diff --git a/src/condor_contrib/mgmt/qmf/plugins/Utils.cpp b/src/condor_contrib/mgmt/qmf/plugins/Utils.cpp
+index 8262f95..90e2c32 100644
+--- a/src/condor_contrib/mgmt/qmf/plugins/Utils.cpp
++++ b/src/condor_contrib/mgmt/qmf/plugins/Utils.cpp
+@@ -22,6 +22,8 @@
+ 
+ #include "condor_debug.h"
+ 
++#include "condor_config.h" // is_valid_param_name
++
+ #include "compat_classad_util.h"
+ 
+ 
+@@ -49,23 +51,37 @@ string TrimQuotes(const char* str) {
+ }
+ 
+ // validate that an incoming group/user name is
+-// alphanumeric, underscores, or a dot separator
++// alphanumeric, underscores, @ or a dot separator
+ bool IsValidGroupUserName(const std::string& _name, std::string& _text) {
+ 	const char* ptr = _name.c_str();
++
+ 	while( *ptr ) {
+ 		char c = *ptr++;
+ 		if (	('a' > c || c > 'z') &&
+ 			('A' > c || c > 'Z') &&
+ 			('0' > c || c > '9') &&
+ 			(c != '_' ) &&
++			(c != '@' ) &&
+ 			(c != '.' ) ) {
+-			_text = "Invalid name for group/user - alphanumeric, underscore and dot characters only";
++			_text = "Invalid name for group/user - alphanumeric, underscore, @ and dot characters only";
+ 			return false;
+ 		}
+ 	}
+ 	return true;
+ }
+ 
++// validate that an incoming group/user name is
++// alphanumeric, underscores, or a dot separator
++bool IsValidParamName(const std::string& _name, std::string& _text) {
++	const char* ptr = _name.c_str();
++
++	if (!is_valid_param_name(ptr)) {
++		_text = "Invalid name for group/user - alphanumeric, underscore, @ and dot characters only";
++		return false;
++	}
++	return true;
++}
++
+ // validate that an incoming attribute name is
+ // alphanumeric, or underscores
+ bool IsValidAttributeName(const std::string& _name, std::string& _text) {
+@@ -161,18 +177,14 @@ bool
+ PopulateVariantMapFromAd(compat_classad::ClassAd &ad, Variant::Map &_map)
+ {
+ 	ExprTree *expr;
+-    ClassAd::iterator iter;
+-
+-    ad.ResetExpr();
+-    _map.clear();
+-    iter = ad.begin();
+-    while (iter != ad.end()) {
+-            string name = iter->first;
+-            if (!AddAttribute(ad, name.c_str(), _map)) {
++	const char *name;
++	ad.ResetExpr();
++	_map.clear();
++	while (ad.NextExpr(name,expr)) {
++		if (!AddAttribute(ad, name, _map)) {
+                     return false;
+-            }
+-            iter++;
+-    }
++		}
++	}
+ 
+ 	// TODO: debug
+ //	if (DebugFlags & D_FULLDEBUG) {
+diff --git a/src/condor_contrib/mgmt/qmf/plugins/Utils.h b/src/condor_contrib/mgmt/qmf/plugins/Utils.h
+index a248dab..670956a 100644
+--- a/src/condor_contrib/mgmt/qmf/plugins/Utils.h
++++ b/src/condor_contrib/mgmt/qmf/plugins/Utils.h
+@@ -27,6 +27,8 @@ bool AddAttribute(compat_classad::ClassAd &ad, const char *name, qpid::types::Va
+ 
+ bool IsValidGroupUserName(const std::string& _name, std::string& _text);
+ 
++bool IsValidParamName(const std::string& _name, std::string& _text);
++
+ bool IsValidAttributeName(const std::string& _name, std::string& _text);
+ 
+ bool CheckRequiredAttrs(compat_classad::ClassAd& ad, const char* attrs[], std::string& missing);
+diff --git a/src/condor_contrib/triggerd/src/TriggerConsole.cpp b/src/condor_contrib/triggerd/src/TriggerConsole.cpp
+index 75406e5..5801fea 100644
+--- a/src/condor_contrib/triggerd/src/TriggerConsole.cpp
++++ b/src/condor_contrib/triggerd/src/TriggerConsole.cpp
+@@ -102,15 +102,37 @@ TriggerConsole::config(std::string host, int port, std::string user, std::string
+    url << host << ":" << port;
+    options << "{reconnect:True"; 
+    if (!user.empty())
++   {
+       options << ", username:'" << user << "', password:'" << passwd << "'";
++   }
+    options << "}";
+ 
+-   qpidConnection = qpid::messaging::Connection(url.str(), options.str());
+-   qpidConnection.open();
++   try
++   {
++      qpidConnection = qpid::messaging::Connection(url.str(), options.str());
++      qpidConnection.open();
++   }
++   catch(...)
++   {
++      dprintf(D_ALWAYS, "Triggerd Error: Failed to contact AMQP broker on host '%s'.  Absent nodes detection disabled\n", host.c_str());
++      qpidConnection.close();
++   }
+ 
+-   qmf2Session = qmf::ConsoleSession(qpidConnection);
+-   qmf2Session.open();
+-   qmf2Session.setAgentFilter("[and, [eq, _vendor, [quote, 'com.redhat.grid']], [eq, _product, [quote, 'master']]]");
++   if (true == qpidConnection.isOpen())
++   {
++      try
++      {
++         qmf2Session = qmf::ConsoleSession(qpidConnection);
++         qmf2Session.open();
++         qmf2Session.setAgentFilter("[and, [eq, _vendor, [quote, 'com.redhat.grid']], [eq, _product, [quote, 'master']]]");
++      }
++      catch(...)
++      {
++         dprintf(D_ALWAYS, "Triggerd Error: Failed to setup QMF connections\n");
++         qpidConnection.close();
++         qmf2Session.close();
++      }
++   }
+ }
+ 
+ 
+@@ -124,6 +146,12 @@ TriggerConsole::findAbsentNodes()
+    std::list<std::string> missing_nodes;
+    uint64_t timeout(30);
+ 
++   // Only Perform the check if the qpid connection is valid
++   if (false == qpidConnection.isOpen())
++   {
++      return missing_nodes;
++   }
++
+    // Drain the queue of pending console events.
+    qmf::ConsoleEvent evt;
+    while (qmf2Session.nextEvent(evt, qpid::messaging::Duration::IMMEDIATE));
+diff --git a/src/condor_contrib/triggerd/src/Triggerd.cpp b/src/condor_contrib/triggerd/src/Triggerd.cpp
+index 85e65f9..21fa50d 100644
+--- a/src/condor_contrib/triggerd/src/Triggerd.cpp
++++ b/src/condor_contrib/triggerd/src/Triggerd.cpp
+@@ -221,22 +221,13 @@ Triggerd::init()
+    triggerCollection = new ClassAdCollection(trigger_log.c_str());
+    free(dataDir);
+ 
+-   // Initialize the triggers if any already exist
+-   triggerCollection->StartIterateAllClassAds();
+-   while(true == triggerCollection->IterateAllClassAds(ad, key))
+-   {
+-      key_value = atoll(key.value());
+-      if (triggers.end() == triggers.find(key_value))
+-      {
+-         if (STATUS_OK != AddTriggerToCollection(key_value, ad, error_text))
+-         {
+-            dprintf(D_ALWAYS, "Triggerd Error: '%s'.  Removing trigger\n", error_text.c_str());
+-            int_str << key_value;
+-            triggerCollection->DestroyClassAd(int_str.str().c_str());
+-         }
+-      }
+-   }
++   settings.host = std::string(host);
++   settings.port = port;
++   settings.username = std::string(username);
++   settings.password = std::string(password);
++   settings.mechanism = std::string(mechanism);
+ 
++   // Initialize the QMF agent
+    singleton = new ManagementAgent::Singleton();
+    ManagementAgent* agent = singleton->getInstance();
+ 
+@@ -244,17 +235,9 @@ Triggerd::init()
+    CondorTrigger::registerSelf(agent);
+    EventCondorTriggerNotify::registerSelf(agent);
+ 
+-   mgmtObject = new CondorTriggerService(agent, this);
+-
+-   settings.host = std::string(host);
+-   settings.port = port;
+-   settings.username = std::string(username);
+-   settings.password = std::string(password);
+-   settings.mechanism = std::string(mechanism);
+-
+-   // Initialize the QMF agent
+    agent->setName("com.redhat.grid","condortriggerservice", daemonName.c_str());
+    agent->init(settings, interval, true, storefile);
++   mgmtObject = new CondorTriggerService(agent, this);
+ 
+    // Initialize the QMF console, if desired
+    enable_console = param_boolean("ENABLE_ABSENT_NODES_DETECTION", false);
+@@ -269,8 +252,24 @@ Triggerd::init()
+    free(password);
+    free(mechanism);
+ 
+-   bool _lifetime = param_boolean("QMF_IS_PERSISTENT", true);
+-   agent->addObject(mgmtObject, daemonName.c_str(), _lifetime);
++   // Initialize the triggers if any already exist
++   triggerCollection->StartIterateAllClassAds();
++   while(true == triggerCollection->IterateAllClassAds(ad, key))
++   {
++      key_value = atoll(key.value());
++      if (triggers.end() == triggers.find(key_value))
++      {
++         if (STATUS_OK != AddTriggerToCollection(key_value, ad, error_text))
++         {
++            dprintf(D_ALWAYS, "Triggerd Error: '%s'.  Removing trigger\n", error_text.c_str());
++            int_str << key_value;
++            triggerCollection->DestroyClassAd(int_str.str().c_str());
++         }
++      }
++   }
++
++   bool lifetime = param_boolean("QMF_IS_PERSISTENT", true);
++   agent->addObject(mgmtObject, daemonName.c_str(), lifetime);
+ 
+    // Create a socket to handle management method calls
+    sock = new ReliSock;
+diff --git a/src/condor_contrib/triggerd/src/condor_trigger_config.py b/src/condor_contrib/triggerd/src/condor_trigger_config.py
+index 6b09ab7..8ac5e93 100644
+--- a/src/condor_contrib/triggerd/src/condor_trigger_config.py
++++ b/src/condor_contrib/triggerd/src/condor_trigger_config.py
+@@ -320,6 +320,9 @@ class TriggerConfigOptionParser(OptionParser):
+         self.add_option("-i", "--init", action="store_true", help="add default triggers")
+         self.add_option("-l", "--list", action="store_true", help="list installed triggers")
+         self.add_option("-s", "--test", action="store_true", help="test triggers")
++        self.add_option("-U", "--user", action="store", help="The username used to authenticate with the broker")
++        self.add_option("-P", "--password", action="store", help="The password used to authenticate with the broker")
++        self.add_option("-m", "--auth-mechanism", action="store", help="A comma separated list of authentication mechanisms to use when communicating with the broker.  Supported mechanisms are: ANONYMOUS, PLAIN, GSSAPI", default="ANONYMOUS,PLAIN,GSSAPI")
+ 
+     def is_valid(self, opts, args):
+         valid = False
+@@ -352,8 +355,13 @@ def main():
+     session = TriggerConfig(opts.test)
+ 
+     print "Connecting to broker '%s'..." % target
++    if opts.user != None and opts.password != None:
++       target = "%s/%s@%s" % (opts.user, opts.password, target)
++    elif opts.user != None:
++       target = "%s@%s" % (opts.user, target)
++
+     try:
+-        broker = session.addBroker(target)
++        broker = session.addBroker(target, mechanisms = opts.auth_mechanism.replace(',', ' '))
+     except Exception, e:
+         print e
+         sys.exit(1)
+diff --git a/src/condor_daemon_core.V6/soap_core.cpp b/src/condor_daemon_core.V6/soap_core.cpp
+index 0cf3a64..178dce7 100644
+--- a/src/condor_daemon_core.V6/soap_core.cpp
++++ b/src/condor_daemon_core.V6/soap_core.cpp
+@@ -518,6 +518,10 @@ int serve_file(struct soap *soap, const char *name, const char *type) {
+     web_root_realpath = strdup(buf);
+   }
+   free(web_root_dir);
++
++  if (!web_root_realpath) {
++    return 404;
++  } 
+   
+   char * full_name = dircat(web_root_realpath,name);
+   char * full_name_realpath = NULL;
+diff --git a/src/condor_examples/condor.boot.rpm b/src/condor_examples/condor.boot.rpm
+index c96d3b3..498e7da 100755
+--- a/src/condor_examples/condor.boot.rpm
++++ b/src/condor_examples/condor.boot.rpm
+@@ -500,7 +500,7 @@ find_masters() {
+ }
+ 
+ # To the best of its ability, finds the active condor_master's PID.
+-# echos the result, or an empty string if none was found.
++# Store the result in global variable MASTER_PIDS.
+ # You can call this repeatedly to check for updates.
+ # If we use the pid file the first time through, always use it --
+ #  if it disappears, means that the Condor went bye-bye
+@@ -560,7 +560,7 @@ wait_for_exit() {
+     condor_master_pids
+   done
+   
+-  if [ "`condor_master_pids`" = "" ]; then
++  if [ "$MASTER_PIDS" = "" ]; then
+     return 0
+   else
+     return 1
+@@ -684,8 +684,8 @@ xstop() {
+ # This can fail for any number of reasons, and we wouldn't
+ # detect it.
+ #
+-# As a possible improvement, we might send SIGHUP if `condor_master_pids`
+-# is non-empty, only falling back on condor_reconfig if it is.
++# As a possible improvement, we might send SIGHUP if condor_master_pids
++# finds nothing, only falling back on condor_reconfig if it is.
+ #
+ # Also, detect the return code from CONDOR_RECONFIG; non-zero
+ # indicates aproblem. (At the moment that never happens, but
+@@ -712,7 +712,8 @@ reload() {
+ # 3 not running
+ # 4 unknown
+ status() {
+-  master_pid=`condor_master_pids`
++  condor_master_pids
++  master_pid="$MASTER_PIDS"
+   if [ "$master_pid" != "" ]; then
+     echo "Condor is running (pid $master_pid)"
+     return 0
+@@ -768,7 +769,8 @@ case "$INIT_COMMAND" in
+     ;;
+ 
+   'try-restart')
+-    if [ "`condor_master_pids`" = "" ]; then exit 0; fi # Not running
++    condor_master_pids
++    if [ "$MASTER_PIDS" = "" ]; then exit 0; fi # Not running
+     xstop
+     start
+     ;;
+diff --git a/src/condor_gridmanager/amazonjob.cpp b/src/condor_gridmanager/amazonjob.cpp
+index 27a13b5..b55e601 100644
+--- a/src/condor_gridmanager/amazonjob.cpp
++++ b/src/condor_gridmanager/amazonjob.cpp
+@@ -154,6 +154,12 @@ dprintf( D_ALWAYS, "================================>  AmazonJob::AmazonJob 1 \n
+ 	numSubmitAttempts = 0;
+ 	myResource = NULL;
+ 	gahp = NULL;
++	m_public_key_file = NULL;
++	m_private_key_file = NULL;
++	m_user_data = NULL;
++	m_user_data_file = NULL;
++	m_group_names = NULL;
++	m_instance_type = NULL;
+ 	
+ 	// check the public_key_file
+ 	buff[0] = '\0';
+@@ -183,8 +189,6 @@ dprintf( D_ALWAYS, "================================>  AmazonJob::AmazonJob 1 \n
+ 		// at the attribute in a better way.
+ 
+ 	memset(buff, 0, 16385);
+-	m_user_data = NULL;
+-	m_user_data_file = NULL;	
+ 	
+ 	// if user assigns both user_data and user_data_file, the two will
+ 	// be concatenated by the gahp
+@@ -197,14 +201,13 @@ dprintf( D_ALWAYS, "================================>  AmazonJob::AmazonJob 1 \n
+ 	
+ 	// get VM instance type
+ 	memset(buff, 0, 16385);
+-	m_instance_type = NULL; // if clients don't assign this value in condor submit file,
+-							// we should set the default value to NULL and gahp_server
+-							// will start VM in Amazon using m1.small mode.
++	// if clients don't assign this value in condor submit file,
++	// we should set the default value to NULL and gahp_server
++	// will start VM in Amazon using m1.small mode.
+ 	if ( jobAd->LookupString( ATTR_AMAZON_INSTANCE_TYPE, buff ) ) {
+ 		m_instance_type = strdup(buff);	
+ 	}
+ 	
+-	m_group_names = NULL;
+ 	m_vm_check_times = 0;
+ 	m_keypair_check_times = 0;
+ 
+diff --git a/src/condor_includes/condor_debug.h b/src/condor_includes/condor_debug.h
+index 742ed59..48be699 100644
+--- a/src/condor_includes/condor_debug.h
++++ b/src/condor_includes/condor_debug.h
+@@ -76,6 +76,12 @@
+ extern "C" {
+ #endif
+ 
++#if _MSC_VER >= 1400 /* VC++ 2005 version */
++#define PREFAST_NORETURN __declspec(noreturn)
++#else
++#define PREFAST_NORETURN
++#endif
++
+ extern int DebugFlags;	/* Bits to look for in dprintf */
+ extern int Termlog;		/* Are we logging to a terminal? */
+ extern int DebugShouldLockToAppend; /* Should we lock the file before each write? */
+@@ -93,7 +99,7 @@ void dprintf ( int flags, const char *fmt, ... ) CHECK_PRINTF_FORMAT(2,3);
+ void dprintf_config( const char *subsys );
+ void _condor_dprintf_va ( int flags, const char* fmt, va_list args );
+ int _condor_open_lock_file(const char *filename,int flags, mode_t perm);
+-void _EXCEPT_ ( const char *fmt, ... ) CHECK_PRINTF_FORMAT(1,2);
++void PREFAST_NORETURN _EXCEPT_ ( const char *fmt, ... ) CHECK_PRINTF_FORMAT(1,2);
+ void Suicide(void);
+ void set_debug_flags( const char *strflags );
+ void _condor_fd_panic( int line, const char *file );
+@@ -156,7 +162,7 @@ extern int	_EXCEPT_Line;			/* Line number of the exception    */
+ extern const char	*_EXCEPT_File;		/* File name of the exception      */
+ extern int	_EXCEPT_Errno;			/* errno from most recent system call */
+ extern int (*_EXCEPT_Cleanup)(int,int,const char*);	/* Function to call to clean up (or NULL) */
+-extern void _EXCEPT_(const char*, ...) CHECK_PRINTF_FORMAT(1,2);
++extern PREFAST_NORETURN void _EXCEPT_(const char*, ...) CHECK_PRINTF_FORMAT(1,2);
+ 
+ #if defined(__cplusplus)
+ }
+diff --git a/src/condor_includes/condor_sys_nt.h b/src/condor_includes/condor_sys_nt.h
+index 676793b..92e69ed 100644
+--- a/src/condor_includes/condor_sys_nt.h
++++ b/src/condor_includes/condor_sys_nt.h
+@@ -241,6 +241,18 @@ END_C_DECLS
+ 
+ #endif
+ 
++// defeat prefast warnings
++_Check_return_ inline int isspace(_In_ char ch) {
++   return isspace(static_cast<int> (static_cast<unsigned char> (ch)));
++}
++_Check_return_ inline int isalnum(_In_ char ch) {
++   return isalnum(static_cast<int> (static_cast<unsigned char> (ch)));
++}
++_Check_return_ inline int isdigit(_In_ char ch) {
++   return isdigit(static_cast<int> (static_cast<unsigned char> (ch)));
++}
++
++
+ /* Define the PRIx64 macros */
+ 
+ // If no inttypes, try to define our own
+diff --git a/src/condor_includes/condor_system.h b/src/condor_includes/condor_system.h
+index d08d6dd..6e39d66 100644
+--- a/src/condor_includes/condor_system.h
++++ b/src/condor_includes/condor_system.h
+@@ -1,6 +1,6 @@
+ /***************************************************************
+  *
+- * Copyright (C) 1990-2007, Condor Team, Computer Sciences Department,
++ * Copyright (C) 1990-2011, Condor Team, Computer Sciences Department,
+  * University of Wisconsin-Madison, WI.
+  *
+  * Licensed under the Apache License, Version 2.0 (the "License"); you
+diff --git a/src/condor_includes/config.h.cmake b/src/condor_includes/config.h.cmake
+index 28d802f..3969aff 100644
+--- a/src/condor_includes/config.h.cmake
++++ b/src/condor_includes/config.h.cmake
+@@ -25,14 +25,6 @@
+ /// TODO: OS VARS, may be able to ax with some smart mods
+ /// the definitions
+ /// I may be able to do away with all of this.
+-///* Define if on FreeBSD4 */
+-//#cmakedefine CONDOR_FREEBSD4
+-///* Define if on FreeBSD5 */
+-//#cmakedefine CONDOR_FREEBSD5
+-///* Define if on FreeBSD6 */
+-//#cmakedefine CONDOR_FREEBSD6
+-///* Define if on FreeBSD7 */
+-//#cmakedefine CONDOR_FREEBSD7
+ ///* Define if on OS X 10.3 */
+ //#cmakedefine Darwin_10_3
+ ///* Define if on OS X 10.4 */
+@@ -44,6 +36,28 @@
+ //////////////////////////////////////////////////
+ 
+ //////////////////////////////////////////////////
++// Sadly, some of these are still in use
++/* Define if on FreeBSD 4 */
++#cmakedefine CONDOR_FREEBSD4
++/* Define if on FreeBSD 5 */
++#cmakedefine CONDOR_FREEBSD5
++/* Define if on FreeBSD 6 */
++#cmakedefine CONDOR_FREEBSD6
++/* Define if on FreeBSD 7 */
++#cmakedefine CONDOR_FREEBSD7
++///* Define if on FreeBSD 8 */
++#cmakedefine CONDOR_FREEBSD8
++///* Define if on FreeBSD */
++#cmakedefine CONDOR_FREEBSD
++///* Define release of FreeBSD (i.e. 7.4, 8.2) */
++#cmakedefine FREEBSD_RELEASE
++///* Define major release of FreeBSD */
++#cmakedefine FREEBSD_MAJOR
++///* Define minor release of FreeBSD */
++#cmakedefine FREEBSD_MINOR
++//////////////////////////////////////////////////
++
++//////////////////////////////////////////////////
+ /// Options which may be changed if standard universe
+ /// goes away
+ ///* Define if we can do checkpointing */
+diff --git a/src/condor_io/condor_crypt.cpp b/src/condor_io/condor_crypt.cpp
+index e8f1d40..2de4883 100644
+--- a/src/condor_io/condor_crypt.cpp
++++ b/src/condor_io/condor_crypt.cpp
+@@ -75,6 +75,7 @@ unsigned char * Condor_Crypt_Base :: randomKey(int length)
+     int size = 128;
+     if( ! already_seeded ) {
+         unsigned char * buf = (unsigned char *) malloc(size);
++        ASSERT(buf);
+ 		for (int i = 0; i < size; i++) {
+ 			buf[i] = get_random_int() & 0xFF;
+ 		}
+@@ -118,6 +119,6 @@ unsigned char * Condor_Crypt_Base :: oneWayHashKey(const char * initialKey)
+ #ifdef HAVE_EXT_OPENSSL
+     return Condor_MD_MAC::computeOnce((unsigned char *)initialKey, strlen(initialKey));
+ #else 
+-    return 0;
++    return NULL;
+ #endif
+ }
+diff --git a/src/condor_io/condor_secman.cpp b/src/condor_io/condor_secman.cpp
+index 54579de..207fbba 100644
+--- a/src/condor_io/condor_secman.cpp
++++ b/src/condor_io/condor_secman.cpp
+@@ -2900,7 +2900,7 @@ SecMan::CreateNonNegotiatedSecuritySession(DCpermission auth_level, char const *
+ 	unsigned char* keybuf = Condor_Crypt_Base::oneWayHashKey(private_key);
+ 	if(!keybuf) {
+ 		dprintf(D_ALWAYS,"SECMAN: failed to create non-negotiated security session %s because"
+-				"oneWayHashKey() failed.\n",sesid);
++				" oneWayHashKey() failed.\n",sesid);
+ 		return false;
+ 	}
+ 	KeyInfo *keyinfo = new KeyInfo(keybuf,keylen,crypt_protocol);
+diff --git a/src/condor_io/shared_port_client.cpp b/src/condor_io/shared_port_client.cpp
+index 05a46ff..b9f26c2 100644
+--- a/src/condor_io/shared_port_client.cpp
++++ b/src/condor_io/shared_port_client.cpp
+@@ -193,12 +193,12 @@ SharedPortClient::PassSocket(Sock *sock_to_pass,char const *shared_port_id,char
+ 		return false;
+ 	}
+ 
+-	int bufferSize = sizeof(WSAPROTOCOL_INFO) + sizeof(int);
++	int bufferSize = sizeof(protocol_info) + sizeof(int);
+ 	char *buffer = new char[bufferSize];
+ 	ASSERT( buffer );
+ 	int cmd = SHARED_PORT_PASS_SOCK;
+ 	memcpy_s(buffer, sizeof(int), &cmd, sizeof(int));
+-	memcpy_s(buffer+sizeof(int), sizeof(WSAPROTOCOL_INFO), &protocol_info, sizeof(WSAPROTOCOL_INFO));
++	memcpy_s(buffer+sizeof(int), sizeof(protocol_info), &protocol_info, sizeof(protocol_info));
+ 	BOOL write_result = WriteFile(child_pipe, buffer, bufferSize, &read_bytes, 0);
+ 
+ 	delete [] buffer;
+diff --git a/src/condor_job_router/JobRouter.h b/src/condor_job_router/JobRouter.h
+index 7de6951..243f44c 100644
+--- a/src/condor_job_router/JobRouter.h
++++ b/src/condor_job_router/JobRouter.h
+@@ -26,7 +26,6 @@
+ #include "RoutedJob.h"
+ 
+ #define WANT_CLASSAD_NAMESPACE
+-#undef open
+ #include "classad/classad_distribution.h"
+ 
+ #if HAVE_JOB_HOOKS
+diff --git a/src/condor_job_router/JobRouterHookMgr.h b/src/condor_job_router/JobRouterHookMgr.h
+index 5084e81..e061d05 100644
+--- a/src/condor_job_router/JobRouterHookMgr.h
++++ b/src/condor_job_router/JobRouterHookMgr.h
+@@ -26,7 +26,6 @@
+ #include "RoutedJob.h"
+ 
+ #define WANT_CLASSAD_NAMESPACE
+-#undef open
+ #include "classad/classad_distribution.h"
+ 
+ 
+diff --git a/src/condor_job_router/NewClassAdJobLogConsumer.cpp b/src/condor_job_router/NewClassAdJobLogConsumer.cpp
+index 9ee3728..3d2fe1c 100644
+--- a/src/condor_job_router/NewClassAdJobLogConsumer.cpp
++++ b/src/condor_job_router/NewClassAdJobLogConsumer.cpp
+@@ -27,7 +27,6 @@
+ #include <string>
+ 
+ #define WANT_CLASSAD_NAMESPACE
+-#undef open
+ #include "classad/classad_distribution.h"
+ 
+ NewClassAdJobLogConsumer::NewClassAdJobLogConsumer() : m_reader(0) { }
+diff --git a/src/condor_job_router/NewClassAdJobLogConsumer.h b/src/condor_job_router/NewClassAdJobLogConsumer.h
+index 8b0c142..d4d6d12 100644
+--- a/src/condor_job_router/NewClassAdJobLogConsumer.h
++++ b/src/condor_job_router/NewClassAdJobLogConsumer.h
+@@ -27,7 +27,6 @@
+ #include <string>
+ 
+ #define WANT_CLASSAD_NAMESPACE
+-#undef open
+ #include "classad/classad_distribution.h"
+ 
+ class NewClassAdJobLogConsumer: public ClassAdLogConsumer
+diff --git a/src/condor_job_router/RoutedJob.h b/src/condor_job_router/RoutedJob.h
+index 6cb2432..7d27709 100644
+--- a/src/condor_job_router/RoutedJob.h
++++ b/src/condor_job_router/RoutedJob.h
+@@ -23,7 +23,6 @@
+ //#include "condor_common.h"
+ 
+ #define WANT_CLASSAD_NAMESPACE
+-#undef open
+ #include "classad/classad_distribution.h"
+ 
+ class JobRoute;
+diff --git a/src/condor_job_router/VanillaToGrid.cpp b/src/condor_job_router/VanillaToGrid.cpp
+index 429c478..fd4e8bd 100644
+--- a/src/condor_job_router/VanillaToGrid.cpp
++++ b/src/condor_job_router/VanillaToGrid.cpp
+@@ -29,7 +29,6 @@
+ #include "filename_tools.h"
+ #include "string_list.h"
+ #define WANT_CLASSAD_NAMESPACE
+-#undef open
+ #include "classad/classad_distribution.h"
+ 
+ 
+diff --git a/src/condor_job_router/VanillaToGrid_main.cpp b/src/condor_job_router/VanillaToGrid_main.cpp
+index 39f812e..56d6762 100644
+--- a/src/condor_job_router/VanillaToGrid_main.cpp
++++ b/src/condor_job_router/VanillaToGrid_main.cpp
+@@ -26,7 +26,6 @@
+ #include "condor_attributes.h"
+ #include "basename.h"
+ #define WANT_CLASSAD_NAMESPACE
+-#undef open
+ #include "classad/classad_distribution.h"
+ 
+ #include <libgen.h>
+diff --git a/src/condor_job_router/set_user_from_ad.cpp b/src/condor_job_router/set_user_from_ad.cpp
+index c44f966..f332ce0 100644
+--- a/src/condor_job_router/set_user_from_ad.cpp
++++ b/src/condor_job_router/set_user_from_ad.cpp
+@@ -27,7 +27,6 @@
+ #include "classad_newold.h"
+ #include "condor_uid.h"
+ #define WANT_CLASSAD_NAMESPACE
+-#undef open
+ #include "classad/classad_distribution.h"
+ 
+ void set_user_from_ad(classad::ClassAd const &ad)
+diff --git a/src/condor_job_router/submit_job.cpp b/src/condor_job_router/submit_job.cpp
+index 6aa544c..cd82c69 100644
+--- a/src/condor_job_router/submit_job.cpp
++++ b/src/condor_job_router/submit_job.cpp
+@@ -34,7 +34,6 @@
+ #include "format_time.h"
+ #include "set_user_priv_from_ad.h"
+ #define WANT_CLASSAD_NAMESPACE
+-#undef open
+ #include "classad/classad_distribution.h"
+ #include "set_user_from_ad.h"
+ #include "file_transfer.h"
+diff --git a/src/condor_negotiator.V6/matchmaker.cpp b/src/condor_negotiator.V6/matchmaker.cpp
+index e4d3a89..cf49d73 100644
+--- a/src/condor_negotiator.V6/matchmaker.cpp
++++ b/src/condor_negotiator.V6/matchmaker.cpp
+@@ -1272,7 +1272,7 @@ negotiationTime ()
+ 
+                     negotiateWithGroup(untrimmed_num_startds, untrimmedSlotWeightTotal, minSlotWeight,
+                                        startdAds, claimIds, *(group->submitterAds), 
+-                                       slots, group->usage, group->name.c_str());
++                                       slots, group->name.c_str());
+                 }
+ 
+                 // Halt when we have negotiated with full deltas
+@@ -1967,7 +1967,7 @@ negotiateWithGroup ( int untrimmed_num_startds,
+ 					 ClassAdListDoesNotDeleteAds& startdAds,
+ 					 ClaimIdHash& claimIds, 
+ 					 ClassAdListDoesNotDeleteAds& scheddAds, 
+-					 float groupQuota, float groupusage,const char* groupAccountingName)
++					 float groupQuota, const char* groupName)
+ {
+     time_t start_time_phase3 = time(NULL);
+ 	ClassAd		*schedd;
+@@ -2006,6 +2006,18 @@ negotiateWithGroup ( int untrimmed_num_startds,
+ 	do {
+ 		spin_pie++;
+ 
++        // On the first spin of the pie we tell the negotiate function to ignore the
++        // submitterLimit w/ respect to jobs which are strictly preferred by resource 
++        // offers (via startd rank).  However, if preemption is not being considered, 
++        // we respect submitter limits on all iterations.
++        const bool ignore_submitter_limit = ((spin_pie == 1) && ConsiderPreemption);
++
++        double groupusage = (NULL != groupName) ? accountant.GetWeightedResourcesUsed(groupName) : 0.0;
++        if (!ignore_submitter_limit && (NULL != groupName) && (groupusage >= groupQuota)) {
++            // If we've met the group quota, and if we are paying attention to submitter limits, halt now
++            dprintf(D_ALWAYS, "Group %s is using its quota %g - halting negotiation\n", groupName, groupQuota);
++            break;
++        }
+ 			// invalidate the MatchList cache, because even if it is valid
+ 			// for the next user+auto_cluster being considered, we might
+ 			// have thrown out matches due to SlotWeight being too high
+@@ -2028,7 +2040,7 @@ negotiateWithGroup ( int untrimmed_num_startds,
+ 
+ 		calculatePieLeft(
+ 			scheddAds,
+-			groupAccountingName,
++			groupName,
+ 			groupQuota,
+ 			groupusage,
+ 			maxPrioValue,
+@@ -2056,6 +2068,11 @@ negotiateWithGroup ( int untrimmed_num_startds,
+         // "schedd" seems to be used interchangeably with "submitter" here
+ 		while( (schedd = scheddAds.Next()) )
+ 		{
++            if (!ignore_submitter_limit && (NULL != groupName) && (accountant.GetWeightedResourcesUsed(groupName) >= groupQuota)) {
++                // If we met group quota, and if we're respecting submitter limits, halt.
++                // (output message at top of outer loop above)
++                break;
++            }
+ 			// get the name of the submitter and address of the schedd-daemon it came from
+ 			if( !schedd->LookupString( ATTR_NAME, scheddName ) ||
+ 				!schedd->LookupString( ATTR_SCHEDD_IP_ADDR, scheddAddr ) )
+@@ -2100,7 +2117,7 @@ negotiateWithGroup ( int untrimmed_num_startds,
+ 
+ 			calculateSubmitterLimit(
+ 				scheddName.Value(),
+-				groupAccountingName,
++				groupName,
+ 				groupQuota,
+ 				groupusage,
+ 				maxPrioValue,
+@@ -2184,11 +2201,6 @@ negotiateWithGroup ( int untrimmed_num_startds,
+ 				if ( (submitterLimit <= 0 || pieLeft < minSlotWeight) && spin_pie > 1 ) {
+ 					result = MM_RESUME;
+ 				} else {
+-					if ( spin_pie == 1 && ConsiderPreemption ) {
+-						ignore_schedd_limit = true;
+-					} else {
+-						ignore_schedd_limit = false;
+-					}
+ 					int numMatched = 0;
+ 					startTime = time(NULL);
+ 					double limitUsed = 0.0;
+@@ -2247,7 +2259,6 @@ negotiateWithGroup ( int untrimmed_num_startds,
+ 		scheddAds.Close();
+ 		dprintf( D_FULLDEBUG, " resources used scheddUsed= %f\n",scheddUsed);
+ 
+-		groupusage = scheddUsed;
+ 	} while ( ( pieLeft < pieLeftOrig || scheddAds.MyLength() < scheddAdsCountOrig )
+ 			  && (scheddAds.MyLength() > 0)
+ 			  && (startdAds.MyLength() > 0) );
+@@ -2570,6 +2581,25 @@ obtainAdsFromCollector (
+ 				// CRUFT: Before 7.3.2, submitter ads had a MyType of
+ 				//   "Scheduler". The only way to tell the difference
+ 				//   was that submitter ads didn't have ATTR_NUM_USERS.
++
++            MyString subname;
++            if (!ad->LookupString(ATTR_NAME, subname)) {
++                dprintf(D_ALWAYS, "WARNING: ignoring submitter ad with no name\n");
++                continue;
++            }
++
++            int numidle=0;
++            ad->LookupInteger(ATTR_IDLE_JOBS, numidle);
++            int numrunning=0;
++            ad->LookupInteger(ATTR_RUNNING_JOBS, numrunning);
++            int requested = numrunning + numidle;
++
++            // This will avoid some wasted effort in negotiation looping
++            if (requested <= 0) {
++                dprintf(D_FULLDEBUG, "Ignoring submitter %s with no requested jobs\n", subname.Value());
++                continue;
++            }
++
+     		ad->Assign(ATTR_TOTAL_TIME_IN_CYCLE, 0);
+ 			scheddAds.Insert(ad);
+ 		}
+diff --git a/src/condor_negotiator.V6/matchmaker.h b/src/condor_negotiator.V6/matchmaker.h
+index e0d647b..2b01ff5 100644
+--- a/src/condor_negotiator.V6/matchmaker.h
++++ b/src/condor_negotiator.V6/matchmaker.h
+@@ -175,7 +175,7 @@ class Matchmaker : public Service
+ 								 double minSlotWeight,
+ 			ClassAdListDoesNotDeleteAds& startdAds, 
+ 			ClaimIdHash& claimIds, ClassAdListDoesNotDeleteAds& scheddAds, 
+-			float groupQuota=INT_MAX, float groupusage=0, const char* groupAccountingName=NULL);
++			float groupQuota=INT_MAX, const char* groupName=NULL);
+ 
+ 		
+ 		ClassAd *matchmakingAlgorithm(const char*,const char*,ClassAd&,ClassAdListDoesNotDeleteAds&,
+diff --git a/src/condor_procapi/procapi.cpp b/src/condor_procapi/procapi.cpp
+index fcb28fa..bee8e36 100644
+--- a/src/condor_procapi/procapi.cpp
++++ b/src/condor_procapi/procapi.cpp
+@@ -492,12 +492,6 @@ ProcAPI::getProcInfoRaw( pid_t pid, procInfoRaw& procRaw, int &status )
+ 		// assume success
+ 	status = PROCAPI_OK;
+ 
+-		// clear the memory of procRaw
+-	initProcInfoRaw(procRaw);
+-
+-		// set the sample time
+-	procRaw.sample_time = secsSinceEpoch();
+-
+ 	// read the entry a certain number of times since it appears that linux
+ 	// often simply does something stupid while reading.
+ 	sprintf( path, "/proc/%d/stat", pid );
+@@ -508,7 +502,10 @@ ProcAPI::getProcInfoRaw( pid_t pid, procInfoRaw& procRaw, int &status )
+ 
+ 		// in case I must restart, assume that everything is ok again...
+ 		status = PROCAPI_OK;
++		// clear the memory of procRaw
+ 		initProcInfoRaw(procRaw);
++		// set the sample time
++		procRaw.sample_time = secsSinceEpoch();
+ 
+ 		if( (fp = safe_fopen_wrapper(path, "r")) == NULL ) {
+ 			if( errno == ENOENT ) {
+diff --git a/src/condor_rmdir/bprint.h b/src/condor_rmdir/bprint.h
+index b7ae97d8..2bb4535 100644
+--- a/src/condor_rmdir/bprint.h
++++ b/src/condor_rmdir/bprint.h
+@@ -253,10 +253,10 @@ void bprint_Initialize(BPRINT_BUFFER & bp)
+    if (bp.cchMax <= 0)
+       bp.cchMax = 0x0FFFF;
+    if ( ! bp.psz)
+-      bp.psz = (LPTSTR) GlobalAllocPtr(GPTR, (bp.cchMax+1) * NUMBYTES(bp.psz[0]));
++      bp.psz = (LPTSTR) malloc((bp.cchMax+1) * NUMBYTES(bp.psz[0]));
+   #ifdef UNICODE
+    if ( ! bp.pszAscii)
+-      bp.pszAscii = (LPSTR) GlobalAllocPtr(GPTR, (bp.cchMax+1) * 2);
++      bp.pszAscii = (LPSTR) malloc((bp.cchMax+1) * 2);
+   #endif
+    bp.cch = 0;
+    bp.CodePage = CP_ACP;
+@@ -466,9 +466,9 @@ void bprint_Terminate(BPRINT_BUFFER & bp, bool fFlush)
+    if (fFlush)
+       bprint_EndLine(bp);
+    if (bp.psz)
+-      GlobalFreePtr(bp.psz);
++      free(bp.psz);
+    if (bp.pszAscii)
+-      GlobalFreePtr(bp.pszAscii);
++      free(bp.pszAscii);
+    if (bp.hOut && (bp.hOut != GetStdHandle(STD_OUTPUT_HANDLE)))
+       CloseHandle(bp.hOut);
+    ZeroStruct(&bp);
+diff --git a/src/condor_rmdir/harylist.h b/src/condor_rmdir/harylist.h
+index d31f71e..f62b326 100644
+--- a/src/condor_rmdir/harylist.h
++++ b/src/condor_rmdir/harylist.h
+@@ -118,13 +118,13 @@ HRESULT FNEXPORT HaryList_InsertList (
+ INLINE LPVOID HaryList_AllocItem(HARYLIST hlst, LONG cbItem) {
+ 	DASSERT(PCARYLIST_PTR(hlst)->cbItem == sizeof(void*));
+ 	DASSERT(PCARYLIST_PTR(hlst)->fdwOptions & ARYLIST_OPT_F_GPTRS);
+-	return (LPVOID)GlobalAllocPtr(GPTR, cbItem);
++	return (LPVOID)malloc(cbItem);
+ }
+ 
+ INLINE void HaryList_FreeItem(HARYLIST hlst, LPVOID pvItem) {
+ 	DASSERT(PCARYLIST_PTR(hlst)->cbItem == sizeof(void*));
+ 	DASSERT(PCARYLIST_PTR(hlst)->fdwOptions & ARYLIST_OPT_F_GPTRS);
+-	GlobalFreePtr(pvItem);
++	free(pvItem);
+ }
+ 
+ INLINE HRESULT HaryList_InsertItemCopy(HARYLIST hlst, LONG ix, LPCVOID pvItem) {
+@@ -384,7 +384,7 @@ HRESULT FNEXPORT HaryList_Create (
+ 	else
+ 	{
+ 		*phlst = NULL;
+-		plst = (PARYLIST)GlobalAllocPtr(GPTR, sizeof(*plst));
++		plst = (PARYLIST)malloc(sizeof(*plst));
+ 	}
+ 	if ( ! plst)
+ 		return E_OUTOFMEMORY;
+@@ -407,7 +407,7 @@ HRESULT FNEXPORT HaryList_Create (
+ 	plst->cGrowBy    = cGrowBy;
+ 
+     LONG cb = cAllocate * cbItem;
+-    plst->pvList = (void**)GlobalAllocPtr(GPTR, cb);
++    plst->pvList = (void**)malloc(cb);
+ 
+ 	if (fdwOptions & ARYLIST_OPT_F_EMBEDDED)
+ 	{
+@@ -417,7 +417,7 @@ HRESULT FNEXPORT HaryList_Create (
+     DASSERT(plst->pvList);
+     if ( ! plst->pvList)
+     {
+-        GlobalFreePtr(plst);
++        free(plst);
+         return E_OUTOFMEMORY;
+     }
+ 
+@@ -445,12 +445,12 @@ HRESULT FNEXPORT HaryList_Destroy (HARYLIST hlst)
+ 				LPVOID pv = ppv[plst->cItems-1];
+ 				ppv[plst->cItems-1] = NULL;
+ 				if (pv)
+-					GlobalFreePtr(pv);
++					free(pv);
+ 				--plst->cItems;
+ 			}
+ 		}
+ 
+-        GlobalFreePtr(plst->pvList);
++        free(plst->pvList);
+         plst->pvList = NULL;
+     }
+ 
+@@ -461,7 +461,7 @@ HRESULT FNEXPORT HaryList_Destroy (HARYLIST hlst)
+     }
+ 
+ 	if ( ! (plst->fdwOptions & ARYLIST_OPT_F_EMBEDDED))
+-		GlobalFreePtr(plst);
++		free(plst);
+     return S_OK;
+ }
+ 
+@@ -485,12 +485,7 @@ HRESULT HaryList_GrowAllocated (
+ 
+     LONG cbNewAlloc = (plst->cAllocated + cDelta) * plst->cbItem;
+ 
+-    // 
+-    // GlobalReAllocPtr can fail, will fail so we have to allocate
+-    // a whole new buffer and copy the new data to it.
+-    //pvNew = (LPVOID)GlobalReAllocPtr(plst->pvList, cb, GMEM_ZEROINIT);
+-
+-    void** pvNew = (void**)GlobalAllocPtr(GPTR, cbNewAlloc);
++    void** pvNew = (void**)malloc(cbNewAlloc);
+     if ( ! pvNew)
+     {
+         hr = E_OUTOFMEMORY;
+@@ -498,7 +493,7 @@ HRESULT HaryList_GrowAllocated (
+     }
+ 
+     RtlCopyMemory(pvNew, plst->pvList, plst->cAllocated * plst->cbItem);
+-    GlobalFreePtr(plst->pvList);
++    free(plst->pvList);
+ 
+     plst->pvList = pvNew;
+     plst->cAllocated += cDelta;
+diff --git a/src/condor_rmdir/main.cpp b/src/condor_rmdir/main.cpp
+index 19395a2..fc6c89a 100644
+--- a/src/condor_rmdir/main.cpp
++++ b/src/condor_rmdir/main.cpp
+@@ -745,7 +745,8 @@ HRESULT App_ExecuteCommandLine (
+          {
+          hr = App_ExecuteArgList (aArgs, ixFirst, cArgs - ixFirst);
+          }
+-      GlobalFreePtr (aArgs);
++
++      HeapFree(GetProcessHeap(), 0, aArgs);
+       }
+ 
+    return hr;
+@@ -761,6 +762,12 @@ const TCHAR * _pszModulePath; // global path name
+ void App_SetModuleInfo(void)
+ {
+    TCHAR * pszBase =(TCHAR*)malloc(sizeof(TCHAR) * (MAX_PATH+3));
++   if ( ! pszBase)
++      {
++	  _pszModulePath = _pszModuleName = TEXT("");
++	  return;
++      }
++
+    TCHAR * psz = pszBase;
+    *psz++ = 0; // so we have room for a "" path if the module filename has no path
+    int cch = GetModuleFileName(NULL, psz, MAX_PATH+1);
+@@ -798,13 +805,13 @@ void App_SetModuleInfo(void)
+       _pszModulePath = pszBase;
+    else
+       {
+-      if (_pszModuleName-1 > _pszModulePath)
++      if (_pszModuleName-2 >= _pszModulePath)
+          {
+          // we need to be careful not to delete \ folling a drive letter,
+          // if that happens, we have to move the name by 1 character
+          // so there is room for a null terminator after N:\ and before
+          // the name.
+-         if (_pszModuleName[-1] == ':' &&
++         if (_pszModuleName[-2] == ':' &&
+              _pszModuleName[-1] == '\\')
+             {
+             RtlMoveMemory((void*)(_pszModuleName+1), (void*)(_pszModuleName),
+diff --git a/src/condor_schedd.V6/qmgmt.cpp b/src/condor_schedd.V6/qmgmt.cpp
+index c3fbafd..2aad71c 100644
+--- a/src/condor_schedd.V6/qmgmt.cpp
++++ b/src/condor_schedd.V6/qmgmt.cpp
+@@ -2862,6 +2862,7 @@ CommitTransaction(SetAttributeFlags_t flags /* = 0 */)
+ 					rewriteSpooledJobAd(procad, cluster_id, proc_id, false);
+ 					JobQueue->CommitNondurableTransaction();
+ 					ScheduleJobQueueLogFlush();
++					SpooledJobFiles::createJobSpoolDirectory(procad,PRIV_UNKNOWN);
+ 				}
+ 
+ 				std::string version;
+@@ -2871,7 +2872,6 @@ CommitTransaction(SetAttributeFlags_t flags /* = 0 */)
+ 					// they are responsible for writing the submit event
+ 					// to the user log.
+ 					if ( vers.built_since_version( 7, 5, 4 ) ) {
+-						SpooledJobFiles::createJobSpoolDirectory(procad,PRIV_UNKNOWN);
+ 						PROC_ID job_id;
+ 						job_id.cluster = cluster_id;
+ 						job_id.proc = proc_id;
+@@ -2947,9 +2947,13 @@ GetAttributeFloat(int cluster_id, int proc_id, const char *attr_name, float *val
+ 	IdToStr(cluster_id,proc_id,key);
+ 
+ 	if( JobQueue->LookupInTransaction(key, attr_name, attr_val) ) {
+-		sscanf(attr_val, "%f", val);
++		ClassAd tmp_ad;
++		tmp_ad.AssignExpr(attr_name,attr_val);
+ 		free( attr_val );
+-		return 1;
++		if( tmp_ad.LookupFloat(attr_name, *val) == 1) {
++			return 0;
++		}
++		return -1;
+ 	}
+ 
+ 	if (!JobQueue->LookupClassAd(key, ad)) {
+@@ -2971,9 +2975,13 @@ GetAttributeInt(int cluster_id, int proc_id, const char *attr_name, int *val)
+ 	IdToStr(cluster_id,proc_id,key);
+ 
+ 	if( JobQueue->LookupInTransaction(key, attr_name, attr_val) ) {
+-		sscanf(attr_val, "%d", val);
++		ClassAd tmp_ad;
++		tmp_ad.AssignExpr(attr_name,attr_val);
+ 		free( attr_val );
+-		return 1;
++		if( tmp_ad.LookupInteger(attr_name, *val) == 1) {
++			return 0;
++		}
++		return -1;
+ 	}
+ 
+ 	if (!JobQueue->LookupClassAd(key, ad)) {
+@@ -2995,9 +3003,13 @@ GetAttributeBool(int cluster_id, int proc_id, const char *attr_name, int *val)
+ 	IdToStr(cluster_id,proc_id,key);
+ 
+ 	if( JobQueue->LookupInTransaction(key, attr_name, attr_val) ) {
+-		sscanf(attr_val, "%d", val);
++		ClassAd tmp_ad;
++		tmp_ad.AssignExpr(attr_name,attr_val);
+ 		free( attr_val );
+-		return 1;
++		if( tmp_ad.LookupBool(attr_name, *val) == 1) {
++			return 0;
++		}
++		return -1;
+ 	}
+ 
+ 	if (!JobQueue->LookupClassAd(key, ad)) {
+@@ -3025,15 +3037,13 @@ GetAttributeStringNew( int cluster_id, int proc_id, const char *attr_name,
+ 	IdToStr(cluster_id,proc_id,key);
+ 
+ 	if( JobQueue->LookupInTransaction(key, attr_name, attr_val) ) {
+-		int attr_len = strlen( attr_val );
+-		if ( attr_val[0] != '"' || attr_val[attr_len-1] != '"' ) {
+-			free( attr_val );
+-			return -1;
+-		}
+-		attr_val[attr_len - 1] = '\0';
+-		*val = strdup(&attr_val[1]);
++		ClassAd tmp_ad;
++		tmp_ad.AssignExpr(attr_name,attr_val);
+ 		free( attr_val );
+-		return 1;
++		if( tmp_ad.LookupString(attr_name, val) == 1) {
++			return 0;
++		}
++		return -1;
+ 	}
+ 
+ 	if (!JobQueue->LookupClassAd(key, ad)) {
+@@ -3060,16 +3070,14 @@ GetAttributeString( int cluster_id, int proc_id, const char *attr_name,
+ 	IdToStr(cluster_id,proc_id,key);
+ 
+ 	if( JobQueue->LookupInTransaction(key, attr_name, attr_val) ) {
+-		int attr_len = strlen( attr_val );
+-		if ( attr_val[0] != '"' || attr_val[attr_len-1] != '"' ) {
+-			free( attr_val );
+-			val = "";
+-			return -1;
+-		}
+-		attr_val[attr_len - 1] = '\0';
+-		val = attr_val + 1;
++		ClassAd tmp_ad;
++		tmp_ad.AssignExpr(attr_name,attr_val);
+ 		free( attr_val );
+-		return 1;
++		if( tmp_ad.LookupString(attr_name, val) == 1) {
++			return 0;
++		}
++		val = "";
++		return -1;
+ 	}
+ 
+ 	if (!JobQueue->LookupClassAd(key, ad)) {
+diff --git a/src/condor_scripts/Condor.pm b/src/condor_scripts/Condor.pm
+index 26b0ca8..473ee44 100755
+--- a/src/condor_scripts/Condor.pm
++++ b/src/condor_scripts/Condor.pm
+@@ -703,7 +703,7 @@ sub Monitor
+ 	# if this line is for another cluster, ignore
+ 	if ( $line =~ /^\d+\s+\(0*(\d+)\./ && $1 != $cluster )
+ 	{
+-	    debug( "log line for cluster $1, not $cluster -- ignoring...\n" ,6);
++	    debug( "log line for cluster $1, not $cluster -- ignoring...\n" ,1);
+ 	    next LINE;
+ 	}
+ 	
+@@ -713,7 +713,7 @@ sub Monitor
+ 	    $info{'cluster'} = $1;
+ 	    $info{'job'} = $2;
+ 
+-	    debug( "Saw job evicted\n" ,5);
++	    debug( "Saw job ($1.$2) evicted\n" ,1);
+ 
+ 	    # execute callback if one is registered
+ 	    &$EvictedCallback( %info )
+@@ -738,7 +738,7 @@ sub Monitor
+ 
+ 	    if( $line =~ /^\s+\(0\) Job was not checkpointed\./ )
+ 	    {
+-		debug( "job was evicted without ckpt\n" ,5);
++		debug( "job was evicted without ckpt\n" ,1);
+ 		# execute callback if one is registered
+ 		&$EvictedWithoutCheckpointCallback( %info )
+ 		    if defined $EvictedWithoutCheckpointCallback;
+@@ -746,14 +746,14 @@ sub Monitor
+ 	    }
+ 	    elsif( $line =~ /^\s+\(1\) Job was checkpointed\./ )
+ 	    {
+-		debug( "job was evicted with ckpt\n" ,5);
++		debug( "job was evicted with ckpt\n" ,1);
+ 		# execute callback if one is registered
+ 		&$EvictedWithCheckpointCallback( %info )
+ 		    if defined $EvictedWithCheckpointCallback;
+ 	    }
+ 	    elsif( $line =~ /^\s+\(0\) Job terminated and was requeued.*$/ )
+ 	    {
+-		debug( "job was evicted and requeued\n" ,5);
++		debug( "job was evicted and requeued\n" ,1);
+ 		# execute callback if one is registered
+ 		&$EvictedWithRequeueCallback( %info )
+ 		    if defined $EvictedWithRequeueCallback;
+@@ -762,7 +762,7 @@ sub Monitor
+ 	    {
+ 		debug( "parse error on line $linenum of $info{'log'}:\n" .
+ 		       "   no checkpoint message found after eviction: " .
+-		       "continuing...\n" ,5);
++		       "continuing...\n" ,1);
+ 		# re-parse line so we don't miss whatever it said
+ 		goto PARSE;
+ 	    }
+@@ -775,7 +775,7 @@ sub Monitor
+ 	    $info{'cluster'} = $1;
+ 	    $info{'job'} = $2;
+ 
+-	    debug( "Saw job terminated\n" ,5);
++	    debug( "Saw job terminated\n" ,1);
+ 
+ 	    # decrement # of queued jobs so we will know when to exit monitor
+ 	    $num_active_jobs--;
+@@ -817,11 +817,11 @@ sub Monitor
+ 	    # abnormal termination
+ 	    elsif( $line =~ /^\s+\(0\) Abnormal termination \(signal (\d+)\)/ )
+ 	    {
+-		debug( "Loading $1 as info{'signal'}\n" ,5);
++		debug( "Loading $1 as info{'signal'}\n" ,1);
+ 		$info{'signal'} = $1;
+ 		#print "keys:".join(" ",keys %info)."\n";
+ 
+-		debug( "checking for core file...\n" ,5);
++		debug( "checking for core file...\n" ,1);
+ 
+ 		# read next line to find core file
+ 		$line = <SUBMIT_LOG>;
+@@ -860,7 +860,7 @@ sub Monitor
+ 	    {
+ 		debug( "parse error on line $linenum of $info{'log'}:\n" .
+ 		       "   no termination status message found after " .
+-		       "termination: continuing...\n" ,5);
++		       "termination: continuing...\n" ,1);
+ 		# re-parse line so we don't miss whatever it said
+ 		goto PARSE;
+ 	    }
+@@ -873,7 +873,7 @@ sub Monitor
+ 	    $info{'cluster'} = $1;
+ 	    $info{'job'} = $2;
+ 
+-	    debug( "Saw Shadow Exception\n" ,5);
++	    debug( "Saw Shadow Exception\n" ,1);
+ 
+ 		if(! defined $ShadowCallback)
+ 		{
+@@ -916,7 +916,7 @@ sub Monitor
+ 	    $info{'host'} = $3;
+ 	    $info{'sinful'} = "<$3>";
+ 	    
+-	    debug( "Saw job executing\n" ,5);
++	    debug( "Saw job executing\n" ,1);
+ 
+ 	    # execute callback if one is registered
+ 	    &$ExecuteCallback( %info )
+@@ -934,7 +934,7 @@ sub Monitor
+ 	    $info{'host'} = $3;
+ 	    $info{'sinful'} = "<$3>";
+ 
+-	    debug( "Saw job submitted\n" ,5);
++	    debug( "Saw job submitted\n" ,1);
+ 	    $submit_info{'cluster'} = $1; # squirrel it away for TimedWait
+ 
+ 	    # mark that we've seen a submit so we can start watching # of jobs
+@@ -955,7 +955,7 @@ sub Monitor
+ 	    $info{'cluster'} = $1;
+ 	    $info{'job'} = $2;
+ 
+-	    debug( "Saw job abort cluster $1 job $2\n" ,5);
++	    debug( "Saw job abort cluster $1 job $2\n" ,1);
+ 
+ 	    # decrement # of queued jobs so we will know when to exit monitor
+ 	    $num_active_jobs--;
+@@ -989,7 +989,7 @@ sub Monitor
+ 
+ 		$info{'holdreason'} = $line;
+ 
+-	    debug( "Saw job held\n" ,5);
++	    debug( "Saw job held\n" ,1);
+ 
+ 	    
+ 	    # execute callback if one is registered
+@@ -1005,7 +1005,7 @@ sub Monitor
+ 	    #$info{'host'} = $3;
+ 	    #$info{'sinful'} = "<$3:$4>";
+ 	    
+-	    debug( "Saw job released\n" ,5);
++	    debug( "Saw job released\n" ,1);
+ 
+ 	    
+ 	    # execute callback if one is registered
+diff --git a/src/condor_scripts/CondorUtils.pm b/src/condor_scripts/CondorUtils.pm
+index bdd74f4..a332152 100644
+--- a/src/condor_scripts/CondorUtils.pm
++++ b/src/condor_scripts/CondorUtils.pm
+@@ -257,7 +257,7 @@ sub runcmd {
+ 		}
+ 		$sz = $#errlines;
+ 		if($sz != -1) {
+-			PrintStdOut(\@errlines);
++			PrintStdErr(\@errlines);
+ 		}
+ 		PrintFooter();
+ 	}
+diff --git a/src/condor_shadow.V6.1/baseshadow.cpp b/src/condor_shadow.V6.1/baseshadow.cpp
+index 5c3ab37..93e720d 100644
+--- a/src/condor_shadow.V6.1/baseshadow.cpp
++++ b/src/condor_shadow.V6.1/baseshadow.cpp
+@@ -73,6 +73,7 @@ BaseShadow::BaseShadow() {
+ 	m_lazy_queue_update = true;
+ 	m_cleanup_retry_tid = -1;
+ 	m_cleanup_retry_delay = 30;
++	m_RunAsNobody = false;
+ }
+ 
+ BaseShadow::~BaseShadow() {
+@@ -163,9 +164,30 @@ BaseShadow::baseInit( ClassAd *job_ad, const char* schedd_addr, const char *xfer
+ 	// handle system calls with Owner's privilege
+ // XXX this belong here?  We'll see...
+ 	if ( !init_user_ids(owner.Value(), domain.Value())) {
+-		dprintf(D_ALWAYS, "init_user_ids() failed!\n");
++		dprintf(D_ALWAYS, "init_user_ids() failed as user %s\n",owner.Value() );
+ 		// uids.C will EXCEPT when we set_user_priv() now
+ 		// so there's not much we can do at this point
++		
++#if ! defined(WIN32)
++		if ( param_boolean( "SHADOW_RUN_UNKNOWN_USER_JOBS", false ) )
++		{
++			dprintf(D_ALWAYS, "trying init_user_ids() as user nobody\n" );
++			
++			owner="nobody";
++			domain=NULL;
++			if (!init_user_ids(owner.Value(), domain.Value()))
++			{
++				dprintf(D_ALWAYS, "init_user_ids() failed!\n");
++			}
++			else
++			{
++				jobAd->Assign( ATTR_JOB_RUNAS_OWNER, "FALSE" );
++				m_RunAsNobody=true;
++				dprintf(D_ALWAYS, "init_user_ids() now running as user nobody\n");
++			}
++		}
++#endif
++
+ 	}
+ 	set_user_priv();
+ 	daemonCore->Register_Priv_State( PRIV_USER );
+@@ -287,6 +309,15 @@ void BaseShadow::config()
+ 
+ 
+ int BaseShadow::cdToIwd() {
++	int iRet =0;
++	
++#if ! defined(WIN32)
++	priv_state p;
++	
++	if (m_RunAsNobody)
++		p = set_root_priv();
++#endif
++	
+ 	if (chdir(iwd.Value()) < 0) {
+ 		int chdir_errno = errno;
+ 		dprintf(D_ALWAYS, "\n\nPath does not exist.\n"
+@@ -297,9 +328,15 @@ int BaseShadow::cdToIwd() {
+ 		                    iwd.Value(), strerror(chdir_errno));
+ 		dprintf( D_ALWAYS, "%s\n",hold_reason.Value());
+ 		holdJob(hold_reason.Value(),CONDOR_HOLD_CODE_IwdError,chdir_errno);
+-		return -1;
++		iRet = -1;
+ 	}
+-	return 0;
++	
++#if ! defined(WIN32)
++	if ( m_RunAsNobody )
++		set_priv(p);
++#endif
++	
++	return iRet;
+ }
+ 
+ 
+@@ -773,7 +810,21 @@ void BaseShadow::initUserLog()
+ 
+ 	if ( getPathToUserLog(jobAd, logfilename) ) {
+ 		result = uLog.initialize (owner.Value(), domain.Value(), logfilename.Value(), cluster, proc, 0, gjid);
++		// It is important to NOT ignore a failure to initialize the user log,
++		// since if we fail to initialize here, then all event logging 
++		// in the shadow from this point forward are effectively ignored.
++		// So if we fail to initialize the user log, put this job on hold.
++		// Future work: it would be good to pass use the error stack to 
++		// figure out -why- the initialization failed, allowing the shadow
++		// to retry automatically -vs- go on hold depending upon the details
++		// of the failure.
+ 		if ( result == false ) {
++			MyString hold_reason;
++			hold_reason.sprintf(
++				"Failed to initialize user log to %s", logfilename.Value());
++			dprintf( D_ALWAYS, "%s\n",hold_reason.Value());
++			holdJob(hold_reason.Value(),CONDOR_HOLD_CODE_UnableToInitUserLog,0);
++			// holdJob() should not return, but just in case it does EXCEPT
+ 			EXCEPT("Failed to initialize user log to %s",logfilename.Value());
+ 		}
+ 		if (jobAd->LookupBool(ATTR_ULOG_USE_XML, use_xml)
+diff --git a/src/condor_shadow.V6.1/baseshadow.h b/src/condor_shadow.V6.1/baseshadow.h
+index f4053e9..3b5d769 100644
+--- a/src/condor_shadow.V6.1/baseshadow.h
++++ b/src/condor_shadow.V6.1/baseshadow.h
+@@ -428,6 +428,7 @@ class BaseShadow : public Service
+ 	char *uidDomain;
+ 	int reconnect_ceiling;
+ 	double reconnect_e_factor;
++	bool m_RunAsNobody;
+ 
+ 	// job parameters
+ 	int cluster;
+diff --git a/src/condor_startd.V6/ResState.cpp b/src/condor_startd.V6/ResState.cpp
+index f303099..54934d9 100644
+--- a/src/condor_startd.V6/ResState.cpp
++++ b/src/condor_startd.V6/ResState.cpp
+@@ -412,6 +412,25 @@ ResState::eval( void )
+ 		break;	
+ 
+ 	case owner_state:
++			// If the dynamic slot is allocated in the owner state
++			// (e.g. because of START expression contains attributes
++			// of job ClassAd), it may never go back to Unclaimed 
++			// state. So we need to delete the dynmaic slot in owner
++			// state.
++		if( Resource::DYNAMIC_SLOT == rip->get_feature() ) {
++#if HAVE_JOB_HOOKS
++				// If we're currently fetching we can't delete
++				// ourselves. If we do when the hook returns we won't
++				// be around to handle the response.
++			if( rip->isCurrentlyFetching() ) {
++				dprintf(D_ALWAYS, "State change: Owner -> Deleted delayed for outstanding work fetch\n");
++				break;
++			}
++#endif
++			change( delete_state );
++			return TRUE; // XXX: change TRUE
++		}
++
+ 		if( ! rip->eval_is_owner() ) {
+ 			dprintf( D_ALWAYS, "State change: IS_OWNER is false\n" );
+ 			change( unclaimed_state );
+diff --git a/src/condor_starter.V6.1/CondorJavaInfo.class b/src/condor_starter.V6.1/CondorJavaInfo.class
+index 2f28c3b..893d89c 100644
+Binary files a/src/condor_starter.V6.1/CondorJavaInfo.class and b/src/condor_starter.V6.1/CondorJavaInfo.class differ
+diff --git a/src/condor_starter.V6.1/CondorJavaInfo.java b/src/condor_starter.V6.1/CondorJavaInfo.java
+index 73153e2..71d6f94 100644
+--- a/src/condor_starter.V6.1/CondorJavaInfo.java
++++ b/src/condor_starter.V6.1/CondorJavaInfo.java
+@@ -98,7 +98,7 @@ public class CondorJavaInfo {
+ 			// deal with escaped double quotes very well. This might be
+ 			// revisited in the future.
+ 			System.out.print( UnDotString(name) + " = \"" + 
+-				value.replace('"', '\'') + "\"");
++				value.replace('"', '\'').replace('\n',' ').replace('\r', ' ') + "\"");
+ 
+ 			if( newmode ) {
+ 				System.out.println(";");
+diff --git a/src/condor_starter.V6.1/jic_shadow.cpp b/src/condor_starter.V6.1/jic_shadow.cpp
+index b17cd6c..04a3cb4 100644
+--- a/src/condor_starter.V6.1/jic_shadow.cpp
++++ b/src/condor_starter.V6.1/jic_shadow.cpp
+@@ -377,8 +377,10 @@ bool JICShadow::allJobsDone( void )
+ 
+ 	r1 = JobInfoCommunicator::allJobsDone();
+ 
+-	publishJobExitAd( &update_ad );
+-	r2 = updateShadow( &update_ad, true );
++	if (!m_did_transfer) {
++		publishJobExitAd( &update_ad );
++		r2 = updateShadow( &update_ad, true );
++	}
+ 
+ 	return r1;
+ }
+diff --git a/src/condor_sysapi/CMakeLists.txt b/src/condor_sysapi/CMakeLists.txt
+index 2f2fbcf..3690c59 100644
+--- a/src/condor_sysapi/CMakeLists.txt
++++ b/src/condor_sysapi/CMakeLists.txt
+@@ -16,6 +16,7 @@
+  # 
+  ############################################################### 
+ 
++set(BENCH_LINK_LIBS "${TOOL_LINK_LIBS}")
+ 
+ file( GLOB SysApiRmvElements *_t.cpp *.t.* dhry21b* *_main.cpp )
+ 
+@@ -26,5 +27,5 @@ condor_static_lib(sysapi "${SysapiHeaderFiles};${SysapiSourceFiles}")
+ 
+ # there was a test target which was never used.
+ # it makes the most sense to hook in a UT here instead of integ test
+-condor_exe(condor_kflops "kflops_main.cpp" "${C_LIBEXEC}" "sysapi;condorapi;${TOOL_LINK_LIBS}" OFF)
+-condor_exe(condor_mips "mips_main.cpp" "${C_LIBEXEC}" "sysapi;condorapi;${TOOL_LINK_LIBS}" OFF)
++condor_exe(condor_kflops "kflops_main.cpp" ${C_LIBEXEC} "sysapi;condorapi;${BENCH_LINK_LIBS}" OFF)
++condor_exe(condor_mips "mips_main.cpp" ${C_LIBEXEC} "sysapi;condorapi;${BENCH_LINK_LIBS}" OFF)
+diff --git a/src/condor_syscall_lib/CMakeLists.txt b/src/condor_syscall_lib/CMakeLists.txt
+index 2f96684..7208da6 100644
+--- a/src/condor_syscall_lib/CMakeLists.txt
++++ b/src/condor_syscall_lib/CMakeLists.txt
+@@ -104,6 +104,20 @@ if( STD_UNIVERSE )
+ 	# now create the glorious syscall lib from various refs.
+ 	# behold the birth of frankenstein.
+ 	condor_static_lib( condorsyscall "senders.cpp;switches.cpp;${SyscallHdrs};${SyscallSrcs};${STDU_OBJS};${CKPT_REFS};${UTIL_REFS};${IO_REFS};${STDIO_REF}")
++	if (DOES_COMPRESS_CKPT)
++		# For condorzsyscall, pull in all the same objects as
++		# condorsyscall except use ZCKPT_REFS in place of
++		# CKPT_REFS
++		src_target_ref( zckpt "^.*$" ZCKPT_REFS)
++
++		# We need to compile condor-malloc.c with special preprocessor
++		# definitions.
++		src_target_ref( zckpt "malloc-condor.c" MALLOC_CONDOR_REF)
++		set_property(SOURCE ${MALLOC_CONDOR_REF} APPEND PROPERTY COMPILE_DEFINITIONS "MORECORE=condor_morecore;HAVE_MMAP=0;malloc_getpagesize=8192")
++
++		condor_static_lib( condorzsyscall "senders.cpp;switches.cpp;${SyscallHdrs};${SyscallSrcs};${STDU_OBJS};${ZCKPT_REFS};${UTIL_REFS};${IO_REFS};${STDIO_REF}")
++	endif()
++
+ 	# local library which the daemons can link without glibc tainting.
+ 	condor_static_lib( std_local_ref "senders.cpp;receivers.cpp;${CKPT_LOCAL_REFS};${SYSCALL_LOCAL_REFS}" )
+ 
+@@ -111,7 +125,10 @@ if( STD_UNIVERSE )
+ 	# part 2:
+ 	# set dependencies to ensure build dep order for parallel builds
+ 	##################################################
+-	add_dependencies( condorsyscall ckpt utils cedar stdunivio stub_gen )
++	add_dependencies( condorsyscall stub_gen )
++	if (DOES_COMPRESS_CKPT)
++		add_dependencies( condorzsyscall stub_gen )
++	endif()
+ 	add_dependencies( switches syscall_numbers stub_gen )
+ 	add_dependencies( senders syscall_numbers stub_gen )
+ 	add_dependencies( receivers syscall_numbers stub_gen )
+@@ -120,6 +137,9 @@ if( STD_UNIVERSE )
+ 	#################################################
+ 	# here we begin the install target section
+ 	install ( TARGETS condorsyscall DESTINATION ${C_LIB} )
++	if (DOES_COMPRESS_CKPT)
++		install ( TARGETS condorzsyscall DESTINATION ${C_LIB} )
++	endif()
+ 	install ( FILES ${CMAKE_CURRENT_BINARY_DIR}/condor_rt0.o DESTINATION ${C_LIB} )
+ 	install ( FILES ${LIBGCC} DESTINATION ${C_LIB} RENAME libcomp_libgcc.a )
+ 	install ( FILES ${LIBGCC_EH} DESTINATION ${C_LIB} RENAME libcomp_libgcc_eh.a )
+diff --git a/src/condor_tests/CMakeLists.txt b/src/condor_tests/CMakeLists.txt
+index 32e0264..2c746a0 100644
+--- a/src/condor_tests/CMakeLists.txt
++++ b/src/condor_tests/CMakeLists.txt
+@@ -105,6 +105,7 @@ if (BUILD_TESTS)
+ 		condor_std_exe_test(job_ckpt_io-async_std "${CMAKE_C_COMPILER}" "job_ckpt_io-async_std.c" "${STDU_LDD_FLAGS}")
+ 		condor_std_exe_test(job_ckpt_io-buffer-async_std "${CMAKE_C_COMPILER}" "job_ckpt_io-buffer-async_std.c" "${STDU_LDD_FLAGS}")
+ 		condor_std_exe_test(job_ckpt_stack_std "${CMAKE_C_COMPILER}" "job_ckpt_stack_std.c" "${STDU_LDD_FLAGS}")
++		condor_std_exe_test(job_ckpt_standalone_std "${CMAKE_C_COMPILER}" "job_ckpt_standalone_std.c" "${STDU_LDD_FLAGS}")
+ 		condor_std_exe_test(job_ckpt_floats_std "${CMAKE_C_COMPILER}" "job_ckpt_floats_std.c" "${STDU_LDD_FLAGS}")
+ 		condor_std_exe_test(job_ckpt_floats-async_std "${CMAKE_C_COMPILER}" "job_ckpt_floats-async_std.c" "${STDU_LDD_FLAGS}")
+ 		condor_std_exe_test(job_ckpt_integers_std "${CMAKE_C_COMPILER}" "job_ckpt_integers_std.c" "${STDU_LDD_FLAGS}")
+@@ -206,6 +207,7 @@ if (BUILD_TESTS)
+ 		condor_pl_test(job_ckpt_io-async_std "file I/O during async ckpt signals" "stduniv;quick;full;ckpt")
+ 		condor_pl_test(job_ckpt_io-buffer-async_std "file buffing during async ckpt/restore" "stduniv;quick;full;ckpt")
+ 		condor_pl_test(job_ckpt_stack_std "ckpt/restore function call stack" "stduniv;framework;quick;full;ckpt")
++		condor_pl_test(job_ckpt_standalone_std "standalone ckpt/restore function call stack" "stduniv;framework;quick;full;ckpt")
+ 		condor_pl_test(job_ckpt_floats_std "ckpt/restore floating point registers" "stduniv;framework;quick;full;ckpt")
+ 		condor_pl_test(job_ckpt_floats-async_std "checks floating point ops with async ckpts" "stduniv;framework;quick;full;ckpt")
+ 		condor_pl_test(job_ckpt_integers_std "ckpt/restore integer registers" "stduniv;framework;quick;full;ckpt")
+@@ -318,12 +320,16 @@ if (BUILD_TESTS)
+ 	#condor_pl_test(job_stork_file-file "Basic stork Test" "core;quick;full;quicknolink")
+ 	#condor_pl_test(job_dagman_stork_file-file "Basic stork dag Test" "core;dagman;quick;full;quicknolink")
+ 	#condor_pl_test(job_dagman_stork-remove "Basic stork dag w/remove Test" "core;dagman;quick;full;quicknolink")
+-	condor_pl_test(job_core_err_java "Java Universe: basic error test" "core;quick;full;quicknolink;java")
+-	condor_pl_test(job_core_output_java "Java Universe: basic output test" "core;quick;full;quicknolink;java")
+-	condor_pl_test(job_core_hold_java "Java Universe: basic output test" "core;quick;full;quicknolink;java")
+-	condor_pl_test(job_core_initialdir_java "Java Universe: basic output test" "core;quick;full;quicknolink;java")
+-	condor_pl_test(job_core_input_java "Java Universe: basic output test" "core;quick;full;quicknolink;java")
+-	#condor_pl_test(job_core_plus_java "Java Universe: basic output test" "core;quick;full;quicknolink;java")
++
++    if ( ENABLE_JAVA_TESTS )
++		condor_pl_test(job_core_err_java "Java Universe: basic error test" "core;quick;full;quicknolink;java")
++		condor_pl_test(job_core_output_java "Java Universe: basic output test" "core;quick;full;quicknolink;java")
++		condor_pl_test(job_core_hold_java "Java Universe: basic output test" "core;quick;full;quicknolink;java")
++		condor_pl_test(job_core_initialdir_java "Java Universe: basic output test" "core;quick;full;quicknolink;java")
++		condor_pl_test(job_core_input_java "Java Universe: basic output test" "core;quick;full;quicknolink;java")
++		#condor_pl_test(job_core_plus_java "Java Universe: basic output test" "core;quick;full;quicknolink;java")
++    endif ( ENABLE_JAVA_TESTS )
++
+ 	condor_pl_test(job_filexfer_streamout_van "Vanilla: test for streaming of output when both stream_output is true and false" "core;quick;full;quicknolink")
+ 	condor_pl_test(job_filexfer_streamerr_van "Vanilla: test for streaming of error when both stream_error is true and false" "core;quick;full;quicknolink")
+ 	#if !defined( IS_ALPHA_LINUX) && !defined(IS_HPUX10) && !defined(IS_HPUX11) && !defined(IS_IA64_LINUX_RHEL3) 
+diff --git a/src/condor_tests/job_ckpt_standalone_std.c b/src/condor_tests/job_ckpt_standalone_std.c
+new file mode 100644
+index 0000000..4c6a834
+--- /dev/null
++++ b/src/condor_tests/job_ckpt_standalone_std.c
+@@ -0,0 +1,252 @@
++/***************************************************************
++ *
++ * Copyright (C) 1990-2007, Condor Team, Computer Sciences Department,
++ * University of Wisconsin-Madison, WI.
++ * 
++ * 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.
++ *
++ ***************************************************************/
++
++#include <stdio.h>
++#include <stdlib.h>
++
++/* This program was originally the job_ckpt_stack_std.c test program.
++	It was repurposed and extended to test standalone checkpointing.
++*/
++
++/* This program analyzes the stack at run time to see if it is ok(i.e.
++	checkpointed and restored at the right boundaries). It does
++	this by calling a recursive function which allocates some
++	memory on the stack, fills it with a known value, checks to see
++	if the previous values were all correct, and then recurses to
++	do the process over again. It continues until it accumulates a
++	target size of the runtime stack(counting only the memory it
++	allocates on the stack). During these calls, it checkpoints and
++	restarts all the way checking the integrity of the run time
++	stack. In fact, when the recursion finishes, it back checks the
++	runtime stack for each frame it falls backwards. */
++
++/* XXX Right now this program only checkpoints at the deepest level and
++	then backchecks all the way. It should checkpoint more often to make
++	sure everything is being saved/restored correctly, but it eats up
++	far too much time to do it ever stack level. I need to fix it so it 
++	does it evey N stack pushes/pops. */
++
++/* This might need adjustment per OS revision */
++#define STACKSIZETARGET (1024*384) /* 384K run time stack */
++
++#define STACKINCREMENT 1024 /* bytes per allocated stack array */
++#define FALSE 0
++#define TRUE 1
++
++#include "x_fake_ckpt.h"
++
++/* This represents an activation record on the run time stack. In fact, this
++	is kept on the runtime stack along with the data it points to to really
++	make this test depend on a working stack. */
++struct Frame
++{
++	/* This represents the number stored in the array */
++	int value;
++	/* This points to a stack allocated array */
++	int *data;
++	/* This size of the stack allocates array */
++	int size;
++	/* This is null at the root of the activation records */
++	struct Frame *previous;
++};
++
++void init_data(int *data, int size, int value);
++int deepen(struct Frame *pf, int old_value);
++int is_stack_valid(struct Frame *f, int value);
++int data_valid(int *data, int size, int value);
++
++/* size of the runtime stack at various intervals */
++int g_sum = 0;
++
++/* pointer to heap allocated just before checkpoint */
++int *g_heap1 = NULL;
++/* pointer to heap allocated just after checkpoint */
++int *g_heap2 = NULL;
++int g_heap_size = (1024 * 1024 * 1); /* actually 4 Megs cause an int type */
++
++int main(void)
++{
++	/* Need to start this process as close to the start of main() as I can */
++	int data[STACKINCREMENT];
++	struct Frame f;
++	int validity;
++	int a, b, c;
++
++	init_data(data, STACKINCREMENT, 0);
++	/* the stopping condition for is_stack_valid()'s search through the
++		previous pointers. It stops when f.value is zero and the data
++		array associated with it is zero. Otherwise during the recursion value
++		increases by one for each deeper stack frame */
++	f.value = 0; 
++	f.data = &data[0];
++	f.size = STACKINCREMENT;
++	f.previous = NULL;
++	g_sum += STACKINCREMENT; /* record the fact I added to the stack */
++
++	a = is_stack_valid(&f, 0);
++	printf("Deepness Level: %d\n", 0);
++	b = deepen(&f, 0);
++	printf("Backchecking %d\n", 0), 
++	c = is_stack_valid(&f, 0);
++	validity = a && b && c;
++	if (validity == FALSE) {
++		printf("Stack failure.\n");
++		printf("FAILED\n");
++		exit(EXIT_FAILURE);
++	}
++
++	printf("Checking allocated memory heaps.\n");
++	if (data_valid(g_heap1, g_heap_size, 0xdeadbeef) == FALSE) {
++		printf("Memory heap 1 failure.\n");
++		printf("FAILED\n");
++		exit(EXIT_FAILURE);
++	}
++	if (data_valid(g_heap2, g_heap_size, 0xbeefdead) == FALSE) {
++		printf("Memory heap 2 failure.\n");
++		printf("FAILED\n");
++		exit(EXIT_FAILURE);
++	}
++
++	free(g_heap1);
++	g_heap1 = NULL;
++	free(g_heap2);
++	g_heap2 = NULL;
++
++	printf("SUCCESS\n");
++	exit(EXIT_SUCCESS);
++}
++
++/* fill the data array with a known value */
++void init_data(int *data, int size, int value)
++{
++	int i;
++	
++	for (i = 0; i < size; i++)
++	{
++		data[i] = value;
++	}
++}
++
++/* keep recursing down until I use up the amount of run time stack space I've
++	been allocated */
++int deepen(struct Frame *pf, int old_value)
++{
++	int test;
++	int data[STACKINCREMENT];
++	struct Frame f;
++	int new_value = old_value + 1;
++	int a, b;
++
++	printf("Deepness Level: %d\n", new_value);
++	init_data(data, STACKINCREMENT, new_value);
++	f.value = new_value;
++	f.data = &data[0];
++	f.size = STACKINCREMENT;
++	f.previous = pf;
++	g_sum += STACKINCREMENT; /* record the fact I added to the stack */
++
++	test = is_stack_valid(&f, new_value);
++
++	if (test == TRUE)
++	{
++		if (g_sum < STACKSIZETARGET)
++		{
++			/* recurse deeper and backcheck the results */
++				a = deepen(&f, new_value);
++				printf("Backchecking %d\n", new_value), 
++				b = is_stack_valid(&f, new_value);
++
++				return a && b;
++		}
++
++		/* allocate a chunk of memory that better be good when I come back from
++			the checkpoint */
++		g_heap1 = malloc(sizeof(int) * g_heap_size);
++		if (g_heap1 == NULL) {
++			printf("Out of memory while allocating heap1! Exiting.\n");
++			exit(EXIT_FAILURE);
++		}
++		init_data(g_heap1, g_heap_size, 0xdeadbeef);
++
++		/* save the big run time stack in a checkpoint */
++		printf("About to checkpoint....\n");
++		fflush(NULL);
++		ckpt_and_exit();
++		fflush(NULL);
++
++		printf("Returning from checkpoint....\n");
++
++		/* This *should* be true because we just checked it earlier, however
++			if it is not, we'll catch the error here. */
++		test = is_stack_valid(&f, new_value);
++
++		/* allocate another chunk of memory that better be good when I come
++			back from the checkpoint */
++		g_heap2 = malloc(sizeof(int) * g_heap_size);
++		if (g_heap2 == NULL) {
++			printf("Out of memory while allocating heap2! Exiting.\n");
++			exit(EXIT_FAILURE);
++		}
++		init_data(g_heap2, g_heap_size, 0xbeefdead);
++
++		return test;
++	}
++
++	return FALSE;
++}
++
++/* check to see of the stack frame and all previous ones are correct given
++	a decrementing value for each previous stack frame */
++int is_stack_valid(struct Frame *f, int value)
++{
++	int check;
++
++	check = data_valid(f->data, f->size, value);
++
++	if (value == 0)
++	{
++		if (check == TRUE)
++		{
++			return TRUE;
++		}
++		return FALSE;
++	}
++
++	/* check until the value is zero */
++	return is_stack_valid(f->previous, value - 1);
++}
++
++
++/* Check the data with a known value */
++int data_valid(int *data, int size, int value)
++{
++	int i;
++	
++	for (i = 0; i < size; i++)
++	{
++		if (data[i] != value)
++		{
++			return FALSE;
++		}
++	}
++
++	return TRUE;
++}
++
++
+diff --git a/src/condor_tests/job_ckpt_standalone_std.run b/src/condor_tests/job_ckpt_standalone_std.run
+new file mode 100755
+index 0000000..94fad66
+--- /dev/null
++++ b/src/condor_tests/job_ckpt_standalone_std.run
+@@ -0,0 +1,131 @@
++#!/usr/bin/env perl
++##**************************************************************
++##
++## Copyright (C) 1990-2007, Condor Team, Computer Sciences Department,
++## University of Wisconsin-Madison, WI.
++## 
++## 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.
++##
++##**************************************************************
++
++# This program runs a standalone checkpointing job and ensures that it
++# both checkpointed and resumed correctly.
++
++use CondorUtils;
++use strict;
++use warnings;
++
++my $testdesc =  'Standalone Checkpointing Stack Test';
++my $testname = "job_ckpt_standalone_std.cndr.exe";
++my $ckptfile = "job_ckpt_standalone_std.cndr.exe.ckpt.$$";
++my $ret;
++my $last;
++
++# I need to do a little work to figure out the right arguments to pass to
++# setarch.
++my $pers = `uname -m`;
++my $pers_fix;
++my $pers_token;
++
++# We need to have the right base personality to run the stduniv program
++if ($pers =~ m/i\d86/) {
++	$pers_token = "i386";
++} else {
++	$pers_token = "x86_64";
++}
++
++# Now, we need to see if we're using a setarch that accepts the pile of
++# arguments we need, or an old crusty one which doesn't take any arguments.
++# This is a heuristic. We'll assume the most modern interface first.
++$pers_fix = "setarch $pers_token -L -B -R";
++
++# Sadly setarch just fails with no output and return value 1 when it can't
++# accept command line arguments it doesn't understand. So we test it with
++# something we KNOW to return true and if this fails, setarch is borken.
++$ret = system("$pers_fix /bin/true");
++
++if ($ret == -1 || $ret & 127) {
++	print "ERROR: Something went very wrong trying to figure out setarch.\n";
++	exit 1;
++}
++if (($ret >> 8) != 0) {
++	# use old style setarch instead
++	$pers_fix = "setarch $pers_token";
++}
++
++# Now that we're done with setarch detection, get to the test itself.
++
++print "Description: $testdesc\n";
++print "Running: $testname\n";
++
++# run the test, which will self checkpoint itself.
++
++# The program better exit with SIGUSR2!
++print "Starting standalone checkpointing test. Will checkpoint to $ckptfile.\n";
++$ret = runcmd("$pers_fix ./$testname -_condor_aggravate_bugs -_condor_D_CKPT " .
++			"-_condor_D_FULLDEBUG -_condor_D_ALWAYS " .
++			"-_condor_ckpt ./$ckptfile",
++		{expect_result => SIGNAL(12)});
++
++# Check the stderr, which contains the checkpoint debug output.
++$last = pop @{$ret->{'stderr'}};
++chomp $last;
++if ($last !~ m/Ckpt exit/) {
++	print "ERROR: The last line of the checkpointing job's stderr should " .
++		"have been 'Ckpt exit', but it wasn't! Fail.\n";
++	print "FAILURE\n";
++	exit 1;
++}
++
++# Check the stdout, which contains "About to checkpoint...."
++$last = pop @{$ret->{'stdout'}};
++chomp $last;
++if ($last !~ m/About to checkpoint\.\.\.\./) {
++	print "ERROR: The last line of the checkpointing job's stdout should " .
++		"have been 'About to checkpoint....', but it wasn't! Fail.\n";
++	print "FAILURE\n";
++	exit 1;
++}
++
++# The resuming program better exit with 0!
++print "Resuming standalone checkpointing test. Will resume from $ckptfile.\n";
++$ret = runcmd("$pers_fix ./$testname -_condor_aggravate_bugs -_condor_D_CKPT " .
++			"-_condor_D_FULLDEBUG -_condor_D_ALWAYS " .
++			"-_condor_restart ./$ckptfile");
++
++# Check the stderr, which contains the resumed job debug output.
++$last = pop @{$ret->{'stderr'}};
++chomp $last;
++if ($last !~ m/About to return to user code/) {
++	print "ERROR: The last line of the resuming job's stderr should have " .
++		"been 'About to return to user code', but it wasn't! Fail.\n";
++	print "FAILURE\n";
++	exit 1;
++}
++
++# Process the stdout which contains the output of the resumed job.
++$last = pop @{$ret->{'stdout'}};
++chomp $last;
++if ($last !~ m/SUCCESS/) {
++	print "ERROR: The last line of the resuming job should have " .
++		"been 'SUCCESS', but it wasn't!. Fail.\n";
++	print "FAILURE\n";
++	exit 1;
++}
++
++print "SUCCESS\n";
++
++exit 0;
++
++
++
+diff --git a/src/condor_tools/config_val.cpp b/src/condor_tools/config_val.cpp
+index 92ee0ee..09b84ee 100644
+--- a/src/condor_tools/config_val.cpp
++++ b/src/condor_tools/config_val.cpp
+@@ -398,6 +398,12 @@ main( int argc, char* argv[] )
+ 				while (collectors->next (collector)) {
+ 					if (collector->locate() &&
+ 					    sock.connect((char*) collector->addr(), 0)) {
++						// Do something with the connection, 
++						// such that we won't end up with 
++						// noise in the collector log
++						collector->startCommand( DC_NOP, &sock, 30 );
++						sock.encode();
++						sock.end_of_message();
+ 						// If we can connect to the
+ 						// collector, then we accept
+ 						// it as valid
+diff --git a/src/condor_unit_tests/OTEST_Directory.cpp b/src/condor_unit_tests/OTEST_Directory.cpp
+index eaab0ad..3843bad 100644
+--- a/src/condor_unit_tests/OTEST_Directory.cpp
++++ b/src/condor_unit_tests/OTEST_Directory.cpp
+@@ -167,8 +167,6 @@ static MyString
+ static const char
+ 	*readme = "README";
+ 
+-static time_t current_time;
+-
+ bool OTEST_Directory(void) {
+ 	emit_object("Directory");
+ 	emit_comment("Class to iterate filenames in a subdirectory.  Given a "
+@@ -417,10 +415,6 @@ static void setup() {
+ 
+ 	// Close FILE* that was written to
+ 	cut_assert_z( fclose(file_1) );
+-	
+-	// Get the current time
+-	current_time = time(NULL);
+-
+ }
+ 
+ static void cleanup() {
+@@ -1082,10 +1076,10 @@ static bool test_get_access_time_before() {
+ 	emit_output_expected_header();
+ 	emit_retval("%d", 0);
+ 	Directory dir(original_dir.Value());
+-	time_t ret_val = dir.GetAccessTime();
++	time_t atime = dir.GetAccessTime();
+ 	emit_output_actual_header();
+-	emit_retval("%d", ret_val);
+-	if(ret_val != 0) {
++	emit_retval("%d", atime);
++	if(atime != 0) {
+ 		FAIL;
+ 	}
+ 	PASS;
+@@ -1101,10 +1095,10 @@ static bool test_get_access_time_empty() {
+ 	emit_retval("%d", 0);
+ 	Directory dir(empty_dir.Value());
+ 	dir.Next();
+-	time_t ret_val = dir.GetAccessTime();
++	time_t atime = dir.GetAccessTime();
+ 	emit_output_actual_header();
+-	emit_retval("%d", ret_val);
+-	if(ret_val != 0) {
++	emit_retval("%d", atime);
++	if(atime != 0) {
+ 		FAIL;
+ 	}
+ 	PASS;
+@@ -1118,28 +1112,33 @@ static bool test_get_access_time_valid() {
+ 	Directory dir(original_dir.Value());
+ 	const char* next = dir.Next();
+ 	emit_param("Current File", "%s", next);
+-	time_t ret_val = dir.GetAccessTime();
++	time_t atime = dir.GetAccessTime();
+ 	emit_output_actual_header();
+-	emit_retval("%d", ret_val);
+-	if(ret_val == 0) {
++	emit_retval("%d", atime);
++	if(atime == 0) {
+ 		FAIL;
+ 	}
+ 	PASS;
+ }
+ 
+ static bool test_get_access_time_close() {
+-	emit_test("Test that GetAccessTime() returns a time close to the current "
+-		"time for a file that was just created.");
++	emit_test("Test that GetAccessTime() returns the same time as stat() for a "
++		"file that was just created.");
+ 	emit_input_header();
+ 	emit_param("Directory", "%s", tmp_dir.Value());
+ 	Directory dir(tmp_dir.Value());
+ 	const char* next = dir.Next();
+ 	emit_param("Current File", "%s", next);
+-	time_t ret_val = dir.GetAccessTime();
++	struct stat st;
++	MyString file;
++	file.sprintf("%s%c%s", tmp_dir.Value(), DIR_DELIM_CHAR, next);
++	stat(file.Value(), &st);
++	emit_output_expected_header();
++	emit_retval("%d", st.st_atime);
++	time_t atime = dir.GetAccessTime();
+ 	emit_output_actual_header();
+-	emit_retval("%d", ret_val);
+-	emit_param("Current Time", "%d", current_time);
+-	if(abs(current_time - ret_val) > 10) {
++	emit_retval("%d", atime);
++	if(atime != st.st_atime) {
+ 		FAIL;
+ 	}
+ 	PASS;
+@@ -1153,10 +1152,10 @@ static bool test_get_modify_time_before() {
+ 	emit_output_expected_header();
+ 	emit_retval("%d", 0);
+ 	Directory dir(original_dir.Value());
+-	time_t ret_val = dir.GetModifyTime();
++	time_t mtime = dir.GetModifyTime();
+ 	emit_output_actual_header();
+-	emit_retval("%d", ret_val);
+-	if(ret_val != 0) {
++	emit_retval("%d", mtime);
++	if(mtime != 0) {
+ 		FAIL;
+ 	}
+ 	PASS;
+@@ -1172,10 +1171,10 @@ static bool test_get_modify_time_empty() {
+ 	emit_retval("%d", 0);
+ 	Directory dir(empty_dir.Value());
+ 	dir.Next();
+-	time_t ret_val = dir.GetModifyTime();
++	time_t mtime = dir.GetModifyTime();
+ 	emit_output_actual_header();
+-	emit_retval("%d", ret_val);
+-	if(ret_val != 0) {
++	emit_retval("%d", mtime);
++	if(mtime != 0) {
+ 		FAIL;
+ 	}
+ 	PASS;
+@@ -1189,10 +1188,10 @@ static bool test_get_modify_time_valid() {
+ 	Directory dir(original_dir.Value());
+ 	const char* next = dir.Next();
+ 	emit_param("Current File", "%s", next);
+-	time_t ret_val = dir.GetModifyTime();
++	time_t mtime = dir.GetModifyTime();
+ 	emit_output_actual_header();
+-	emit_retval("%d", ret_val);
+-	if(ret_val == 0) {
++	emit_retval("%d", mtime);
++	if(mtime == 0) {
+ 		FAIL;
+ 	}
+ 	PASS;
+@@ -1206,11 +1205,16 @@ static bool test_get_modify_time_close() {
+ 	Directory dir(tmp_dir.Value());
+ 	const char* next = dir.Next();
+ 	emit_param("Current File", "%s", next);
+-	time_t ret_val = dir.GetModifyTime();
++	struct stat st;
++	MyString file;
++	file.sprintf("%s%c%s", tmp_dir.Value(), DIR_DELIM_CHAR, next);
++	stat(file.Value(), &st);
++	emit_output_expected_header();
++	emit_retval("%d", st.st_mtime);
++	time_t mtime = dir.GetModifyTime();
+ 	emit_output_actual_header();
+-	emit_retval("%d", ret_val);
+-	emit_param("Current Time", "%d", current_time);
+-	if(abs(current_time - ret_val) > 10) {
++	emit_retval("%d", mtime);
++	if(mtime != st.st_mtime) {
+ 		FAIL;
+ 	}
+ 	PASS;
+@@ -1224,10 +1228,10 @@ static bool test_get_create_time_before() {
+ 	emit_output_expected_header();
+ 	emit_retval("%d", 0);
+ 	Directory dir(original_dir.Value());
+-	time_t ret_val = dir.GetCreateTime();
++	time_t ctime = dir.GetCreateTime();
+ 	emit_output_actual_header();
+-	emit_retval("%d", ret_val);
+-	if(ret_val != 0) {
++	emit_retval("%d", ctime);
++	if(ctime != 0) {
+ 		FAIL;
+ 	}
+ 	PASS;
+@@ -1243,10 +1247,10 @@ static bool test_get_create_time_empty() {
+ 	emit_retval("%d", 0);
+ 	Directory dir(empty_dir.Value());
+ 	dir.Next();
+-	time_t ret_val = dir.GetCreateTime();
++	time_t ctime = dir.GetCreateTime();
+ 	emit_output_actual_header();
+-	emit_retval("%d", ret_val);
+-	if(ret_val != 0) {
++	emit_retval("%d", ctime);
++	if(ctime != 0) {
+ 		FAIL;
+ 	}
+ 	PASS;
+@@ -1260,10 +1264,10 @@ static bool test_get_create_time_valid() {
+ 	Directory dir(original_dir.Value());
+ 	const char* next = dir.Next();
+ 	emit_param("Current File", "%s", next);
+-	time_t ret_val = dir.GetCreateTime();
++	time_t ctime = dir.GetCreateTime();
+ 	emit_output_actual_header();
+-	emit_retval("%d", ret_val);
+-	if(ret_val == 0) {
++	emit_retval("%d", ctime);
++	if(ctime == 0) {
+ 		FAIL;
+ 	}
+ 	PASS;
+@@ -1277,11 +1281,16 @@ static bool test_get_create_time_close() {
+ 	Directory dir(tmp_dir.Value());
+ 	const char* next = dir.Next();
+ 	emit_param("Current File", "%s", next);
+-	time_t ret_val = dir.GetCreateTime();
++	struct stat st;
++	MyString file;
++	file.sprintf("%s%c%s", tmp_dir.Value(), DIR_DELIM_CHAR, next);
++	stat(file.Value(), &st);
++	emit_output_expected_header();
++	emit_retval("%d", st.st_ctime);
++	time_t ctime = dir.GetCreateTime();
+ 	emit_output_actual_header();
+-	emit_retval("%d", ret_val);
+-	emit_param("Current Time", "%d", current_time);
+-	if(abs(current_time - ret_val) > 10) {
++	emit_retval("%d", ctime);
++	if(ctime != st.st_ctime) {
+ 		FAIL;
+ 	}
+ 	PASS;
+diff --git a/src/condor_unit_tests/OTEST_StatInfo.cpp b/src/condor_unit_tests/OTEST_StatInfo.cpp
+index 7f62e3a..5052829 100644
+--- a/src/condor_unit_tests/OTEST_StatInfo.cpp
++++ b/src/condor_unit_tests/OTEST_StatInfo.cpp
+@@ -133,8 +133,6 @@ static MyString
+ static const char
+ 	*readme = "README";
+ 
+-static time_t current_time;
+-
+ static int fd;
+ 
+ bool OTEST_StatInfo(void) {
+@@ -254,18 +252,18 @@ bool OTEST_StatInfo(void) {
+ static void setup() {
+ 	int tmp_fd;
+ 
+-	//Get the current working directory
++	// Get the current working directory
+ 	cut_assert_true( condor_getcwd(original_dir) );
+ 	original_dir += DIR_DELIM_CHAR;
+ 	
+-	//Directory strings
++	// Directory strings
+ 	cut_assert_true( tmp.sprintf("testtmp%d", getpid()) );
+ 	
+-	//Make a temporary directory to test
++	// Make a temporary directory to test
+ 	cut_assert_z( mkdir(tmp.Value(), 0700) );
+ 	cut_assert_z( chdir(tmp.Value()) );
+ 	
+-	//Store some directories
++	// Store some directories
+ 	cut_assert_true( condor_getcwd(tmp_dir) );
+ 	tmp_dir += DIR_DELIM_CHAR;
+ 	cut_assert_true( empty_dir.sprintf("%s%s%c", tmp_dir.Value(), "empty_dir",
+@@ -277,11 +275,11 @@ static void setup() {
+ 	cut_assert_true( file_dir.sprintf("%s%s%c", full_dir.Value(), "full_file",
+ 					 DIR_DELIM_CHAR) );
+ 	
+-	//Put some files/directories in there
++	// Put some files/directories in there
+ 	cut_assert_z( mkdir("empty_dir", 0700) );
+ 	cut_assert_z( mkdir("full_dir", 0700) );
+ 	
+-	//Create some symbolic links
++	// Create some symbolic links
+ #ifndef WIN32
+ 	MyString link;
+ 	cut_assert_true( link.sprintf("%s%s", full_dir.Value(), "full_file") );
+@@ -301,24 +299,21 @@ static void setup() {
+ 	cut_assert_z( mkdir("link_dir", 0700) );
+ 	fd = cut_assert_gez( safe_open_wrapper("empty_file", O_RDWR | O_CREAT) );
+ 
+-	//Add some text
++	// Add some text
+ 	FILE* file_1 = safe_fopen_wrapper("full_file", "w+");
+ 	cut_assert_not_null( file_1 );
+ 	cut_assert_gz( fprintf(file_1, "This is some text!") );
+ 	cut_assert_z( chdir("..") );
+ 	
+-	//Get back to original directory
++	// Get back to original directory
+ 	cut_assert_z( chdir("..") );
+ 
+-	//Close FILE* that were written to
++	// Close FILE* that were written to
+ 	cut_assert_z( fclose(file_1) );
+-	
+-	//Get the current time
+-	current_time = time(NULL);
+ }
+ 
+ static void cleanup() {
+-	//Remove the created files/directories/symlinks
++	// Remove the created files/directories/symlinks
+ 	cut_assert_z( chdir(tmp.Value()) );
+ 	cut_assert_z( rmdir("empty_dir") );
+ 	cut_assert_z( remove("symlink_file") );
+@@ -326,7 +321,7 @@ static void cleanup() {
+ 	cut_assert_z( chdir("full_dir") );
+ 	cut_assert_z( rmdir("link_dir") );
+ 	
+-	//Just in case any of these weren't removed...
++	// Just in case any of these weren't removed...
+ 	remove("empty_file");
+ 	remove("full_file");
+ 	remove("executable_file");
+@@ -863,27 +858,32 @@ static bool test_get_access_time_not_exist() {
+ 	emit_output_expected_header();
+ 	emit_retval("%d", 0);
+ 	StatInfo info("DoesNotExist", "DoesNotExist");
+-	time_t time = info.GetAccessTime();
++	time_t atime = info.GetAccessTime();
+ 	emit_output_actual_header();
+-	emit_retval("%d", time);
+-	if(time != 0) {
++	emit_retval("%d", atime);
++	if(atime != 0) {
+ 		FAIL;
+ 	}
+ 	PASS;
+ }
+ 
+ static bool test_get_access_time_file() {
+-	emit_test("Test that GetAccessTime() returns a time close to the current "
+-		"time for a file that was just created.");
++	emit_test("Test that GetAccessTime() returns the same time as stat() for a "
++		"file that was just created.");
+ 	emit_input_header();
+ 	emit_param("Directory Path", "%s", full_dir.Value());
+ 	emit_param("File Name", "empty_file");
++	struct stat st;
++	MyString file;
++	file.sprintf("%s%c%s", full_dir.Value(), DIR_DELIM_CHAR, "empty_file");
++	stat(file.Value(), &st);
++	emit_output_expected_header();
++	emit_retval("%d", st.st_atime);
+ 	StatInfo info(full_dir.Value(), "empty_file");
+-	time_t time = info.GetAccessTime();
++	time_t atime = info.GetAccessTime();
+ 	emit_output_actual_header();
+-	emit_retval("%d", time);
+-	emit_param("Current Time", "%d", current_time);
+-	if(abs(current_time - time) > 10) {
++	emit_retval("%d", atime);
++	if(atime != st.st_atime) {
+ 		FAIL;
+ 	}
+ 	PASS;
+@@ -902,61 +902,76 @@ static bool test_get_access_time_file_old() {
+ 	emit_output_expected_header();
+ 	emit_retval("%d", st.st_atime);
+ 	StatInfo info(original_dir.Value(), readme);
+-	time_t time = info.GetAccessTime();
++	time_t atime = info.GetAccessTime();
+ 	emit_output_actual_header();
+-	emit_retval("%d", time);
+-	if(time != st.st_atime) {
++	emit_retval("%d", atime);
++	if(atime != st.st_atime) {
+ 		FAIL;
+ 	}
+ 	PASS;
+ }
+ 
+ static bool test_get_access_time_dir() {
+-	emit_test("Test that GetAccessTime() returns a time close to the current "
+-		"time for a directory that was just created.");
++	emit_test("Test that GetAccessTime() returns the same time as stat() for a"
++		" directory that was just created.");
+ 	emit_input_header();
+ 	emit_param("Directory Path", "%s", tmp_dir.Value());
+ 	emit_param("File Name", "full_dir");
++	struct stat st;
++	MyString file;
++	file.sprintf("%s%c%s", tmp_dir.Value(), DIR_DELIM_CHAR, "full_dir");
++	stat(file.Value(), &st);
++	emit_output_expected_header();
++	emit_retval("%d", st.st_atime);
+ 	StatInfo info(tmp_dir.Value(), "full_dir");
+-	time_t time = info.GetAccessTime();
++	time_t atime = info.GetAccessTime();
+ 	emit_output_actual_header();
+-	emit_retval("%d", time);
+-	emit_param("Current Time", "%d", current_time);
+-	if(abs(current_time - time) > 10) {
++	emit_retval("%d", atime);
++	if(atime != st.st_atime) {
+ 		FAIL;
+ 	}
+ 	PASS;
+ }
+ 
+ static bool test_get_access_time_symlink_file() {
+-	emit_test("Test that GetAccessTime() returns a time close to the current "
+-		"time for a symlink to a file that was just created.");
++	emit_test("Test that GetAccessTime() returns the same time as stat() for a "
++		"symlink to a file that was just created.");
+ 	emit_input_header();
+ 	emit_param("Directory Path", "%s", tmp_dir.Value());
+ 	emit_param("File Name", "symlink_file");
++	struct stat st;
++	MyString file;
++	file.sprintf("%s%c%s", tmp_dir.Value(), DIR_DELIM_CHAR, "symlink_file");
++	stat(file.Value(), &st);
++	emit_output_expected_header();
++	emit_retval("%d", st.st_atime);
+ 	StatInfo info(tmp_dir.Value(), "symlink_file");
+-	time_t time = info.GetAccessTime();
++	time_t atime = info.GetAccessTime();
+ 	emit_output_actual_header();
+-	emit_retval("%d", time);
+-	emit_param("Current Time", "%d", current_time);
+-	if(abs(current_time - time) > 10) {
++	emit_retval("%d", atime);
++	if(atime != st.st_atime) {
+ 		FAIL;
+ 	}
+ 	PASS;
+ }
+ 
+ static bool test_get_access_time_symlink_dir() {
+-	emit_test("Test that GetAccessTime() returns a time close to the current "
+-		"time for a symlink to a directory that was just created.");
++	emit_test("Test that GetAccessTime() returns the same time as stat() for a "
++		"symlink to a directory that was just created.");
+ 	emit_input_header();
+ 	emit_param("Directory Path", "%s", tmp_dir.Value());
+ 	emit_param("File Name", "symlink_dir");
++	struct stat st;
++	MyString file;
++	file.sprintf("%s%c%s", tmp_dir.Value(), DIR_DELIM_CHAR, "symlink_dir");
++	stat(file.Value(), &st);
++	emit_output_expected_header();
++	emit_retval("%d", st.st_atime);
+ 	StatInfo info(tmp_dir.Value(), "symlink_dir");
+-	time_t time = info.GetAccessTime();
++	time_t atime = info.GetAccessTime();
+ 	emit_output_actual_header();
+-	emit_retval("%d", time);
+-	emit_param("Current Time", "%d", current_time);
+-	if(abs(current_time - time) > 10) {
++	emit_retval("%d", atime);
++	if(atime != st.st_atime) {
+ 		FAIL;
+ 	}
+ 	PASS;
+@@ -971,27 +986,32 @@ static bool test_get_modify_time_not_exist() {
+ 	emit_output_expected_header();
+ 	emit_retval("%d", 0);
+ 	StatInfo info("DoesNotExist", "DoesNotExist");
+-	time_t time = info.GetModifyTime();
++	time_t mtime = info.GetModifyTime();
+ 	emit_output_actual_header();
+-	emit_retval("%d", time);
+-	if(time != 0) {
++	emit_retval("%d", mtime);
++	if(mtime != 0) {
+ 		FAIL;
+ 	}
+ 	PASS;
+ }
+ 
+ static bool test_get_modify_time_file() {
+-	emit_test("Test that GetModifyTime() returns a time close to the current "
+-		"time for a file that was just created.");
++	emit_test("Test that GetModifyTime() returns the same time as stat() for a "
++		"file that was just created.");
+ 	emit_input_header();
+ 	emit_param("Directory Path", "%s", full_dir.Value());
+ 	emit_param("File Name", "empty_file");
++	struct stat st;
++	MyString file;
++	file.sprintf("%s%c%s", full_dir.Value(), DIR_DELIM_CHAR, "empty_file");
++	stat(file.Value(), &st);
++	emit_output_expected_header();
++	emit_retval("%d", st.st_mtime);
+ 	StatInfo info(full_dir.Value(), "empty_file");
+-	time_t time = info.GetModifyTime();
++	time_t mtime = info.GetModifyTime();
+ 	emit_output_actual_header();
+-	emit_retval("%d", time);
+-	emit_param("Current Time", "%d", current_time);
+-	if(abs(current_time - time) > 10) {
++	emit_retval("%d", mtime);
++	if(mtime != st.st_mtime) {
+ 		FAIL;
+ 	}
+ 	PASS;
+@@ -1010,61 +1030,76 @@ static bool test_get_modify_time_file_old() {
+ 	emit_output_expected_header();
+ 	emit_retval("%d", st.st_mtime);
+ 	StatInfo info(original_dir.Value(), readme);
+-	time_t time = info.GetModifyTime();
++	time_t mtime = info.GetModifyTime();
+ 	emit_output_actual_header();
+-	emit_retval("%d", time);
+-	if(time != st.st_mtime) {
++	emit_retval("%d", mtime);
++	if(mtime != st.st_mtime) {
+ 		FAIL;
+ 	}
+ 	PASS;
+ }
+ 
+ static bool test_get_modify_time_dir() {
+-	emit_test("Test that GetModifyTime() returns a time close to the current "
+-		"time for a directory that was just created.");
++	emit_test("Test that GetModifyTime() returns the same time as stat() for a "
++		"directory that was just created.");
+ 	emit_input_header();
+ 	emit_param("Directory Path", "%s", tmp_dir.Value());
+ 	emit_param("File Name", "full_dir");
++	struct stat st;
++	MyString file;
++	file.sprintf("%s%c%s", tmp_dir.Value(), DIR_DELIM_CHAR, "full_dir");
++	stat(file.Value(), &st);
++	emit_output_expected_header();
++	emit_retval("%d", st.st_mtime);
+ 	StatInfo info(tmp_dir.Value(), "full_dir");
+-	time_t time = info.GetModifyTime();
++	time_t mtime = info.GetModifyTime();
+ 	emit_output_actual_header();
+-	emit_retval("%d", time);
+-	emit_param("Current Time", "%d", current_time);
+-	if(abs(current_time - time) > 10) {
++	emit_retval("%d", mtime);
++	if(mtime != st.st_mtime) {
+ 		FAIL;
+ 	}
+ 	PASS;
+ }
+ 
+ static bool test_get_modify_time_symlink_file() {
+-	emit_test("Test that GetModifyTime() returns a time close to the current "
+-		"time for a symlink to a file that was just created.");
++	emit_test("Test that GetModifyTime() returns the same time as stat() for a "
++		"symlink to a file that was just created.");
+ 	emit_input_header();
+ 	emit_param("Directory Path", "%s", tmp_dir.Value());
+ 	emit_param("File Name", "symlink_file");
++	struct stat st;
++	MyString file;
++	file.sprintf("%s%c%s", tmp_dir.Value(), DIR_DELIM_CHAR, "symlink_file");
++	stat(file.Value(), &st);
++	emit_output_expected_header();
++	emit_retval("%d", st.st_mtime);
+ 	StatInfo info(tmp_dir.Value(), "symlink_file");
+-	time_t time = info.GetModifyTime();
++	time_t mtime = info.GetModifyTime();
+ 	emit_output_actual_header();
+-	emit_retval("%d", time);
+-	emit_param("Current Time", "%d", current_time);
+-	if(abs(current_time - time) > 10) {
++	emit_retval("%d", mtime);
++	if(mtime != st.st_mtime) {
+ 		FAIL;
+ 	}
+ 	PASS;
+ }
+ 
+ static bool test_get_modify_time_symlink_dir() {
+-	emit_test("Test that GetModifyTime() returns a time close to the current "
+-		"time for a symlink to a directory that was just created.");
++	emit_test("Test that GetModifyTime() returns the same time as stat() for a "
++		"symlink to a directory that was just created.");
+ 	emit_input_header();
+ 	emit_param("Directory Path", "%s", tmp_dir.Value());
+ 	emit_param("File Name", "symlink_dir");
++	struct stat st;
++	MyString file;
++	file.sprintf("%s%c%s", tmp_dir.Value(), DIR_DELIM_CHAR, "symlink_dir");
++	stat(file.Value(), &st);
++	emit_output_expected_header();
++	emit_retval("%d", st.st_mtime);
+ 	StatInfo info(tmp_dir.Value(), "symlink_dir");
+-	time_t time = info.GetModifyTime();
++	time_t mtime = info.GetModifyTime();
+ 	emit_output_actual_header();
+-	emit_retval("%d", time);
+-	emit_param("Current Time", "%d", current_time);
+-	if(abs(current_time - time) > 10) {
++	emit_retval("%d", mtime);
++	if(mtime != st.st_mtime) {
+ 		FAIL;
+ 	}
+ 	PASS;
+@@ -1079,27 +1114,32 @@ static bool test_get_create_time_not_exist() {
+ 	emit_output_expected_header();
+ 	emit_retval("%d", 0);
+ 	StatInfo info("DoesNotExist", "DoesNotExist");
+-	time_t time = info.GetCreateTime();
++	time_t ctime = info.GetCreateTime();
+ 	emit_output_actual_header();
+-	emit_retval("%d", time);
+-	if(time != 0) {
++	emit_retval("%d", ctime);
++	if(ctime != 0) {
+ 		FAIL;
+ 	}
+ 	PASS;
+ }
+ 
+ static bool test_get_create_time_file() {
+-	emit_test("Test that GetCreateTime() returns a time close to the current "
+-		"time for a file that was just created.");
++	emit_test("Test that GetCreateTime() returns the same time as stat() for a "
++		"file that was just created.");
+ 	emit_input_header();
+ 	emit_param("Directory Path", "%s", full_dir.Value());
+ 	emit_param("File Name", "empty_file");
++	struct stat st;
++	MyString file;
++	file.sprintf("%s%c%s", full_dir.Value(), DIR_DELIM_CHAR, "empty_file");
++	stat(file.Value(), &st);
++	emit_output_expected_header();
++	emit_retval("%d", st.st_ctime);
+ 	StatInfo info(full_dir.Value(), "empty_file");
+-	time_t time = info.GetCreateTime();
++	time_t ctime = info.GetCreateTime();
+ 	emit_output_actual_header();
+-	emit_retval("%d", time);
+-	emit_param("Current Time", "%d", current_time);
+-	if(abs(current_time - time) > 10) {
++	emit_retval("%d", ctime);
++	if(ctime != st.st_ctime) {
+ 		FAIL;
+ 	}
+ 	PASS;
+@@ -1118,61 +1158,76 @@ static bool test_get_create_time_file_old() {
+ 	emit_output_expected_header();
+ 	emit_retval("%d", st.st_ctime);
+ 	StatInfo info(original_dir.Value(), readme);
+-	time_t time = info.GetCreateTime();
++	time_t ctime = info.GetCreateTime();
+ 	emit_output_actual_header();
+-	emit_retval("%d", time);
+-	if(time != st.st_ctime) {
++	emit_retval("%d", ctime);
++	if(ctime != st.st_ctime) {
+ 		FAIL;
+ 	}
+ 	PASS;
+ }
+ 
+ static bool test_get_create_time_dir() {
+-	emit_test("Test that GetCreateTime() returns a time close to the current "
+-		"time for a directory that was just created.");
++	emit_test("Test that GetCreateTime() returns the same time as stat() for a "
++		"directory that was just created.");
+ 	emit_input_header();
+ 	emit_param("Directory Path", "%s", tmp_dir.Value());
+ 	emit_param("File Name", "full_dir");
++	struct stat st;
++	MyString file;
++	file.sprintf("%s%c%s", tmp_dir.Value(), DIR_DELIM_CHAR, "full_dir");
++	stat(file.Value(), &st);
++	emit_output_expected_header();
++	emit_retval("%d", st.st_ctime);
+ 	StatInfo info(tmp_dir.Value(), "full_dir");
+-	time_t time = info.GetCreateTime();
++	time_t ctime = info.GetCreateTime();
+ 	emit_output_actual_header();
+-	emit_retval("%d", time);
+-	emit_param("Current Time", "%d", current_time);
+-	if(abs(current_time - time) > 10) {
++	emit_retval("%d", ctime);
++	if(ctime != st.st_ctime) {
+ 		FAIL;
+ 	}
+ 	PASS;
+ }
+ 
+ static bool test_get_create_time_symlink_file() {
+-	emit_test("Test that GetCreateTime() returns a time close to the current "
+-		"time for a symlink to a file that was just created.");
++	emit_test("Test that GetCreateTime() returns the same time as stat() for a "
++		"symlink to a file that was just created.");
+ 	emit_input_header();
+ 	emit_param("Directory Path", "%s", tmp_dir.Value());
+ 	emit_param("File Name", "symlink_file");
++	struct stat st;
++	MyString file;
++	file.sprintf("%s%c%s", tmp_dir.Value(), DIR_DELIM_CHAR, "symlink_file");
++	stat(file.Value(), &st);
++	emit_output_expected_header();
++	emit_retval("%d", st.st_ctime);
+ 	StatInfo info(tmp_dir.Value(), "symlink_file");
+-	time_t time = info.GetCreateTime();
++	time_t ctime = info.GetCreateTime();
+ 	emit_output_actual_header();
+-	emit_retval("%d", time);
+-	emit_param("Current Time", "%d", current_time);
+-	if(abs(current_time - time) > 10) {
++	emit_retval("%d", ctime);
++	if(ctime != st.st_ctime) {
+ 		FAIL;
+ 	}
+ 	PASS;
+ }
+ 
+ static bool test_get_create_time_symlink_dir() {
+-	emit_test("Test that GetCreateTime() returns a time close to the current "
+-		"time for a symlink to a directory that was just created.");
++	emit_test("Test that GetCreateTime() returns the same time as stat() for a "
++		"symlink to a directory that was just created.");
+ 	emit_input_header();
+ 	emit_param("Directory Path", "%s", tmp_dir.Value());
+ 	emit_param("File Name", "symlink_dir");
++	struct stat st;
++	MyString file;
++	file.sprintf("%s%c%s", tmp_dir.Value(), DIR_DELIM_CHAR, "symlink_dir");
++	stat(file.Value(), &st);
++	emit_output_expected_header();
++	emit_retval("%d", st.st_ctime);
+ 	StatInfo info(tmp_dir.Value(), "symlink_dir");
+-	time_t time = info.GetCreateTime();
++	time_t ctime = info.GetCreateTime();
+ 	emit_output_actual_header();
+-	emit_retval("%d", time);
+-	emit_param("Current Time", "%d", current_time);
+-	if(abs(current_time - time) > 10) {
++	emit_retval("%d", ctime);
++	if(ctime != st.st_ctime) {
+ 		FAIL;
+ 	}
+ 	PASS;
+diff --git a/src/condor_unit_tests/emit.cpp b/src/condor_unit_tests/emit.cpp
+index c79c0a2..9e6559e 100644
+--- a/src/condor_unit_tests/emit.cpp
++++ b/src/condor_unit_tests/emit.cpp
+@@ -55,6 +55,7 @@ void Emitter::init(bool failures_printed, bool successes_printed) {
+ 	set_debug_flags("D_ALWAYS");
+ 	set_debug_flags("D_NOHEADER");
+ 	config();
++	global_start = time(0);
+ }
+ 
+ /* Formats and prints a parameter and its value as a sub-point of input,
+@@ -78,7 +79,9 @@ void Emitter::emit_retval(const char* format, va_list args) {
+ /* Emits a heading and the function string.
+  */
+ void Emitter::emit_function(const char* function) {
+-	test_buf->sprintf("---------------------\nFUNCTION:  %s\n", function);
++	test_buf->sprintf("\n\n------------------------------------------------------"
++		"--------------------------\nFUNCTION:  %s\n---------------------------"
++		"-----------------------------------------------------\n", function);
+ 	if(print_failures && print_successes) {
+ 		dprintf(D_ALWAYS, "%s", test_buf->Value());
+ 		test_buf->setChar(0, '\0');
+@@ -88,7 +91,9 @@ void Emitter::emit_function(const char* function) {
+ /* Emits a heading and the object string.
+  */
+ void Emitter::emit_object(const char* object) {
+-	test_buf->sprintf("---------------------\nOBJECT:  %s\n", object);
++	test_buf->sprintf("\n------------------------------------------------------"
++		"--------------------------\nOBJECT:  %s\n-----------------------------"
++		"---------------------------------------------------\n", object);
+ 	if(print_failures && print_successes) {
+ 		dprintf(D_ALWAYS, "%s", test_buf->Value());
+ 		test_buf->setChar(0, '\0');
+@@ -146,7 +151,7 @@ void Emitter::emit_output_actual_header() {
+  * be called via the PASS macro."
+  */
+ void Emitter::emit_result_success(int line) {
+-	buf->sprintf_cat("RESULT:  SUCCESS, test passed at line %d (%ld seconds)\n", 
++	buf->sprintf_cat("RESULT:  SUCCESS, test passed at line %d (%ld seconds)\n",
+ 		line, time(0) - start);
+ 	print_now_if_possible();
+ 	if(print_successes && !print_failures) {
+@@ -210,14 +215,15 @@ void Emitter::emit_test_break() {
+ }
+ 
+ void Emitter::emit_summary() {
+-	dprintf(D_ALWAYS, "\n---------------------\nSUMMARY:\n");
+-	dprintf(D_ALWAYS, "========\n");
++	dprintf(D_ALWAYS, "\n========\nSUMMARY:\n========\n");
+ 	dprintf(D_ALWAYS, "    Total Tested Objects:  %d\n", object_tests);
+ 	dprintf(D_ALWAYS, "    Total Unit Tests:      %d\n", function_tests);
+ 	dprintf(D_ALWAYS, "    Passed Unit Tests:     %d\n", passed_tests);
+ 	dprintf(D_ALWAYS, "    Failed Unit Tests:     %d\n", failed_tests);
+ 	dprintf(D_ALWAYS, "    Aborted Unit Tests:    %d\n", aborted_tests);
+ 	dprintf(D_ALWAYS, "    Skipped Unit Tests:    %d\n", skipped_tests);
++	dprintf(D_ALWAYS, "    Total Time Taken:      %ld seconds\n",
++			time(0) - global_start);
+ }
+ 
+ void Emitter::print_result_failure() {
+diff --git a/src/condor_unit_tests/emit.h b/src/condor_unit_tests/emit.h
+index 193642f..514e843 100644
+--- a/src/condor_unit_tests/emit.h
++++ b/src/condor_unit_tests/emit.h
+@@ -52,7 +52,7 @@ private:
+ 
+ 	MyString *buf, *test_buf;
+ 
+-	time_t start;
++	time_t start, global_start;
+ 
+ 	void print_result_failure(void);
+ 	
+diff --git a/src/condor_unit_tests/unit_test_utils.h b/src/condor_unit_tests/unit_test_utils.h
+index 6dde910..2a3591a 100644
+--- a/src/condor_unit_tests/unit_test_utils.h
++++ b/src/condor_unit_tests/unit_test_utils.h
+@@ -210,4 +210,4 @@ struct timezone
+ };
+ 
+ int gettimeofday(struct timeval *tv, struct timezone *tz);
+-#endif
+\ No newline at end of file
++#endif
+diff --git a/src/condor_utils/CMakeLists.txt b/src/condor_utils/CMakeLists.txt
+index a9b6322..8e94ea9 100644
+--- a/src/condor_utils/CMakeLists.txt
++++ b/src/condor_utils/CMakeLists.txt
+@@ -47,7 +47,7 @@ endif()
+ condor_static_lib( condorapi "${ApiSrcs}" )
+ add_dependencies( condorapi utils )
+ 
+-if (NOT WINDOWS)
++if (HAVE_LIBDL)
+ 	set(APILIBDEP dl)
+ endif()
+ 
+diff --git a/src/condor_utils/access_desktop.WINDOWS.cpp b/src/condor_utils/access_desktop.WINDOWS.cpp
+index c192332..6b4a328 100644
+--- a/src/condor_utils/access_desktop.WINDOWS.cpp
++++ b/src/condor_utils/access_desktop.WINDOWS.cpp
+@@ -341,7 +341,7 @@ void RemoveSid(PSID *psid)
+ BOOL AddTheAceWindowStation(HWINSTA hwinsta, PSID psid)
+ {
+ 
+-	ACCESS_ALLOWED_ACE   *pace;
++	ACCESS_ALLOWED_ACE  *pace      = NULL;
+ 	ACL_SIZE_INFORMATION aclSizeInfo;
+ 	BOOL                 bDaclExist;
+ 	BOOL                 bDaclPresent;
+@@ -351,7 +351,7 @@ BOOL AddTheAceWindowStation(HWINSTA hwinsta, PSID psid)
+ 	DWORD                dwSidSize = 0;
+ 	DWORD                dwSdSizeNeeded;
+ 	PACL                 pacl;
+-	PACL                 pNewAcl;
++	PACL                 pNewAcl   = NULL;
+ 	PSECURITY_DESCRIPTOR psd       = NULL;
+ 	PSECURITY_DESCRIPTOR psdNew    = NULL;
+ 	PVOID                pTempAce;
+@@ -805,7 +805,7 @@ BOOL AddTheAceDesktop(HDESK hdesk, PSID psid)
+ 	DWORD                dwSidSize = 0;
+ 	DWORD                dwSdSizeNeeded;
+ 	PACL                 pacl;
+-	PACL                 pNewAcl;
++	PACL                 pNewAcl   = NULL;
+ 	PSECURITY_DESCRIPTOR psd       = NULL;
+ 	PSECURITY_DESCRIPTOR psdNew    = NULL;
+ 	PVOID                pTempAce;
+diff --git a/src/condor_utils/classad_log.cpp b/src/condor_utils/classad_log.cpp
+index 90c4893..6872a63 100644
+--- a/src/condor_utils/classad_log.cpp
++++ b/src/condor_utils/classad_log.cpp
+@@ -28,11 +28,9 @@
+ #include "util_lib_proto.h"
+ #include "classad_merge.h"
+ 
+-#if defined(WANT_CONTRIB) && defined(WITH_MANAGEMENT)
+ #if defined(HAVE_DLOPEN)
+ #include "ClassAdLogPlugin.h"
+ #endif
+-#endif
+ 
+ // explicitly instantiate the HashTable template
+ 
+@@ -721,11 +719,9 @@ LogNewClassAd::Play(void *data_structure)
+ 	ad->SetTargetTypeName(targettype);
+ 	result = table->insert(HashKey(key), ad);
+ 
+-#if defined(WANT_CONTRIB) && defined(WITH_MANAGEMENT)
+ #if defined(HAVE_DLOPEN)
+ 	ClassAdLogPluginManager::NewClassAd(key);
+ #endif
+-#endif
+ 
+ 	return result;
+ }
+@@ -791,11 +787,9 @@ LogDestroyClassAd::Play(void *data_structure)
+ 		return -1;
+ 	}
+ 
+-#if defined(WANT_CONTRIB) && defined(WITH_MANAGEMENT)
+ #if defined(HAVE_DLOPEN)
+ 	ClassAdLogPluginManager::DestroyClassAd(key);
+ #endif
+-#endif
+ 
+ 	delete ad;
+ 	return table->remove(hkey);
+@@ -841,11 +835,9 @@ LogSetAttribute::Play(void *data_structure)
+ 	rval = ad->AssignExpr(name, value);
+ 	ad->SetDirtyFlag(name, is_dirty);
+ 
+-#if defined(WANT_CONTRIB) && defined(WITH_MANAGEMENT)
+ #if defined(HAVE_DLOPEN)
+ 	ClassAdLogPluginManager::SetAttribute(key, name, value);
+ #endif
+-#endif
+ 
+ 	return rval;
+ }
+@@ -940,11 +932,9 @@ LogDeleteAttribute::Play(void *data_structure)
+ 	if (table->lookup(HashKey(key), ad) < 0)
+ 		return -1;
+ 
+-#if defined(WANT_CONTRIB) && defined(WITH_MANAGEMENT)
+ #if defined(HAVE_DLOPEN)
+ 	ClassAdLogPluginManager::DeleteAttribute(key, name);
+ #endif
+-#endif
+ 
+ 	return ad->Delete(name);
+ }
+diff --git a/src/condor_utils/classad_newold.cpp b/src/condor_utils/classad_newold.cpp
+index 7edd7fc..4f43e1c 100644
+--- a/src/condor_utils/classad_newold.cpp
++++ b/src/condor_utils/classad_newold.cpp
+@@ -23,7 +23,6 @@
+ #include "classad_newold.h"
+ #include "condor_new_classads.h"
+ #define WANT_CLASSAD_NAMESPACE
+-#undef open
+ #include "classad/classad_distribution.h"
+ 
+ bool new_to_old(classad::ClassAd & src, ClassAd & dst)
+diff --git a/src/condor_utils/compat_classad.cpp b/src/condor_utils/compat_classad.cpp
+index 203be06..c6c48e4 100644
+--- a/src/condor_utils/compat_classad.cpp
++++ b/src/condor_utils/compat_classad.cpp
+@@ -2172,8 +2172,19 @@ _GetReferences(classad::ExprTree *tree,
+ 	classad::References ext_refs_set;
+ 	classad::References int_refs_set;
+ 	classad::References::iterator set_itr;
+-	GetExternalReferences(tree, ext_refs_set, true);
+-	GetInternalReferences(tree, int_refs_set, true);
++
++	bool ok = true;
++	if( !GetExternalReferences(tree, ext_refs_set, true) ) {
++		ok = false;
++	}
++	if( !GetInternalReferences(tree, int_refs_set, true) ) {
++		ok = false;
++	}
++	if( !ok ) {
++		dprintf(D_FULLDEBUG,"warning: failed to get all attribute references in ClassAd (perhaps caused by circular reference).\n");
++		dPrint(D_FULLDEBUG);
++		dprintf(D_FULLDEBUG,"End of offending ad.\n");
++	}
+ 
+ 		// We first process the references and save results in
+ 		// final_*_refs_set.  The processing may hit duplicates that
+diff --git a/src/condor_utils/directory.WINDOWS.cpp b/src/condor_utils/directory.WINDOWS.cpp
+index e3e7058..6c9a54a 100644
+--- a/src/condor_utils/directory.WINDOWS.cpp
++++ b/src/condor_utils/directory.WINDOWS.cpp
+@@ -2300,7 +2300,7 @@ CreateUserDirectory ( HANDLE user_token, PCSTR directory ) {
+         }
+ 
+         if ( acl ) {
+-             GlobalFree ( acl );
++             delete[] acl;
+         }
+ 
+     }
+diff --git a/src/condor_utils/directory.cpp b/src/condor_utils/directory.cpp
+index f07e538..c6b08f9 100644
+--- a/src/condor_utils/directory.cpp
++++ b/src/condor_utils/directory.cpp
+@@ -50,6 +50,20 @@
+ 	return i;
+ // -----------------------------------------------
+ 
++DeleteFileLater::DeleteFileLater (const char * _name)
++{
++    filename = _name?strdup(_name):NULL;
++}
++
++DeleteFileLater::~DeleteFileLater ()
++{
++	if (filename) {
++        if (unlink(filename)) {  // conditional to defeat prefast warning.
++            dprintf(D_ALWAYS, "DeleteFileLater of %s failed err=%d", filename, errno);
++        }
++		free (filename);
++	}
++}
+ 
+ 
+ #ifndef WIN32
+@@ -616,8 +630,7 @@ Directory::setOwnerPriv( const char* path, si_error_t &err)
+ 			if (err == SINoFile) {
+ 				dprintf(D_FULLDEBUG, "Directory::setOwnerPriv() -- path %s does not exist (yet).\n", path);
+ 			} else {
+-				dprintf( D_ALWAYS, "Directory::setOwnerPriv() -- failed to "
+-					 "find owner of %s\n", path );
++				dprintf( D_ALWAYS, "Directory::setOwnerPriv() -- failed to find owner of %s\n", path );
+ 			}
+ 			return PRIV_UNKNOWN;
+ 		}
+diff --git a/src/condor_utils/directory.h b/src/condor_utils/directory.h
+index ddc46f3..8114ad2 100644
+--- a/src/condor_utils/directory.h
++++ b/src/condor_utils/directory.h
+@@ -255,16 +255,8 @@ private:
+ // when the class instance is deleted
+ class DeleteFileLater {
+  public:
+-	DeleteFileLater (const char * _name) {
+-		filename = _name?strdup(_name):NULL;
+-	}
+-
+-	~DeleteFileLater () {
+-		if (filename) {
+-			unlink(filename);
+-			free (filename);
+-		}
+-	}
++	DeleteFileLater (const char * _name);
++	~DeleteFileLater ();
+  protected:
+ 	char * filename;
+ };
+diff --git a/src/condor_utils/dprintf.cpp b/src/condor_utils/dprintf.cpp
+index fa9749e..a1bc148 100644
+--- a/src/condor_utils/dprintf.cpp
++++ b/src/condor_utils/dprintf.cpp
+@@ -1328,6 +1328,11 @@ lock_or_mutex_file(int fd, LOCK_TYPE type, int do_block)
+ 	char *ptr = NULL;
+ 	char mutex_name[MAX_PATH];
+ 
++		// If we're trying to lock NUL, just return success early
++	if (strcasecmp(DebugLock, "NUL") == 0) {
++		return 0;
++	}
++
+ 	if ( use_kernel_mutex == FALSE ) {
+ 			// use a filesystem lock
+ 		return lock_file_plain(fd,type,do_block);
+@@ -1341,10 +1346,6 @@ lock_or_mutex_file(int fd, LOCK_TYPE type, int do_block)
+ 		// starving to get the lock.  The Win32 mutex object,
+ 		// on the other hand, is FIFO --- thus starvation is avoided.
+ 
+-		// If we're trying to lock NUL, just return success early
+-	if (strcasecmp(DebugLock, "NUL") == 0) {
+-		return 0;
+-	}
+ 
+ 		// first, open a handle to the mutex if we haven't already
+ 	if ( debug_win32_mutex == NULL && DebugLock ) {
+diff --git a/src/condor_utils/file_lock.cpp b/src/condor_utils/file_lock.cpp
+index d2ac4ea..b2a013e 100644
+--- a/src/condor_utils/file_lock.cpp
++++ b/src/condor_utils/file_lock.cpp
+@@ -513,6 +513,7 @@ FileLock::obtain( LOCK_TYPE t )
+ // their current position.  The lesson here is don't use fseeks and lseeks
+ // interchangeably...
+ 	int		status = -1;
++	int saved_errno;
+ 
+ 	if ( m_use_kernel_mutex == -1 ) {
+ 		m_use_kernel_mutex = param_boolean_int("FILE_LOCK_VIA_MUTEX", TRUE);
+@@ -538,6 +539,7 @@ FileLock::obtain( LOCK_TYPE t )
+ 			// This will help narrow down where the delay is coming from.
+ 		time_t before = time(NULL);
+ 		status = lock_file( m_fd, t, m_blocking );
++		saved_errno = errno;
+ 		time_t after = time(NULL);
+ 		if ( (after - before) > 5 ) {
+ 			dprintf( D_FULLDEBUG,
+@@ -594,7 +596,7 @@ FileLock::obtain( LOCK_TYPE t )
+ 	}
+ 	if ( status != 0 ) {
+ 		dprintf( D_ALWAYS, "FileLock::obtain(%d) failed - errno %d (%s)\n",
+-	                t, errno, strerror(errno) );
++	                t, saved_errno, strerror(saved_errno) );
+ 	}
+ 	else {
+ 		UtcTime	now( true );
+@@ -688,8 +690,8 @@ FileLock::CreateHashName(const char *orig, bool useDefault)
+ 	char *temp_filename;
+ 	int c;
+ 	
+-#if defined(_POSIX_PATH_MAX) && !defined(WIN32)
+-	char *buffer = new char[_POSIX_PATH_MAX];
++#if defined(PATH_MAX) && !defined(WIN32)
++	char *buffer = new char[PATH_MAX];
+ 	temp_filename = realpath(orig, buffer);
+ 	if (temp_filename == NULL) {
+ 		temp_filename = new char[strlen(orig)+1];
+diff --git a/src/condor_utils/lock_file.unix.cpp b/src/condor_utils/lock_file.unix.cpp
+index e38291a..d2c7b4a 100644
+--- a/src/condor_utils/lock_file.unix.cpp
++++ b/src/condor_utils/lock_file.unix.cpp
+@@ -21,6 +21,16 @@
+ #include "condor_config.h"
+ #include "condor_debug.h"
+ #include "file_lock.h"
++#include "condor_random_num.h"
++
++/* Declare some static variables here that are initialized by lock_file() and
++ * used by lock_file_plain(). We do this song and dance because we want to 
++ * initialize these variables by invoking various Condor library functions,
++ * like our randomization functions, and invoking those functions from
++ * lock_file_plain() is not permitted due to deadlock and/or threading reasons
++ */
++static unsigned int _lock_file_usleep_time = 0;
++static unsigned int _lock_file_num_retries = 0;
+ 
+ /*
+   Lock a file. This version is used for all unices. The windows version
+@@ -35,6 +45,8 @@ lock_file_plain( int fd, LOCK_TYPE type, int do_block )
+ {
+ 	struct flock	f;
+ 	int				cmd;
++	int rc, saved_errno;
++	unsigned int num_retries = 0;
+ 
+ 	if( do_block ) {
+ 		cmd = F_SETLKW;		/* blocking */
+@@ -64,33 +76,95 @@ lock_file_plain( int fd, LOCK_TYPE type, int do_block )
+ 		return -1;
+ 	}
+ 
+-		/* be signal safe */
+-	while( fcntl(fd,cmd,&f) < 0 ) {
+-		switch (errno) {
++		/* Call fcntl */
++	rc =  fcntl(fd,cmd,&f);
++	saved_errno = errno;
++
++		/* Deal with EINTR by retrying if in non-blocking mode */
++	while ( !do_block && rc < 0  && saved_errno == EINTR ) 
++	{
++		rc =  fcntl(fd,cmd,&f);
++		saved_errno = errno;
++	}
++
++		/* Deal w/ temporary errors by retrying if in blocking mode */
++	while ( do_block && rc < 0 && num_retries < _lock_file_num_retries ) 
++	{
++		struct timeval timer;
++		timer.tv_sec = 0;
++		timer.tv_usec = _lock_file_usleep_time;
++		switch (saved_errno) {
++				// for these errors, just retry the system call 
++				// immediately, don't increment number of retries.
+ 			case EINTR:
+-				// this just means we were interrupted, not
+-				// necessarily that we failed.
+ 				break;
++
++				// for these errors, retry the system call a limited
++				// number of times, and after waiting a 
++				// fraction of a second.
++			case ENOLCK:
++			case EACCES:
++			case EAGAIN:
++				num_retries++;
++				// do a platform independent usleep via select()
++				select(0,NULL,NULL,NULL,&timer);
++				break;
++
++				// anything else is not an errno indicative
++				// of a temporary condition, so break out of the 
++				// while loop.
+ 			default:
+-				return -1;
++				num_retries = _lock_file_num_retries;
++				continue;
+ 		}
++		
++		rc =  fcntl(fd,cmd,&f);
++		saved_errno = errno;
++	}
++
++	if ( rc < 0 ) {
++		errno = saved_errno;
++		return -1;
++	} else {
++		return 0;
+ 	}
+-	return 0;
+ }
+ 
+ int
+ lock_file( int fd, LOCK_TYPE type, int do_block )
+ {
+ 	int rc;
++	int saved_errno;
++	static bool initialized = false;
++
++	if ( !initialized ) {
++		initialized = true;
++		char *subsys = param("SUBSYSTEM");
++		if ( subsys && strcmp(subsys,"SCHEDD")==0 ) {
++			// If we are the schedd, retry early and often.
++			// usleep time averages to 1/20 of a second, and
++			// keep trying on average for 20 seconds.
++			_lock_file_usleep_time = get_random_uint() % 100000;
++			_lock_file_num_retries = 20 * 20;
++		} else {
++			// If we are not the schedd (eg we are the shadow), we
++			// can be less agressive. usleep an average of a second, try
++			// for 5 minutes.
++			_lock_file_usleep_time = get_random_uint() % 2000000;
++			_lock_file_num_retries = 60 * 5;
++		}
++		if (subsys) free(subsys);
++	}
+ 
+ 	rc = lock_file_plain( fd, type, do_block );
++	saved_errno = errno;
+ 
+ 	/* now, fcntl should work accross nfs.  but, due to bugs in some
+ 	   implementations (*cough* linux *cough*) it sometimes fails with
+ 	   errno 37 (ENOLCK).  if this happens we check the config to see
+ 	   if we should report this as an error.   -zmiller  07/15/02
+ 	   */
+-	if ( rc == -1 && errno == ENOLCK ) {
++	if ( rc == -1 && saved_errno == ENOLCK ) {
+ 		char* p = param("IGNORE_NFS_LOCK_ERRORS");
+ 		char  val = 'N';
+ 
+@@ -103,11 +177,20 @@ lock_file( int fd, LOCK_TYPE type, int do_block )
+ 				// pretend there was no error.
+ 			dprintf ( D_FULLDEBUG, "Ignoring error ENOLCK on fd %i\n", fd );
+ 			return 0;
+-		} else {
+-			errno = ENOLCK;
+-			return rc;
+ 		}
+ 	}
+ 
++	if ( rc == -1 )
++	{
++		dprintf( D_ALWAYS, "lock_file returning ERROR, errno=%d (%s)\n",
++				saved_errno, strerror(saved_errno) );
++#if 0  // in v7.6.0, we cannot risk EXCEPTing, but do so in v7.7.0
++		if (saved_errno == EDEADLK || saved_errno == EFAULT) {
++			EXCEPT("lock_file failed with errno %d, should never happen!",saved_errno);
++		}
++#endif
++		errno = saved_errno;
++	}
++
+ 	return rc;
+ }
+diff --git a/src/condor_utils/param_info.in b/src/condor_utils/param_info.in
+index 6a0f573..1a06e61 100644
+--- a/src/condor_utils/param_info.in
++++ b/src/condor_utils/param_info.in
+@@ -596,7 +596,7 @@ id=559
+ 
+ [GSI_DAEMON_DIRECTORY]
+ aliases=
+-default=/etc/grid-security/
++default=
+ version=0.0.0
+ range=.*
+ state=default
+@@ -3558,7 +3558,7 @@ id=189
+ 
+ [CREATE_CORE_FILES]
+ aliases=
+-default=false
++default=
+ version=0.0.0
+ range=.*
+ state=default
+@@ -9481,7 +9481,7 @@ id=555
+ 
+ [GRIDMAP]
+ aliases=
+-default=$(GSI_DAEMON_DIRECTORY)/grid-mapfile
++default=
+ version=0.0.0
+ range=.*
+ state=default
+@@ -9497,7 +9497,7 @@ id=555
+ 
+ [GSI_DAEMON_TRUSTED_CA_DIR]
+ aliases=
+-default=$(GSI_DAEMON_DIRECTORY)/certificates
++default=
+ version=0.0.0
+ range=.*
+ state=default
+@@ -10151,3 +10151,20 @@ usage=
+ url=
+ tags=
+ id=601
++
++[SHADOW_RUN_UNKNOWN_USER_JOBS]
++aliases=
++default=false
++version=0.0.0
++range=.*
++state=default
++type=bool
++is_macro=false
++reconfig=false
++customization=seldom
++friendly_name=Shadow Run Unknown User Jobs
++usage=
++url=
++tags=shadow
++id=602
++
+diff --git a/src/condor_utils/perm.WINDOWS.cpp b/src/condor_utils/perm.WINDOWS.cpp
+index fd545ea..4dec99c 100644
+--- a/src/condor_utils/perm.WINDOWS.cpp
++++ b/src/condor_utils/perm.WINDOWS.cpp
+@@ -102,7 +102,7 @@ int perm::get_permissions( const char *file_name, ACCESS_MASK &AccessRights ) {
+ 		&pSD_length_needed			// address of required size of buffer
+ 		) ) {
+ 		dprintf(D_ALWAYS, "perm::GetFileSecurity(%s) failed (err=%d)\n", file_name, GetLastError());
+-		delete pSD;
++		delete[] pSD;
+ 		return -1;
+ 	}
+ 	
+@@ -114,7 +114,7 @@ int perm::get_permissions( const char *file_name, ACCESS_MASK &AccessRights ) {
+ 		&acl_defaulted					// address of flag for default disc. ACL
+ 		) ) {
+ 		dprintf(D_ALWAYS, "perm::GetSecurityDescriptorDacl failed (file=%s err=%d)\n", file_name, GetLastError());
+-		delete pSD;
++		delete[] pSD;
+ 		return -1;
+ 	}
+ 	
+@@ -134,7 +134,7 @@ int perm::get_permissions( const char *file_name, ACCESS_MASK &AccessRights ) {
+ 	// first get the number of ACEs in the ACL
+ 		if (! GetAclInformation( pacl,		// acl to get info from
+ 								acl_info,	// buffer to receive info
+-								24,			// size in bytes of buffer
++								sizeof(acl_info),  // size in bytes of buffer
+ 								AclSizeInformation // class of info to retrieve
+ 								) ) {
+ 			dprintf(D_ALWAYS, "Perm::GetAclInformation failed with error %d\n", GetLastError() );
+@@ -439,10 +439,8 @@ int perm::userInAce ( const LPVOID cur_ace, const char *account, const char *dom
+ 		char* builtin = getBuiltinDomainName();
+ 		char* nt_authority = getNTAuthorityDomainName();
+ 
+-		
+-		int success = GetComputerName( computerName, &nameLength );
+-		
+-		if (! success ) {
++		BOOL bSuccess = GetComputerName( computerName, &nameLength );
++		if ( ! bSuccess ) {
+ 			// this should never happen
+ 			dprintf(D_ALWAYS, "perm::GetComputerName failed: (Err: %d)", GetLastError());
+ 			result = -1; // failure
+diff --git a/src/condor_utils/stl_string_utils.cpp b/src/condor_utils/stl_string_utils.cpp
+index 230796a..237bb6d 100644
+--- a/src/condor_utils/stl_string_utils.cpp
++++ b/src/condor_utils/stl_string_utils.cpp
+@@ -44,7 +44,7 @@ bool operator>=(const MyString& L, const std::string& R) { return R <= L.Value()
+ bool operator>=(const std::string& L, const MyString& R) { return L >= R.Value(); }
+ 
+ 
+-int sprintf(std::string& s, const char* format, va_list pargs) {
++int vsprintf(std::string& s, const char* format, va_list pargs) {
+     char fixbuf[STL_STRING_UTILS_FIXBUF];
+     const int fixlen = sizeof(fixbuf)/sizeof(fixbuf[0]);
+ 	int n;
+@@ -105,7 +105,7 @@ int sprintf(std::string& s, const char* format, va_list pargs) {
+ int sprintf(std::string& s, const char* format, ...) {
+     va_list args;
+     va_start(args, format);
+-    int r = sprintf(s, format, args);
++    int r = vsprintf(s, format, args);
+     va_end(args);
+     return r;
+ }
+@@ -115,7 +115,7 @@ int sprintf(MyString& s, const char* format, ...) {
+     std::string t;
+     va_start(args, format);
+     // this gets me the sprintf-standard return value (# chars printed)
+-    int r = sprintf(t, format, args);
++    int r = vsprintf(t, format, args);
+     va_end(args);
+     assign(s, t);
+     return r;
+@@ -125,7 +125,7 @@ int sprintf_cat(std::string& s, const char* format, ...) {
+     va_list args;
+     std::string t;
+     va_start(args, format);
+-    int r = sprintf(t, format, args);
++    int r = vsprintf(t, format, args);
+     va_end(args);
+     s += t;
+     return r;
+@@ -135,7 +135,7 @@ int sprintf_cat(MyString& s, const char* format, ...) {
+     va_list args;
+     std::string t;
+     va_start(args, format);
+-    int r = sprintf(t, format, args);
++    int r = vsprintf(t, format, args);
+     va_end(args);
+     s += t.c_str();
+     return r;
+diff --git a/src/condor_utils/store_cred.cpp b/src/condor_utils/store_cred.cpp
+index 0bc7711..162d6ae 100644
+--- a/src/condor_utils/store_cred.cpp
++++ b/src/condor_utils/store_cred.cpp
+@@ -282,7 +282,7 @@ char* getStoredCredential(const char *username, const char *domain)
+ 		return NULL;
+ 	}
+ 
+-	if ( _snprintf(pw, 511, "%S", w_pw) < 0 ) {
++	if ( _snprintf(pw, sizeof(pw), "%S", w_pw) < 0 ) {
+ 		return NULL;
+ 	}
+ 
+@@ -922,7 +922,7 @@ read_from_keyboard(char* buf, int maxlength, bool echo) {
+ 	//Down convert the input into ASCII.
+ 	int converted = WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, wbuffer, -1, buf, maxlength, NULL, NULL);
+ 
+-	delete wbuffer;
++	delete[] wbuffer;
+ #endif
+ 
+ 	return TRUE;
+diff --git a/src/cream_gahp/cream_gahp_server.cpp b/src/cream_gahp/cream_gahp_server.cpp
+index a09186e..b35d914 100644
+--- a/src/cream_gahp/cream_gahp_server.cpp
++++ b/src/cream_gahp/cream_gahp_server.cpp
+@@ -1348,7 +1348,7 @@ int thread_cream_job_status( Request **reqlist )
+ 			 it != reqids.end(); it++ ) {
+ 
+ 			char *msg = escape_spaces(ex.what());
+-			enqueue_result( (*it) + " CREAM_Job_Start\\ Error:\\ " + msg );
++			enqueue_result( (*it) + " CREAM_Job_Status\\ Error:\\ " + msg );
+ 			free(msg);
+ 		}
+ 		return 1;
diff --git a/condor.spec b/condor.spec
index 12adb6b..6314e01 100644
--- a/condor.spec
+++ b/condor.spec
@@ -1,7 +1,9 @@
+%define tarball_version 7.6.0
+
 Summary: Condor: High Throughput Computing
 Name: condor
-Version: 7.6.0
-Release: 1%{?dist}
+Version: 7.6.1
+Release: 0.1%{?dist}
 License: ASL 2.0
 Group: Applications/System
 URL: http://www.cs.wisc.edu/condor/
@@ -32,7 +34,7 @@ Source0: condor-7.6.0-327697-RH.tar.gz
 Source1: generate-tarball.sh
 Patch0: condor_config.generic.patch
 Patch3: chkconfig_off.patch
-Patch6: log_lock_run.patch
+Patch4: 7.6.1-catch_up.patch
 
 BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
 
@@ -49,10 +51,12 @@ BuildRequires: bind-utils
 BuildRequires: m4
 BuildRequires: autoconf
 BuildRequires: libX11-devel
+#BuildRequires: %_includedir/libdeltacloud/libdeltacloud.h
 
 Requires: gsoap >= 2.7.12
 Requires: mailx
 Requires: python >= 2.2
+Requires: condor-classads = %{version}-%{release}
 
 Requires(pre): shadow-utils
 
@@ -88,11 +92,34 @@ completion.
 #Headers and libraries for interacting with Condor and its components.
 
 
+#%package qmf
+#Summary: Condor QMF components
+#Group: Applications/System
+#Requires: %name = %version-%release
+##Requires: qmf >= %{qmf_version}
+#Requires: python-qmf >= 0.7.946106
+#Requires: condor-classads = %{version}-%{release}
+#Obsoletes: condor-qmf-plugins
+#
+#%description qmf
+#Components to connect Condor to the QMF management bus.
+
+
+%package aviary
+Summary: Condor Aviary components
+Group: Applications/System
+Requires: %name = %version-%release
+Requires: condor-classads = %{version}-%{release}
+
+%description aviary
+Components to provide simplified WS interface to Condor.
+
+
 %package kbdd
 Summary: Condor Keyboard Daemon
 Group: Applications/System
 Requires: %name = %version-%release
-Requires: libX11
+Requires: condor-classads = %{version}-%{release}
 
 %description kbdd
 The condor_kbdd monitors logged in X users for activity. It is only
@@ -104,6 +131,8 @@ determine console idle time.
 Summary: Condor's VM Gahp
 Group: Applications/System
 Requires: %name = %version-%release
+Requires: libvirt
+Requires: condor-classads = %{version}-%{release}
 
 %description vm-gahp
 The condor_vm-gahp enables the Virtual Machine Universe feature of
@@ -111,6 +140,55 @@ Condor. The VM Universe uses libvirt to start and control VMs under
 Condor's Startd.
 
 
+#%package deltacloud-gahp
+#Summary: Condor's Deltacloud Gahp
+#Group: Applications/System
+#Requires: %name = %version-%release
+#
+#%description deltacloud-gahp
+#The deltacloud_gahp enables Condor's ability to manage jobs run on
+#resources exposed by the deltacloud API.
+
+
+%package classads
+Summary: Condor's classified advertisement language
+Group: Development/Libraries
+Obsoletes: classads <= 1.0.8
+Obsoletes: classads-static <= 1.0.8
+
+%description classads
+Classified Advertisements (classads) are the lingua franca of
+Condor. They are used for describing jobs, workstations, and other
+resources. They are exchanged by Condor processes to schedule
+jobs. They are logged to files for statistical and debugging
+purposes. They are used to enquire about current state of the system.
+
+A classad is a mapping from attribute names to expressions. In the
+simplest cases, the expressions are simple constants (integer,
+floating point, or string). A classad is thus a form of property
+list. Attribute expressions can also be more complicated. There is a
+protocol for evaluating an attribute expression of a classad vis a vis
+another ad. For example, the expression "other.size > 3" in one ad
+evaluates to true if the other ad has an attribute named size and the
+value of that attribute is (or evaluates to) an integer greater than
+three. Two classads match if each ad has an attribute requirements
+that evaluates to true in the context of the other ad. Classad
+matching is used by the Condor central manager to determine the
+compatibility of jobs and workstations where they may be run.
+
+
+%package classads-devel
+Summary: Headers for Condor's classified advertisement language
+Group: Development/System
+Requires: %name-classads = %version-%release
+Requires: pcre-devel
+Obsoletes: classads-devel <= 1.0.8
+
+%description classads-devel
+Header files for Condor's ClassAd Library, a powerful and flexible,
+semi-structured representation of data.
+
+
 %pre
 getent group condor >/dev/null || groupadd -r condor
 getent passwd condor >/dev/null || \
@@ -120,18 +198,36 @@ exit 0
 
 
 %prep
-%setup -q -n %{name}-%{version}
+%setup -q -n %{name}-%{tarball_version}
 
 %patch0 -p1
 %patch3 -p1
-%patch6 -p1
+%patch4 -p1
 
 # fix errant execute permissions
 find src -perm /a+x -type f -name "*.[Cch]" -exec chmod a-x {} \;
 
 
 %build
-%cmake
+%cmake -DNO_PHONE_HOME:BOOL=TRUE \
+       -DHAVE_BACKFILL:BOOL=FALSE \
+       -DHAVE_BOINC:BOOL=FALSE \
+       -DWITH_GSOAP:BOOL=FALSE \
+       -DWITH_POSTGRESQL:BOOL=FALSE \
+       -DHAVE_KBDD:BOOL=TRUE \
+       -DHAVE_HIBERNATION:BOOL=TRUE \
+       -DWANT_LEASE_MANAGER:BOOL=FALSE \
+       -DWANT_HDFS:BOOL=FALSE \
+       -DWANT_QUILL:BOOL=FALSE \
+       -DWITH_ZLIB:BOOL=FALSE \
+       -DWANT_CONTRIB:BOOL=ON \
+       -DWITH_MANAGEMENT:BOOL=FALSE \
+       -DWITH_AVIARY:BOOL=TRUE \
+       -DWITH_TRIGGERD:BOOL=FALSE \
+       -DWANT_FULL_DEPLOYMENT:BOOL=FALSE \
+       -DWANT_GLEXEC:BOOL=FALSE \
+       -DWITH_LIBDELTACLOUD:BOOL=FALSE \
+       -DWITH_GLOBUS:BOOL=FALSE
 make %{?_smp_mflags}
 
 
@@ -150,6 +246,16 @@ make install DESTDIR=%{buildroot}
 # The install target puts etc/ under usr/, let's fix that.
 mv %{buildroot}/usr/etc %{buildroot}/%{_sysconfdir}
 
+populate %_sysconfdir/condor %{buildroot}/%{_usr}/lib/condor_ssh_to_job_sshd_config_template
+
+# Things in /usr/lib really belong in /usr/share/condor
+populate %{_datadir}/condor %{buildroot}/%{_usr}/lib/*
+# Except for libclassad
+populate %{_libdir}/ %{buildroot}/%{_datadir}/condor/libclassad.so*
+rm -f %{buildroot}/%{_datadir}/condor/libclassads.a
+
+populate %{_libdir}/condor/plugins %{buildroot}/%{_usr}/libexec/*-plugin.so
+
 # It is proper to put Condor specific libexec binaries under libexec/condor/
 populate %_libexecdir/condor %{buildroot}/usr/libexec/*
 
@@ -175,9 +281,24 @@ sed -e "s:^LIB\s*=.*:LIB = \$(RELEASE_DIR)/$LIB/condor:" \
   %{buildroot}/etc/examples/condor_config.generic \
   > %{buildroot}/%{_sysconfdir}/condor/condor_config
 
+# Install the basic configuration, a Personal Condor config. Allows for
+# yum install condor + service condor start and go.
+mkdir -m0755 %{buildroot}/%{_sysconfdir}/condor/config.d
+cp %{buildroot}/etc/examples/condor_config.local %{buildroot}/%{_sysconfdir}/condor/config.d/00personal_condor.config
+
+# Install condor-qmf's base plugin configuration
+#populate %_sysconfdir/condor/config.d %{buildroot}/etc/examples/60condor-qmf.config
+# Install condor-aviary's base plugin configuration
+populate %_sysconfdir/condor/config.d %{buildroot}/etc/examples/61aviary.config
+
+mkdir -p %{buildroot}/%{_var}/lib/condor/aviary
+populate %{_var}/lib/condor/aviary %{buildroot}/usr/axis2.xml
+populate %{_var}/lib/condor/aviary %{buildroot}/usr/services/
+
 mkdir -p -m0755 %{buildroot}/%{_var}/run/condor
 mkdir -p -m0755 %{buildroot}/%{_var}/log/condor
 mkdir -p -m0755 %{buildroot}/%{_var}/lock/condor
+mkdir -p -m1777 %{buildroot}/%{_var}/lock/condor/local
 mkdir -p -m0755 %{buildroot}/%{_sharedstatedir}/condor/spool
 mkdir -p -m1777 %{buildroot}/%{_sharedstatedir}/condor/execute
 
@@ -196,63 +317,14 @@ EOF
 # this gets around a bug whose fix is not yet merged
 echo "TRUST_UID_DOMAIN = TRUE" >> %{buildroot}/%{_sharedstatedir}/condor/condor_config.local
 
-# used by BLAHP, which is not packaged
-rm -r %{buildroot}/%{_libexecdir}/condor/glite
-rm -r %{buildroot}/%{_datarootdir}/condor/glite
-# used by old MPI universe, not packaged (it's rsh, it should die)
-rm %{buildroot}/%{_libexecdir}/condor/rsh
-# this is distributed as chirp_client.c/h and chirp_protocol.h in %_usrsrc
-rm %{buildroot}/%{_datarootdir}/condor/libchirp_client.a
-# which we're not distributing atm either
-rm -r %{buildroot}/%{_usrsrc}/chirp
-
-# not packaging the condor_startd_factory right now
-rm %{buildroot}/%{_sbindir}/condor_startd_factory
-rm -r %{buildroot}/%{_usrsrc}/startd_factory
-rm %{buildroot}/%{_libexecdir}/condor/bgp_available_partitions
-rm %{buildroot}/%{_libexecdir}/condor/bgp_back_partition
-rm %{buildroot}/%{_libexecdir}/condor/bgp_boot_partition
-rm %{buildroot}/%{_libexecdir}/condor/bgp_destroy_partition
-rm %{buildroot}/%{_libexecdir}/condor/bgp_generate_partition
-rm %{buildroot}/%{_libexecdir}/condor/bgp_query_work_loads
-rm %{buildroot}/%{_libexecdir}/condor/bgp_shutdown_partition
-
-# not packaging glexec support right now
-rm %{buildroot}/%{_libexecdir}/condor/condor_glexec_cleanup
-rm %{buildroot}/%{_libexecdir}/condor/condor_glexec_job_wrapper
-rm %{buildroot}/%{_libexecdir}/condor/condor_glexec_kill
-rm %{buildroot}/%{_libexecdir}/condor/condor_glexec_run
-rm %{buildroot}/%{_libexecdir}/condor/condor_glexec_setup
-
-# not going to package the sc2005 negotiator
-rm %{buildroot}/%{_sbindir}/condor_lease_manager
-
 # no master shutdown program for now
 rm %{buildroot}/%{_sbindir}/condor_set_shutdown
 rm %{buildroot}/%{_mandir}/man1/condor_set_shutdown.1.gz
 
 # not packaging glidein support, depends on globus
 rm %{buildroot}/%{_mandir}/man1/condor_glidein.1.gz
-rm %{buildroot}/%{_bindir}/condor_glidein
 
 # not packaging deployment tools
-# sbin/uniq_pid_command is a link for uniq_pid_midwife/undertaker
-rm %{buildroot}/%{_sbindir}/uniq_pid_command
-rm %{buildroot}/%{_sbindir}/uniq_pid_midwife
-rm %{buildroot}/%{_sbindir}/uniq_pid_undertaker
-rm %{buildroot}/%{_sbindir}/cleanup_release
-rm %{buildroot}/%{_sbindir}/condor_local_stop
-rm %{buildroot}/%{_sbindir}/condor_cleanup_local
-rm %{buildroot}/%{_sbindir}/condor_cold_start
-rm %{buildroot}/%{_sbindir}/condor_cold_stop
-rm %{buildroot}/%{_sbindir}/condor_config_bind
-rm %{buildroot}/%{_sbindir}/filelock_midwife
-rm %{buildroot}/%{_sbindir}/filelock_undertaker
-rm %{buildroot}/%{_sbindir}/condor_install_local
-rm %{buildroot}/%{_sbindir}/condor_local_start
-rm %{buildroot}/%{_sbindir}/install_release
-rm %{buildroot}/%{_datarootdir}/condor/Execute.pm
-rm %{buildroot}/%{_datarootdir}/condor/FileLock.pm
 rm %{buildroot}/%{_mandir}/man1/condor_config_bind.1.gz
 rm %{buildroot}/%{_mandir}/man1/condor_cold_start.1.gz
 rm %{buildroot}/%{_mandir}/man1/condor_cold_stop.1.gz
@@ -266,31 +338,18 @@ rm %{buildroot}/%{_mandir}/man1/cleanup_release.1.gz
 # not packaging standard universe
 rm %{buildroot}/%{_mandir}/man1/condor_compile.1.gz
 rm %{buildroot}/%{_mandir}/man1/condor_checkpoint.1.gz
-rm -r %{buildroot}/usr/examples
 
 # not packaging configure/install scripts
 rm %{buildroot}/%{_mandir}/man1/condor_configure.1.gz
-rm %{buildroot}/%{_sbindir}/condor_configure
-rm %{buildroot}/%{_sbindir}/condor_install
 
 # not packaging legacy cruft
 rm %{buildroot}/%{_mandir}/man1/condor_master_off.1.gz
-rm %{buildroot}/%{_sbindir}/condor_master_off
 rm %{buildroot}/%{_mandir}/man1/condor_reconfig_schedd.1.gz
-rm %{buildroot}/%{_sbindir}/condor_reconfig_schedd
 rm %{buildroot}/%{_mandir}/man1/condor_convert_history.1.gz
 
-# not packaging anything globus related
-rm %{buildroot}/%{_sbindir}/condor_gridshell
-rm %{buildroot}/%{_sbindir}/grid_monitor.sh
-rm %{buildroot}/%{_sbindir}/gt4_gahp
-rm %{buildroot}/%{_sbindir}/gt42_gahp
-
-# not packaging unsupported gahps
-rm %{buildroot}/%{_sbindir}/unicore_gahp
-
-# not packaging libcondorapi.a
-rm %{buildroot}/%{_datarootdir}/condor/libcondorapi.a
+# not packaging gidd_alloc or procd_ctl
+rm %{buildroot}/%{_mandir}/man1/gidd_alloc.1.gz
+rm %{buildroot}/%{_mandir}/man1/procd_ctl.1.gz
 
 # not packaging quill bits
 rm %{buildroot}/%{_mandir}/man1/condor_load_history.1.gz
@@ -298,18 +357,12 @@ rm %{buildroot}/%{_mandir}/man1/condor_load_history.1.gz
 # Remove junk
 rm -r %{buildroot}/%{_sysconfdir}/sysconfig
 rm -r %{buildroot}/%{_sysconfdir}/init.d
-rm %{buildroot}/usr/DOC
-rm %{buildroot}/usr/INSTALL
-rm %{buildroot}/usr/LICENSE-2.0.txt
-rm %{buildroot}/usr/README
-# No libs, no headers!
-rm -r %{buildroot}/usr/include
 
 # install the lsb init script
 install -Dp -m0755 %{buildroot}/etc/examples/condor.init %buildroot/%_initrddir/condor
 
 # we must place the config examples in builddir so %doc can find them
-mv %{buildroot}/etc/examples %_builddir/%name-%version
+mv %{buildroot}/etc/examples %_builddir/%name-%tarball_version
 
 
 %clean
@@ -334,22 +387,28 @@ rm -rf %{buildroot}
 %_datadir/condor/CondorJavaWrapper.class
 %_datadir/condor/Condor.pm
 %_datadir/condor/scimark2lib.jar
-%_datadir/condor/condor_ssh_to_job_sshd_config_template
-%dir %_datadir/condor/webservice/
-%_datadir/condor/webservice/condorCollector.wsdl
-%_datadir/condor/webservice/condorSchedd.wsdl
+%dir %_sysconfdir/condor/config.d/
+%_sysconfdir/condor/config.d/00personal_condor.config
+%_sysconfdir/condor/condor_ssh_to_job_sshd_config_template
+#%dir %_datadir/condor/webservice/
+#%_datadir/condor/webservice/condorCollector.wsdl
+#%_datadir/condor/webservice/condorSchedd.wsdl
 %dir %_libexecdir/condor/
 %_libexecdir/condor/condor_chirp
 %_libexecdir/condor/condor_ssh
 %_libexecdir/condor/sshd.sh
 %_libexecdir/condor/condor_job_router
 %_libexecdir/condor/gridftp_wrapper.sh
-%_libexecdir/condor/condor_glexec_update_proxy
+#%_libexecdir/condor/condor_glexec_update_proxy
 %_libexecdir/condor/condor_limits_wrapper.sh
 %_libexecdir/condor/condor_rooster
 %_libexecdir/condor/condor_ssh_to_job_shell_setup
 %_libexecdir/condor/condor_ssh_to_job_sshd_setup
 %_libexecdir/condor/power_state
+%_libexecdir/condor/condor_kflops
+%_libexecdir/condor/condor_mips
+%_libexecdir/condor/data_plugin
+%_libexecdir/condor/curl_plugin
 %_libexecdir/condor/condor_shared_port
 %_mandir/man1/condor_advertise.1.gz
 %_mandir/man1/condor_check_userlogs.1.gz
@@ -366,6 +425,7 @@ rm -rf %{buildroot}
 %_mandir/man1/condor_on.1.gz
 %_mandir/man1/condor_preen.1.gz
 %_mandir/man1/condor_prio.1.gz
+%_mandir/man1/condor_procd.1.gz
 %_mandir/man1/condor_q.1.gz
 %_mandir/man1/condor_qedit.1.gz
 %_mandir/man1/condor_reconfig.1.gz
@@ -425,6 +485,7 @@ rm -rf %{buildroot}
 %_bindir/condor_submit
 %_bindir/condor_ssh_to_job
 %_bindir/condor_power
+%_bindir/condor_gather_info
 # sbin/condor is a link for master_off, off, on, reconfig,
 # reconfig_schedd, restart
 %_sbindir/condor_advertise
@@ -451,9 +512,9 @@ rm -rf %{buildroot}
 %_sbindir/condor_store_cred
 %_sbindir/condor_transferd
 %_sbindir/condor_updates_stats
-%_sbindir/amazon_gahp
+#%_sbindir/amazon_gahp
 %_sbindir/condor_gridmanager
-%_sbindir/condor_credd
+#%_sbindir/condor_credd
 %config(noreplace) %_var/lib/condor/condor_config.local
 %defattr(-,condor,condor,-)
 %dir %_var/lib/condor/
@@ -481,6 +542,46 @@ rm -rf %{buildroot}
 #%_usrsrc/chirp/chirp_protocol.h
 
 
+#%files qmf
+#%defattr(-,root,root,-)
+#%doc LICENSE-2.0.txt NOTICE.txt
+#%_sysconfdir/condor/config.d/60condor-qmf.config
+#%dir %_libdir/condor/plugins
+#%_libdir/condor/plugins/MgmtCollectorPlugin-plugin.so
+#%_libdir/condor/plugins/MgmtMasterPlugin-plugin.so
+#%_libdir/condor/plugins/MgmtNegotiatorPlugin-plugin.so
+#%_libdir/condor/plugins/MgmtScheddPlugin-plugin.so
+#%_libdir/condor/plugins/MgmtStartdPlugin-plugin.so
+#%_bindir/get_trigger_data
+#%_sbindir/condor_trigger_config
+#%_sbindir/condor_triggerd
+#%_sbindir/condor_job_server
+
+
+%files aviary
+%defattr(-,root,root,-)
+%doc LICENSE-2.0.txt NOTICE.txt
+%_sysconfdir/condor/config.d/61aviary.config
+%dir %_libdir/condor/plugins
+%_libdir/condor/plugins/AviaryScheddPlugin-plugin.so
+%_sbindir/aviary_query_server
+%dir %_var/lib/condor/aviary
+%_var/lib/condor/aviary/axis2.xml
+%dir %_var/lib/condor/aviary/services
+%dir %_var/lib/condor/aviary/services/job
+%_var/lib/condor/aviary/services/job/libaviary_job_axis.so
+%_var/lib/condor/aviary/services/job/services.xml
+%_var/lib/condor/aviary/services/job/aviary-common.xsd
+%_var/lib/condor/aviary/services/job/aviary-job.xsd
+%_var/lib/condor/aviary/services/job/aviary-job.wsdl
+%dir %_var/lib/condor/aviary/services/query
+%_var/lib/condor/aviary/services/query/libaviary_query_axis.so
+%_var/lib/condor/aviary/services/query/services.xml
+%_var/lib/condor/aviary/services/query/aviary-common.xsd
+%_var/lib/condor/aviary/services/query/aviary-query.xsd
+%_var/lib/condor/aviary/services/query/aviary-query.wsdl
+
+
 %files kbdd
 %defattr(-,root,root,-)
 %doc LICENSE-2.0.txt NOTICE.txt
@@ -491,11 +592,62 @@ rm -rf %{buildroot}
 %defattr(-,root,root,-)
 %doc LICENSE-2.0.txt NOTICE.txt
 %_sbindir/condor_vm-gahp
-%_sbindir/condor_vm_vmware.pl
-%_sbindir/condor_vm_xen.sh
+#%_sbindir/condor_vm_vmware.pl
+#%_sbindir/condor_vm_xen.sh
 %_libexecdir/condor/libvirt_simple_script.awk
 
 
+#%files deltacloud-gahp
+#%defattr(-,root,root,-)
+#%doc LICENSE-2.0.txt NOTICE.txt
+#%_sbindir/deltacloud_gahp
+
+
+%files classads
+%defattr(-,root,root,-)
+%doc LICENSE-2.0.txt NOTICE.txt
+%_libdir/libclassad.so.1
+%_libdir/libclassad.so.1.1.0
+
+%files classads-devel
+%defattr(-,root,root,-)
+%doc LICENSE-2.0.txt NOTICE.txt
+%_bindir/classad_functional_tester
+%_bindir/classad_version
+%_libdir/libclassad.so
+%dir %_includedir/classad/
+%_includedir/classad/attrrefs.h
+%_includedir/classad/cclassad.h
+%_includedir/classad/classad_distribution.h
+%_includedir/classad/classadErrno.h
+%_includedir/classad/classad.h
+%_includedir/classad/classadItor.h
+%_includedir/classad/classad_stl.h
+%_includedir/classad/collectionBase.h
+%_includedir/classad/collection.h
+%_includedir/classad/common.h
+%_includedir/classad/debug.h
+%_includedir/classad/exprList.h
+%_includedir/classad/exprTree.h
+%_includedir/classad/fnCall.h
+%_includedir/classad/indexfile.h
+%_includedir/classad/lexer.h
+%_includedir/classad/lexerSource.h
+%_includedir/classad/literals.h
+%_includedir/classad/matchClassad.h
+%_includedir/classad/operators.h
+%_includedir/classad/query.h
+%_includedir/classad/sink.h
+%_includedir/classad/source.h
+%_includedir/classad/transaction.h
+%_includedir/classad/util.h
+%_includedir/classad/value.h
+%_includedir/classad/view.h
+%_includedir/classad/xmlLexer.h
+%_includedir/classad/xmlSink.h
+%_includedir/classad/xmlSource.h
+
+
 %post -n condor
 /sbin/chkconfig --add condor
 /sbin/ldconfig
@@ -519,10 +671,19 @@ if [ "$1" -ge "1" ]; then
 fi
 /sbin/ldconfig
 
+# Queue -
+# - Introduced condor-qmf, package of the mgmt/qmf contrib
+# - Introduced deltacloud-gahp
 
 %changelog
-* Thu Apr 28 2011 <matt at redhat> - 7.6.0-1
-- Upgrade to 7.6.0 release
+* Thu Apr 28 2011 <matt at redhat> - 7.6.1-0.1
+- Upgrade to 7.6.0 release, pre-release of 7.6.1 at 27972e8
+- Upstreamed patch: log_lock_run.patch
+- Introduced condor-classads to obsolete classads
+- Introduced condor-aviary, package of the aviary contrib
+- Transitioned from LOCAL_CONFIG_FILE to LOCAL_CONFIG_DIR
+- Stopped building against gSOAP,
+-  use aviary over birdbath and ec2_gahp (7.7.0) over amazon_gahp
 
 * Tue Feb 08 2011 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 7.5.5-2
 - Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
diff --git a/condor_config.generic.patch b/condor_config.generic.patch
index 519a5a9..4bd6014 100644
--- a/condor_config.generic.patch
+++ b/condor_config.generic.patch
@@ -1,16 +1,13 @@
-diff --git a/src/condor_examples/condor_config.generic b/src/condor_examples/condor_config.generic
-index f3f60a5..94c146f 100644
---- a/src/condor_examples/condor_config.generic
-+++ b/src/condor_examples/condor_config.generic
-@@ -1,15 +1,35 @@
+--- a/src/condor_examples/condor_config.generic	2011-04-16 05:09:12.000000000 -0400
++++ b/src/condor_examples/condor_config.generic	2011-04-27 13:49:41.633979435 -0400
+@@ -1,12 +1,31 @@
  ######################################################################
 +######################################################################
-+##                                                                  ##
-+##  N O T I C E:                                                    ##
-+##                                                                  ##
-+##       Customization of this file should be done via the          ##
-+##       LOCAL_CONFIG_FILE.                                         ##
-+##                                                                  ##
++###                                                                ###
++###  N O T I C E:   D O   N O T   E D I T   T H I S   F I L E      ###
++###                                                                ###
++###      Customization should be done via the LOCAL_CONFIG_DIR.    ###
++###                                                                ###
 +######################################################################
 +######################################################################
 +
@@ -25,37 +22,21 @@ index f3f60a5..94c146f 100644
 -##  getting set from the configuration file that you expect, use
 -##  condor_config_val -v <variable name>
 +##  found here * * s h o u l d   b e   c u s t o m i z e d   i n
-+##  t h e   l o c a l   c o n f i g u r a t i o n   f i l e. * *
++##  a   l o c a l   c o n f i g u r a t i o n   f i l e. * *
 +##
-+##  The local configuration file is specified by LOCAL_CONFIG_FILE
++##  The local configuration files are located in LOCAL_CONFIG_DIR, set
 +##  below.
 +##
 +##  For a basic configuration, you may only want to start by
-+##  customizing CONDOR_ADMIN.
++##  customizing CONDOR_HOST and DAEMON_LIST.
 +##
 +##  Note: To double-check where a configuration variable is set from
-+##  you can use condor_config_val -v <variable name>,
-+##  e.g. condor_config_val -v CONDOR_ADMIN.
++##  you can use condor_config_val -v -config <variable name>,
++##  e.g. condor_config_val -v -config CONDOR_HOST.
  ##
  ##  The file is divided into four main parts:
--##  Part 1:  Settings you MUST customize 
-+##  Part 1:  Settings you likely want to customize 
- ##  Part 2:  Settings you may want to customize
- ##  Part 3:  Settings that control the policy of when condor will
- ##           start and stop jobs on your machines
-@@ -47,18 +62,15 @@
- ##  #        #    #  #   #      #              #
- ##  #        #    #  #    #     #            #####
- ##
--##  Part 1:  Settings you must customize:
-+##  Part 1:  Settings you likely want to customize:
- ######################################################################
- ######################################################################
- 
--##  What machine is your central manager?
--CONDOR_HOST	= central-manager-hostname.your.domain
--
- ##--------------------------------------------------------------------
+ ##  Part 1:  Settings you likely want to customize 
+@@ -53,7 +72,7 @@
  ##  Pathnames:
  ##--------------------------------------------------------------------
  ##  Where have you installed the bin, sbin and lib condor directories?   
@@ -64,48 +45,179 @@ index f3f60a5..94c146f 100644
  
  ##  Where is the local condor directory for each host?  
  ##  This is where the local config file(s), logs and
-@@ -84,7 +96,7 @@ CONDOR_ADMIN		= condor-admin at your.domain
+@@ -61,17 +80,20 @@
+ LOCAL_DIR		= $(TILDE)
+ #LOCAL_DIR		= $(RELEASE_DIR)/hosts/$(HOSTNAME)
  
- ##  Full path to a mail delivery program that understands that "-s"
- ##  means you want to specify a subject:
--MAIL			= /usr/bin/mail
-+MAIL			= /bin/mail
+-##  Where is the machine-specific local config file for each host?
+-LOCAL_CONFIG_FILE	= $(LOCAL_DIR)/condor_config.local
+-#LOCAL_CONFIG_FILE	= $(RELEASE_DIR)/etc/$(HOSTNAME).local
++## Looking for LOCAL_CONFIG_FILE? You will not find it here. Instead
++## put a file in the LOCAL_CONFIG_DIR below. It is a more extensible
++## means to manage configuration. The order in which configuration
++## files are read from the LOCAL_CONFIG_DIR is lexicographic. For
++## instance, config in 00MyConfig will be overridden by config in
++## 97MyConfig.
  
- ##--------------------------------------------------------------------
- ##  Network domain parameters:
-@@ -93,13 +105,13 @@ MAIL			= /usr/bin/mail
- ##  machines don't share a common UID space, set it to 
- ##  UID_DOMAIN = $(FULL_HOSTNAME)
- ##  to specify that each machine has its own UID space.
--UID_DOMAIN		= your.domain
-+UID_DOMAIN		= $(FULL_HOSTNAME)
- 
- ##  Internet domain of machines sharing a common file system.
- ##  If your machines don't use a network file system, set it to
- ##  FILESYSTEM_DOMAIN = $(FULL_HOSTNAME)
- ##  to specify that each machine has its own file system. 
--FILESYSTEM_DOMAIN	= your.domain
-+FILESYSTEM_DOMAIN	= $(FULL_HOSTNAME)
- 
- ##  This macro is used to specify a short description of your pool. 
- ##  It should be about 20 characters long. For example, the name of 
-@@ -214,1 +231,1 @@
--ALLOW_WRITE = YOU_MUST_CHANGE_THIS_INVALID_CONDOR_CONFIGURATION_VALUE
-+ALLOW_WRITE = $(FULL_HOSTNAME)
-@@ -872,9 +883,10 @@ SPOOL		= $(LOCAL_DIR)/spool
+ ##  Where are optional machine-specific local config files located?
+ ##  Config files are included in lexicographic order.
+-LOCAL_CONFIG_DIR	= $(LOCAL_DIR)/config
+-#LOCAL_CONFIG_DIR	= $(LOCAL_DIR)/config
++##  No default.
++LOCAL_CONFIG_DIR        = $(ETC)/config.d
+ 
+ ## Blacklist for file processing in the LOCAL_CONFIG_DIR
+-## LOCAL_CONFIG_DIR_EXCLUDE_REGEXP = ^((\..*)|(.*~)|(#.*)|(.*\.rpmsave)|(.*\.rpmnew))$
++LOCAL_CONFIG_DIR_EXCLUDE_REGEXP = ^((\..*)|(.*~)|(#.*)|(.*\.rpmsave)|(.*\.rpmnew))$
+ 
+ ## If the local config file is not present, is it an error?
+ ## WARNING: This is a potential security issue. 
+@@ -409,7 +431,22 @@
+ ##  condor account, it's probably condor.  Otherwise, it's whatever
+ ##  you've set in the CONDOR_IDS environment variable.  See the Admin
+ ##  manual for details on this.
+-LOCK		= $(LOG)
++LOCK = /var/lock/condor
++
++# Condor allows for creating surrogate lock files that always live on
++# local disk. This is useful for the times when Condor would otherwise
++# lock a file on a network filesystem, such as a UserLog.
++# CREATE_LOCKS_ON_LOCAL_DISK controls this feature, and
++# LOCAL_DISK_LOCK_DIR controls where the lock files are created. The
++# local dir must have tmp-like permissions (1777), because multiple
++# users, e.g. via condor_submit or condor_dagman, will need to
++# add/remove lock files.
++# NOTE: This will not provide proper locking if a shared file is
++# simultaneously accessed from multiple machines. However, that is not
++# a common event. One example where it is possible is remote
++# submission with condor_submit -remote.
++#CREATE_LOCKS_ON_LOCAL_DISK = TRUE
++LOCAL_DISK_LOCK_DIR = $(LOCK)/local
+ 
+ ##  If you don't use a fully qualified name in your /etc/hosts file
+ ##  (or NIS, etc.) for either your official hostname or as an alias,
+@@ -475,7 +512,8 @@
+ ##  the execute machine and just make sure the two strings match.  The
+ ##  default for this setting is False, since it is more secure this
+ ##  way.
+-#TRUST_UID_DOMAIN = False
++##   Default is False
++TRUST_UID_DOMAIN = True
+ 
+ ## If you would like to be informed in near real-time via condor_q when
+ ## a vanilla/standard/java job is in a suspension state, set this attribute to
+@@ -514,8 +552,9 @@
+ ## just disable it).
+ #NEGOTIATOR_IGNORE_USER_PRIORITIES = False
+ 
+-## This is a list of libraries containing ClassAd plug-in functions.
+-#CLASSAD_USER_LIBS =
++## These are the directories used to locate classad plug-in functions
++#CLASSAD_SCRIPT_DIRECTORY =
++#CLASSAD_LIB_PATH =
+ 
+ ## This setting tells Condor whether to delegate or copy GSI X509
+ ## credentials when sending them over the wire between daemons.
+@@ -605,6 +644,9 @@
+ MAX_HDFS_LOG            = 1000000
+ HDFS_DEBUG              =
+ 
++MAX_TRIGGERD_LOG	= 1000000
++TRIGGERD_DEBUG        	=
++
+ # High Availability Logs
+ MAX_HAD_LOG		= 1000000
+ HAD_DEBUG		=
+@@ -927,14 +969,18 @@
+ ######################################################################
+ 
+ ##  Pathnames
+-LOG		= $(LOCAL_DIR)/log
++LOG         = /var/log/condor
+ SPOOL		= $(LOCAL_DIR)/spool
  EXECUTE		= $(LOCAL_DIR)/execute
  BIN		= $(RELEASE_DIR)/bin
  LIB		= $(RELEASE_DIR)/lib
 -INCLUDE		= $(RELEASE_DIR)/include
-+INCLUDE		= $(RELEASE_DIR)/include/condor
++INCLUDE     = $(RELEASE_DIR)/include/condor
  SBIN		= $(RELEASE_DIR)/sbin
 -LIBEXEC		= $(RELEASE_DIR)/libexec
++SHARE   = $(RELEASE_DIR)/share/condor
++RUN     = /var/run/condor
++DATA		= $(SPOOL)
++ETC     = /etc/condor
 +LIBEXEC		= $(RELEASE_DIR)/libexec/condor
-+SHARE		= $(RELEASE_DIR)/share/condor
  
  ## If you leave HISTORY undefined (comment it out), no history file
  ## will be created. 
-@@ -1655,7 +1667,7 @@ JAVA_MAXHEAP_ARGUMENT = -Xmx
+@@ -958,6 +1004,7 @@
+ REPLICATION_LOG	= $(LOG)/ReplicationLog
+ TRANSFERER_LOG	= $(LOG)/TransfererLog
+ HDFS_LOG	= $(LOG)/HDFSLog
++TRIGGERD_LOG	= $(LOG)/TriggerLog
+ 
+ ##  Lock files
+ SHADOW_LOCK	= $(LOCK)/ShadowLock
+@@ -1078,7 +1125,7 @@
+ #DC_DAEMON_LIST = \
+ #MASTER, STARTD, SCHEDD, KBDD, COLLECTOR, NEGOTIATOR, EVENTD, \
+ #VIEW_SERVER, CONDOR_VIEW, VIEW_COLLECTOR, HAWKEYE, CREDD, HAD, \
+-#DBMSD, QUILL, JOB_ROUTER, ROOSTER, LEASEMANAGER, HDFS, SHARED_PORT
++#DBMSD, QUILL, JOB_ROUTER, ROOSTER, LEASEMANAGER, HDFS, SHARED_PORT, TRIGGERD
+ 
+ 
+ ##  Where are the binaries for these daemons?
+@@ -1094,6 +1141,7 @@
+ HDFS				= $(SBIN)/condor_hdfs
+ SHARED_PORT			= $(LIBEXEC)/condor_shared_port
+ TRANSFERER			= $(LIBEXEC)/condor_transferer
++TRIGGERD			= $(sbin)/condor_triggerd
+ 
+ ##  When the master starts up, it can place it's address (IP and port)
+ ##  into a file.  This way, tools running on the local machine don't
+@@ -1170,11 +1218,13 @@
+ ##--------------------------------------------------------------------
+ ## Address to which Condor will send a weekly e-mail with output of
+ ## condor_status.
+-#CONDOR_DEVELOPERS = condor-admin at cs.wisc.edu
++##  Default is condor-admin at cs.wisc.edu
++CONDOR_DEVELOPERS = NONE
+ 
+ ## Global Collector to periodically advertise basic information about
+ ## your pool.
+-#CONDOR_DEVELOPERS_COLLECTOR = condor.cs.wisc.edu
++##  Default is condor.cs.wisc.edu
++CONDOR_DEVELOPERS_COLLECTOR = NONE
+ 
+ 
+ ##--------------------------------------------------------------------
+@@ -1183,6 +1233,7 @@
+ ## Determine if the Negotiator will honor SlotWeight attributes, which
+ ## may be used to give a slot greater weight when calculating usage.
+ #NEGOTIATOR_USE_SLOT_WEIGHTS = True
++NEGOTIATOR_USE_SLOT_WEIGHTS = False
+ 
+ 
+ ## How often the Negotaitor starts a negotiation cycle, defined in
+@@ -1620,7 +1671,7 @@
+ ##--------------------------------------------------------------------
+ ##  condor_starter
+ ##--------------------------------------------------------------------
+-##  The condor_starter can renice the processes of Condor
++##  The condor_starter can renice the processes from remote Condor
+ ##  jobs on your execute machines.  If you want this, uncomment the
+ ##  following entry and set it to how "nice" you want the user
+ ##  jobs. (1-19)  The larger the number, the lower priority the
+@@ -1673,7 +1724,7 @@
+ #     UNIX); the name will be something like:
+ #         \\.\pipe\condor_procd
+ #
+-PROCD_ADDRESS = $(LOCK)/procd_pipe
++PROCD_ADDRESS = $(RUN)/procd_pipe
+ 
+ # The procd currently uses a very simplistic logging system. Since this
+ # log will not be rotated like other Condor logs, it is only recommended
+@@ -1774,7 +1825,7 @@
  ## them here.  However, do not remove the existing entries, as Condor
  ## needs them.
  
@@ -114,16 +226,94 @@ index f3f60a5..94c146f 100644
  
  ##  JAVA_CLASSPATH_ARGUMENT describes the command-line parameter
  ##  used to introduce a new classpath:
-diff --git a/src/condor_examples/customize b/src/condor_examples/customize
-index b1c5710..cb2dea1 100644
---- a/src/condor_examples/customize
-+++ b/src/condor_examples/customize
-@@ -54,7 +54,7 @@ sub get_platform_defaults {
-     $_ = $os;
-   SWITCH: {
-       if(/^Linux/) { 
--	  $mail_path="/usr/bin/mail";
-+	  $mail_path="/bin/mail";
- 	  $ps_path="/bin/ps auwx";
- 	  $console_devs="mouse, console";
- 	  last SWITCH;
+@@ -1830,6 +1881,14 @@
+ ##  Various other settings that the Condor-G can use. 
+ ##--------------------------------------------------------------------
+ 
++## The number of seconds between status update requests. You can make 
++## this short (5 seconds) if you want Condor to respond quickly to 
++## instances as they terminate, or you can make it long (300 seconds = 5 
++## minutes) if you know your instances will run for awhile and don't 
++## mind delay between when they stop and when Condor responds to them 
++## stopping.
++GRIDMANAGER_JOB_PROBE_INTERVAL = 300
++
+ ## For grid-type gt2 jobs (pre-WS GRAM), limit the number of jobmanager
+ ## processes the gridmanager will let run on the headnode. Letting too
+ ## many jobmanagers run causes severe load on the headnode.
+@@ -1888,7 +1947,7 @@
+ CONDOR_GAHP_WORKER = $(SBIN)/condor_c-gahp_worker_thread
+ 
+ ##
+-## The Condor GAHP server has it's own log.  Like the Gridmanager, the
++## The Condor GAHP server has its own log.  Like the Gridmanager, the
+ ## GAHP server is run as the User, not a Condor daemon, so all users must 
+ ## have write permssion to the directory used for the logfile. Our 
+ ## suggestion is to create a directory called GridLogs in $(LOG) with 
+@@ -1965,7 +2024,7 @@
+ DELTACLOUD_GAHP = $(SBIN)/deltacloud_gahp
+ 
+ ##
+-## EC2: Universe = Grid, Grid_Resource = Amazon
++## EC2 (SOAP): Universe = Grid, Grid_Resource = Amazon
+ ##
+ 
+ ## The location of the amazon_gahp program, required
+@@ -1976,20 +2035,29 @@
+ #AMAZON_GAHP_DEBUG = D_FULLDEBUG
+ AMAZON_GAHP_LOG = /tmp/AmazonGahpLog.$(USERNAME)
+ 
+-## The number of seconds between status update requests to EC2. You can
+-## make this short (5 seconds) if you want Condor to respond quickly to
+-## instances as they terminate, or you can make it long (300 seconds = 5
+-## minutes) if you know your instances will run for awhile and don't mind
+-## delay between when they stop and when Condor responds to them
+-## stopping.
+-GRIDMANAGER_JOB_PROBE_INTERVAL = 300
+-
+ ## As of this writing Amazon EC2 has a hard limit of 20 concurrently
+ ## running instances, so a limit of 20 is imposed so the GridManager
+ ## does not waste its time sending requests that will be rejected.
+ GRIDMANAGER_MAX_SUBMITTED_JOBS_PER_RESOURCE_AMAZON = 20
+ 
+ ##
++## EC2 (REST): Universe = Grid, Grid_Resource = ec2
++##
++
++## The location of the ec2_gahp program, required
++EC2_GAHP = $(SBIN)/ec2_gahp
++
++## Location of log files, useful for debugging, must be in
++## a directory writable by any user, such as /tmp
++#EC2_GAHP_DEBUG = D_FULLDEBUG
++EC2_GAHP_LOG = /tmp/EC2GahpLog.$(USERNAME)
++
++## As of this writing Amazon EC2 has a hard limit of 20 concurrently
++## running instances, so a limit of 20 is imposed so the GridManager
++## does not waste its time sending requests that will be rejected.
++GRIDMANAGER_MAX_SUBMITTED_JOBS_PER_RESOURCE_EC2 = 20
++
++##
+ ##--------------------------------------------------------------------
+ ##  condor_credd credential managment daemon
+ ##--------------------------------------------------------------------
+@@ -2250,8 +2318,8 @@
+ 
+ ## What kind of virtual machine program will be used for 
+ ## the VM universe?
+-## The two options are vmware and xen.  (Required)
+-#VM_TYPE = vmware
++## The three primary options are KVM, Xen and VMware.  (Required: no default)
++#VM_TYPE = kvm
+ 
+ ## How much memory can be used for the VM universe? (Required)
+ ## This value is the maximum amount of memory that can be used by the 
+@@ -2482,7 +2550,7 @@
+ #SSH_TO_JOB_SSHD_ARGS = "-i -e -f %f"
+ 
+ # sshd configuration template used by condor_ssh_to_job_sshd_setup.
+-#SSH_TO_JOB_SSHD_CONFIG_TEMPLATE = $(LIB)/condor_ssh_to_job_sshd_config_template
++SSH_TO_JOB_SSHD_CONFIG_TEMPLATE = $(ETC)/condor_ssh_to_job_sshd_config_template
+ 
+ # Path to ssh-keygen
+ #SSH_TO_JOB_SSH_KEYGEN = /usr/bin/ssh-keygen


More information about the scm-commits mailing list