!C99Shell v. 2.1 [PHP 8 Update] [02.02.2022]!

Software: Apache/2.4.53 (Unix) OpenSSL/1.1.1o PHP/7.4.29 mod_perl/2.0.12 Perl/v5.34.1. PHP/7.4.29 

uname -a: Linux vps-2738122-x 4.15.0-213-generic #224-Ubuntu SMP Mon Jun 19 13:30:12 UTC 2023 x86_64 

uid=1(daemon) gid=1(daemon) grupos=1(daemon) 

Safe-mode: OFF (not secure)

/opt/apex_tdfonline/php/3ros/wsf/dynamic_invocation/   drwxr-xr-x
Free 14.73 GB of 61.93 GB (23.79%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


Viewing file:     wsf_wsdl_serialization.php (55.7 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
/*
 * Copyright (c) 2005-2010 WSO2, Inc. http://wso2.com
 *
 * 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.
 */



/**
 * Recursive function to create payload 
 * @param DomDocument $payload_dom 
 * @param array $sig_model as a DomNode
 *      example of sig..
 *
 *      <params wrapper-element="myDemo"
 *             wrapper-element-ns="http://wso2.org/dyn/codegen/demo"
 *             simple="no" contentModel="all">
 *          <param token="#in"
 *               targetNamespace="http://wso2.org/dyn/codegen/demo"
 *               minOccurs="1" maxOccurs="1" name="demo1" type="int"
 *               type-namespace="http://www.w3.org/2001/XMLSchema" 
 *               type-prefix="xs" simple="yes"/>
 *          <param token="#in" 
 *               targetNamespace="http://wso2.org/dyn/codegen/demo"
 *               minOccurs="1" maxOccurs="1" name="demo2" type="string"
 *               type-namespace="http://www.w3.org/2001/XMLSchema" 
 *               type-prx="xs" simple="yes"/>
 *      </params>
 *
 *
 * @param DomNode $parent_node - The parent node to add the content 
 * @param DomNode $root_node - The top most of parent
 * @param mixed $user_obj - class object to pass
 * @param array $classmap, the classmap user entered
 * @param $prefix_i - next available prefix index 
 * @param $namespace_map - Just make sure the unique namespace is used.
    Newly added (passed by reference)
 */
function wsf_create_payload_for_class_map(DomDocument $payload_dom,
                                            
DomNode $sig_node
                                            
DomNode $parent_node
                                            
DomNode $root_node
                                            
$user_obj,
                                            
$classmap,
                                            &
$prefix_i
                                            array &
$namespace_map,
                                            
$mtom_on,
                                            &
$attachment_map) {

    
ws_log_write(__FILE____LINE__WSF_LOG_DEBUG"Loading in to creating payload from classmap");

    if(
wsf_set_nil_element($user_obj$parent_node$root_node$prefix_i$namespace_map)) {
        return 
TRUE;
    }

    
// This is not expected in the class map mode to have params with no childs
    // So mark it as an unknown schema

    // here we always expect structures with childs unless it is simple content model
    
if(!($sig_node->attributes->getNamedItem(WSF_CONTENT_MODEL) &&
                
$sig_node->attributes->getNamedItem(WSF_CONTENT_MODEL)->value == WSF_SIMPLE_CONTENT) && 
                !
$sig_node->hasChildNodes()) {
        
        
// Just take the first namespace in the map to create the xml elements in 
        // the unknown structure..
        
$values array_values($namespace_map);
        
$prefix $values[0];
        
wsf_create_payload_for_unknown_class_map($payload_dom$parent_node$user_obj$prefix);
        return;
    }


    if(
$sig_node->hasAttributes()) {
        
// filling user class information to the array..

        
$changed_sig_node wsf_infer_sig_node_from_user_obj($sig_node$parent_node$root_node,
                    
$user_obj$classmap$prefix_i$namespace_map);

        
$user_arguments wsf_convert_classobj_to_array($changed_sig_node$user_obj);

        
wsf_build_content_model($changed_sig_node$user_arguments$parent_node$payload_dom,
                
$root_node$classmap$prefix_i$namespace_map$mtom_on$attachment_map);
    }
    else {
        
// this situation meets only for non-wrapped mode as doclit-bare wsdls
        // and for the simpleContent extension in the classmap
        
$the_only_node $sig_node->firstChild;


        
//  handle simple content extension seperatly
        
if($the_only_node->attributes->getNamedItem(WSF_CONTENT_MODEL) &&
                
$the_only_node->attributes->getNamedItem(WSF_CONTENT_MODEL)->value == WSF_SIMPLE_CONTENT) {

            
// filling user class information to the array..
            
$user_arguments wsf_convert_classobj_to_array($the_only_node$user_obj);

            
wsf_build_content_model($the_only_node$user_arguments$parent_node,
                
$payload_dom$root_node$classmap$prefix_i$namespace_map$mtom_on$attachement_map);
        }
    }
}


/** create payload for arrays
 * @param $payload_dom - DomDocument for the payload building
 * @param $sig_node - sig model
 * @param $parent_node - The parent node to add the content
 * @param $root_node - The always parent. Just to add all the namespace declaration here..
 * @param $user_arguments - The user given arguments
 * @param $prefix_i - next available prefix index 
 * @param $namespace_map - Just make sure the unique namespace is used. Newly added
    (passed by reference)
 */
function wsf_create_payload_for_array(DomDocument $payload_dom,
                                     
DOMNode $sig_node,
                                     
DomNode $parent_node,
                                     
DomNode $root_node,
                                     
$user_arguments,
                                     &
$prefix_i
                                     array &
$namespace_map,
                                     
$mtom_on,
                                     &
$attachement_map) {

    
ws_log_write(__FILE____LINE__WSF_LOG_DEBUG"Loading in to creating payload from arrays");

    if(
wsf_set_nil_element($user_arguments$parent_node$root_node$prefix_i$namespace_map)) {
        return 
TRUE;
    }

    
// here we always expect structures with childs
    
if(!$sig_node->hasChildNodes()) {
        
        
// Just take the first namespace in the map to create the xml elements in 
        // the unknown structure..
        
$values array_values($namespace_map);
        
$prefix $values[0];
        
wsf_create_payload_for_unknown_class_map($payload_dom$parent_node$user_obj$prefix);
        return;
    }


    
$classmap NULL;
    if(
$sig_node->hasAttributes()) {
        if(!
is_array($user_arguments)) {
            
ws_log_write(__FILE____LINE__WSF_LOG_DEBUG$payload_dom->localName
                
" can not be empty, note: just set to NULL to make it as NULL");
            
wsf_set_nil_element(NULL$parent_node$root_node$prefix_i$namespace_map);
            return;
        }
        
wsf_build_content_model($sig_node$user_arguments$parent_node,
            
$payload_dom,  $root_node$classmap$prefix_i$namespace_map$mtom_on$attachement_map);
    }
    else {
        
// this situation meets only for non-wrapped mode as doclit-bare wsdls
        
$the_only_node $sig_node->firstChild;

        
//  handle simple content extension seperatly
        
if($the_only_node->attributes->getNamedItem(WSF_CONTENT_MODEL) &&
                
$the_only_node->attributes->getNamedItem(WSF_CONTENT_MODEL)->value == WSF_SIMPLE_CONTENT) {
            
wsf_build_content_model($the_only_node$user_arguments$parent_node,
                    
$payload_dom$root_node$classmap$prefix_i$namespace_map$mtom_on$attachement_map);
        }
        else {
            
$is_simple FALSE;
            if(
$the_only_node->attributes->getNamedItem(WSF_WSDL_SIMPLE) &&
                    
$the_only_node->attributes->getNamedItem(WSF_WSDL_SIMPLE)->value == "yes") {
                
$is_simple TRUE;
            }
            
$param_type NULL;
            if(
$the_only_node->attributes->getNamedItem(WSF_TYPE)) {
                
$param_type $the_only_node->attributes->getNamedItem(WSF_TYPE)->value;
            }
            if(
$is_simple) {

                
$is_list FALSE;
                if(
$the_only_node->attributes->getNamedItem(WSF_LIST) &&
                    
$the_only_node->attributes->getNamedItem(WSF_LIST)->value == "yes") {
                     
$is_list TRUE;
                }

                if(
$user_arguments === NULL || !is_array($user_arguments) || $is_list) {

                    
$serialized_value wsf_wsdl_serialize_php_value($param_type,
                        
$user_arguments$the_only_node$parent_node
                        
$parent_node$prefix_i$namespace_map$root_node);
                    
$text_node $payload_dom->createTextNode($serialized_value);
                    
$parent_node->appendChild($text_node);

                }
                else if(
is_array($user_arguments)) {
                    
ws_log_write(__FILE____LINE__WSF_LOG_ERROR"Array is specified when non-array is expected for the root node\n");
                }
                
wsf_set_nil_element($user_arguments$parent_node$root_node$prefix_i$namespace_map);
            }
        }
    }
}

/** create payload for unknown class maps 
 * @param $payload_dom - DomDocument for the payload building
 * @param $parent_node - The parent node to add the content
 * @param $user_arguments - The user given argument array 
 * @param $user_obj - object with user data..
 * @param $ns_prefix
 */
function wsf_create_payload_for_unknown_class_map(DomDocument $payload_dom,
                                     
DomNode $parent_node,
                                     
$user_obj,
                                     
$ns_prefix) {

    
$reflex_obj = new ReflectionObject($user_obj);
    
$reflex_properties $reflex_obj->getProperties();


    foreach(
$reflex_properties as $reflex_property) {
        
$key $reflex_property->getName();
        
$value $reflex_property->getValue($user_obj);

        if(
$ns_prefix != NULL && !empty($ns_prefix)) {
            
$node_name $ns_prefix.":".$key;
        }
        else
        {
            
$node_name $key;
        }
        if(
is_object($value)) {
            
$current_node $payload_dom->createElement($node_name);
            
wsf_create_payload_for_unknown_class_map($payload_dom$current_node$value$ns_prefix);
            
$parent_node->appendChild($current_node);
        }
        else if(
wsf_is_map($value)) {
            
$current_node $payload_dom->createElement($node_name);
            
wsf_create_payload_for_unknown_array($payload_dom$current_node$value$ns_prefix);
            
$parent_node->appendChild($current_node);
        }
        else if(
is_array($value)) {
            foreach(
$value as $child_value) {
                if(
is_object($child_value)) {
                    
$current_node $payload_dom->createElement($node_name);
                    
wsf_create_payload_for_unknown_class_map($payload_dom$current_node$child_value$ns_prefix);
                    
$parent_node->appendChild($current_node);
                }
                else if(
wsf_is_map($child_value)) {
                    
$current_node $payload_dom->createElement($node_name);
                    
wsf_create_payload_for_unknown_array($payload_dom$current_node$child_value$ns_prefix);
                    
$parent_node->appendChild($current_node);
                }
                else if(
is_array($child_value)) {
                    
error_log("Invalid array (inside an array) supplied around ".print_r($child_valueTRUE)." \n");
                }
                else
                {
                    
$current_node $payload_dom->createElement($node_name$child_value);
                    
$parent_node->appendChild($current_node);
                }
            }
        }
        else
        {
            
$current_node $payload_dom->createElement($node_name$value);
            
$parent_node->appendChild($current_node);
        }
    }
}



/** create payload for arrays
 * @param $payload_dom - DomDocument for the payload building
 * @param $parent_node - The parent node to add the content
 * @param $user_arguments - The user given argument array 
 * @param $ns_prefix
 */
function wsf_create_payload_for_unknown_array(DomDocument $payload_dom,
                                     
DomNode $parent_node,
                                     
$user_arguments,
                                     
$ns_prefix) {
    if(
is_array($user_arguments)) {
        foreach(
$user_arguments as $key=> $value) {
            if(
$ns_prefix != NULL && !empty($ns_prefix)) {
                
$node_name $ns_prefix.":".$key;
            }
            else
            {
                
$node_name $key;
            }
            if(
is_object($value)) {
                
$current_node $payload_dom->createElement($node_name);
                
wsf_create_payload_for_unknown_class_map($payload_dom$current_node$value$ns_prefix);
                
$parent_node->appendChild($current_node);
            }
            else if(
wsf_is_map($value)) {
                
$current_node $payload_dom->createElement($node_name);
                
wsf_create_payload_for_unknown_array($payload_dom$current_node$value$ns_prefix);
                
$parent_node->appendChild($current_node);
            }
            else if(
is_array($value)) {
                foreach(
$value as $child_value) {
                    if(
is_object($child_value)) {
                        
$current_node $payload_dom->createElement($node_name);
                        
wsf_create_payload_for_unknown_class_map($payload_dom$current_node$child_value$ns_prefix);
                        
$parent_node->appendChild($current_node);
                    }
                    else if(
wsf_is_map($child_value)) {
                        
$current_node $payload_dom->createElement($node_name);
                        
wsf_create_payload_for_unknown_array($payload_dom$current_node$child_value$ns_prefix);
                        
$parent_node->appendChild($current_node);
                    }
                    else if(
is_array($child_value)) {
                        
error_log("Invalid array (inside an array) supplied around ".print_r($child_valueTRUE)." \n");
                    }
                    else
                    {
                        
$current_node $payload_dom->createElement($node_name$child_value);
                        
$parent_node->appendChild($current_node);
                    }
                }
            }
            else
            {
                
$current_node $payload_dom->createElement($node_name$value);
                
$parent_node->appendChild($current_node);
            }
        }
    }
    else {
        
// just return the current value;
        
$ele $payload_dom->createTextNode($user_arguments);
        
$parent_node->appendChild($ele);
    }
}

/** 
 * Do serialization over simple schema types, attributes are too handled here
 * @param $sig_param_node sig model for the param
 * @param $user_val the user value given to the type
 * @param $parant_ele just root element of the element
 * @param $payload_dom  payload dom document
 * @param $root_node root element of the document, in order to add namespace 
 * @param $classmap array of classemap
 * @param $prefix_i - next available prefix index 
 * @param $namespace_map, array, map to the namespace to prefix
 * @param $user_val_encoded, encoded value of the user val, hm! use only for base64
 */
function wsf_serialize_simple_types(DomNode $sig_param_node$user_val,
                    
$parent_node$payload_dom$root_node$classmap, &$prefix_i,
                    &
$namespace_map$mtom_on, &$attachment_map$user_val_encoded NULL$content_type NULL) {

    
$target_namespace NULL;
    
$min_occurs 1;
    
$max_occurs 1;
    
$sig_param_attris $sig_param_node->attributes;
    
$param_type NULL;
    
$param_name NULL;
    
$is_attribute FALSE;
    
$is_list FALSE;
    
$content_model NULL;
    
$nillable FALSE;


    if(
$sig_param_attris->getNamedItem(WSF_NAME)) {
        
$param_name 
            
$sig_param_attris->getNamedItem(WSF_NAME)->value;
    }

    if(
$sig_param_attris->getNamedItem(WSF_TARGETNAMESPACE)) {
         
$target_namespace 
            
$sig_param_attris->getNamedItem(WSF_TARGETNAMESPACE)->value;
    }

    if(
$sig_param_attris->getNamedItem(WSF_MIN_OCCURS)) {
         
$min_occurs 
            
$sig_param_attris->getNamedItem(WSF_MIN_OCCURS)->value;
    }

    if(
$sig_param_attris->getNamedItem(WSF_MAX_OCCURS)) {
         
$max_occurs 
            
$sig_param_attris->getNamedItem(WSF_MAX_OCCURS)->value;
    }

    if(
$sig_param_attris->getNamedItem(WSF_XSD_NILLABLE)) {
         
$nillable 
            
$sig_param_attris->getNamedItem(WSF_XSD_NILLABLE)->value;
    }
    
    if(
$sig_param_attris->getNamedItem(WSF_TYPE)) {
         
$param_type 
            
$sig_param_attris->getNamedItem(WSF_TYPE)->value;
    }
    else if(
$sig_param_attris->getNamedItem(WSF_EXTENSION)) {
         
$param_type 
            
$sig_param_attris->getNamedItem(WSF_EXTENSION)->value;
    }

    if(
$sig_param_attris->getNamedItem(WSF_ATTRIBUTE) &&
        
$sig_param_attris->getNamedItem(WSF_ATTRIBUTE)->value == "yes") {
         
$is_attribute TRUE;
    }
 
    if(
$sig_param_attris->getNamedItem(WSF_CONTENT_MODEL)) {
        
$content_model $sig_param_attris->getNamedItem(WSF_CONTENT_MODEL)->value;
    }


    if(
$sig_param_attris->getNamedItem(WSF_LIST) &&
        
$sig_param_attris->getNamedItem(WSF_LIST)->value == "yes") {
         
$is_list TRUE;
    }
    
    
ws_log_write(__FILE____LINE__WSF_LOG_DEBUG$param_name);

    if(
$target_namespace === NULL) {
        
$qualified_name $param_name;
    }
    else {
        if(
array_key_exists($target_namespace$namespace_map)
                     && 
$namespace_map[$target_namespace] != NULL) {
            
$prefix $namespace_map[$target_namespace];
        }
        else{
            
$prefix "ns".$prefix_i;
            
$prefix_i ++;
            
$root_node->setAttribute("xmlns:".$prefix$target_namespace);
            
$namespace_map[$target_namespace] = $prefix;
        }
        
$qualified_name $prefix.":".$param_name;
    }

    if(
$is_attribute) {
        
$attri_name $qualified_name;
       
        if(!
is_array($user_val) && !is_object($user_val) ||
            (
$user_val_encoded && !is_array($user_val_encoded) && !is_object($user_val_encoded))) {
    
            
$serialized_value wsf_wsdl_serialize_php_value(
                                
$param_type$user_val$sig_param_node,
                                
NULL$prefix_i$namespace_map$root_node);

            
$parent_node->setAttribute($attri_name$serialized_value);
        }
        else {
            
ws_log_write(__FILE____LINE__WSF_LOG_ERROR,
                        
"attribute found -  ".
                        
$param_name ." which have given an array.");
        }
    }
    else {
        
$node_name $qualified_name;

        if(
$max_occurs || $max_occurs == "unbounded") {
            if(
$user_val && is_array($user_val)) {
                foreach(
$user_val as $user_val_item) {
                    if(
$content_model == WSF_SIMPLE_CONTENT) {
                        
$ele $payload_dom->createElement($node_name);
                        
$parent_node->appendChild($ele);
                        if(
is_object($user_val_item)) {
                            
wsf_create_payload_for_class_map($payload_dom$sig_param_node,
                                
$ele$root_node$user_val_item$classmap,
                                
$prefix_i$namespace_map$mtom_on$attachment_map);
                        }
                        else {
                            
wsf_create_payload_for_array($payload_dom$sig_param_node,
                                
$ele$root_node$user_val_item$prefix_i$namespace_map$mtom_on$attachment_map);
                        }
                    }
                    else {
                        
/* type conversion is needed */
                        
                        
$ele $payload_dom->createElement($node_name);
                        
$parent_node->appendChild($ele);
                        
wsf_serialize_type_info($param_type$user_val_item,
                                    
$sig_param_node$payload_dom$root_node,
                                    
$ele$namespace_map$mtom_on$attachment_mapNULL$content_type);
                    }
                }
            }
            else if(
$user_val_encoded && is_array($user_val_encoded)) {
                foreach(
$user_val_encoded as $user_val_encoded_item) {
                    if(
$content_model == WSF_SIMPLE_CONTENT) {
                        
// this is never to happen
                    
}
                    else {
                        
/* type conversion is needed */
                        
$ele $payload_dom->createElement($node_name);
                        
$parent_node->appendChild($ele);
                        
wsf_serialize_type_info($param_typeNULL,
                                    
$sig_param_node$payload_dom$root_node
                                    
$ele$namespace_map$mtom_on$attachment_map$user_val_encoded_item$content_type);
                    }
                }
            }
            else if(
$user_val || $user_val_encoded) {
                if(
$content_model == WSF_SIMPLE_CONTENT) {
                    
//this never happen if $user_val exists
                    
$ele $payload_dom->createElement($node_name);
                    
$parent_node->appendChild($ele);
                    if(
is_object($user_val)) {
                        
wsf_create_payload_for_class_map($payload_dom$sig_param_node,
                            
$ele$root_node$user_val$classmap,
                            
$prefix_i$namespace_map$mtom_on$attachment_map);
                    }
                    else {
                        
wsf_create_payload_for_array($payload_dom$sig_param_node,
                            
$ele$root_node$user_val$prefix_i$namespace_map$mtom_on$attachment_map);
                    }
                }
                else {
                    
/* in a case this is not an array */
                    
$ele $payload_dom->createElement($node_name);
                    
$parent_node->appendChild($ele);
                    
wsf_serialize_type_info($param_type$user_val$sig_param_node$payload_dom$root_node,
                                
$ele$namespace_map$mtom_on$attachment_map$user_val_encoded$content_type);
                }
            }
        }
        else {
            if(!(
$user_val && is_array($user_val)) ||
                    !(
$user_val_encoded && is_array($user_val_encoded)) ||
                    
$content_model == WSF_SIMPLE_CONTENT) {
                
/* in a case this is not an array */
                
if($content_model == WSF_SIMPLE_CONTENT) {
                    
$ele $payload_dom->createElement($node_name);
                    
$parent_node->appendChild($ele);
                    if(
is_object($user_val)) {
                      
//  echo wsf_test_serialize_node($sig_param_node) ."<val>".print_r($user_val, true)."</val>" ;
                        
wsf_create_payload_for_class_map($payload_dom$sig_param_node,
                         
$ele$root_node$user_val$classmap,
                         
$prefix_i$namespace_map$mtom_on$attachment_map);
                    }
                    else {
                        
wsf_create_payload_for_array($payload_dom$sig_param_node,
                         
$ele$root_node$user_val$prefix_i$namespace_map$mtom_on$attachment_map);
                    }
                }
                else {
                    
$ele $payload_dom->createElement($node_name);
                    
$parent_node->appendChild($ele);
                    
wsf_serialize_type_info($param_type$user_val$sig_param_node$payload_dom$root_node,
                                
$ele$namespace_map$mtom_on$attachment_map$user_val_encoded$content_type);

                }
            }
            else {
                
error_log("Array is given for "$param_name ." which should be a non array. \n");
                
ws_log_write(__FILE____LINE__WSF_LOG_ERROR,
                    
"Array is given for "$param_name ." which should be a non array.");
            }
        }
    }
}

/** 
 * Do serialization over complex schema types
 * @param $sig_param_node sig model for the param
 * @param $user_val the user value given to the type
 * @param $parant_ele just root element of the element
 * @param $payload_dom  payload dom document
 * @param $classmap (array) users classmap
 * @param $root_node root element of the document, in order to add namespace 
 * @param $prefix_i - next available prefix index 
 * @param namespace_map, array, map to the namespace to prefix
 */
function wsf_serialize_complex_types(DomNode $sig_param_node$user_val,
                                
$parent_node$payload_dom$root_node$classmap,
                                &
$prefix_i, &$namespace_map$mtom_on, &$attachment_map) {

    
$target_namespace NULL;
    
$min_occurs 1;
    
$max_occurs 1;
    
$sig_param_attris $sig_param_node->attributes;
    
$param_type NULL;
    
$param_name NULL;

    if(
$sig_param_attris->getNamedItem(WSF_NAME)) {
        
$param_name 
            
$sig_param_attris->getNamedItem(WSF_NAME)->value;
    }

    if(
$sig_param_attris->getNamedItem(WSF_TARGETNAMESPACE)) {
        
$target_namespace 
            
$sig_param_attris->getNamedItem(WSF_TARGETNAMESPACE)->value;
    }

    if(
$sig_param_attris->getNamedItem(WSF_MIN_OCCURS)) {
        
$min_occurs 
            
$sig_param_attris->getNamedItem(WSF_MIN_OCCURS)->value;
    }

    if(
$sig_param_attris->getNamedItem(WSF_MAX_OCCURS)) {

        
$max_occurs 
            
$sig_param_attris->getNamedItem(WSF_MAX_OCCURS)->value;
    }
    
    if(
$sig_param_attris->getNamedItem(WSF_TYPE)) {
        
$param_type 
            
$sig_param_attris->getNamedItem(WSF_TYPE)->value;
    }
    
    if(
$target_namespace == NULL) {
        
$node_name $param_name;
    }
    else {
        if(
array_key_exists($target_namespace$namespace_map)
                     && 
$namespace_map[$target_namespace] != NULL) {
            
$prefix $namespace_map[$target_namespace];
        }
        else{
            
$prefix "ns".$prefix_i;
            
$prefix_i ++;
            
$root_node->setAttribute("xmlns:".$prefix$target_namespace);
            
$namespace_map[$target_namespace] = $prefix;
        }
        
$node_name $prefix.":".$param_name;
    }


    if(
$max_occurs || $max_occurs == "unbounded") {
        if(
$user_val === NULL) {
            
wsf_set_nil_element(NULL$parent_node$root_node$prefix_i$namespace_map);
        }
        else if(
is_array($user_val)) {
            foreach(
$user_val as $user_val_item) {
                
/* type conversion is needed */
                
if($user_val_item === NULL) {
                    
wsf_set_nil_element(NULL$parent_node$root_node$prefix_i$namespace_map);
                    continue;
                }
                
$param_node $payload_dom->createElement($node_name);
                if(
is_object($user_val_item)) {
                    if(
$sig_param_node->hasChildNodes()) {
                        
wsf_create_payload_for_class_map($payload_dom
                                    
$sig_param_node$param_node$root_node,
                                    
$user_val_item$classmap$prefix_i,
                                    
$namespace_map$mtom_on$attachment_map);
                    }
                    else
                    {
                        
wsf_create_payload_for_unknown_class_map($payload_dom,
                                    
$param_node$user_val_item$prefix);
                    }
                }
                else
                {
                    if(
$sig_param_node->hasChildNodes()) {
                        
wsf_create_payload_for_array($payload_dom,
                                    
$sig_param_node$param_node$root_node,
                                    
$user_val_item$prefix_i$namespace_map$mtom_on$attachment_map);
                    }
                    else
                    {
                        
wsf_create_payload_for_unknown_array($payload_dom,
                                    
$param_node$user_val_item$prefix);
                    }
                }
                
$parent_node->appendChild($param_node);
            }
        }
        else {
            
/* in a case this is not an array */

            
$param_node $payload_dom->createElement($node_name);
            if(
is_object($user_val)) {
                if(
$sig_param_node->hasChildNodes()) {
                    
wsf_create_payload_for_class_map($payload_dom
                                
$sig_param_node$param_node$root_node,
                                
$user_val$classmap$prefix_i,
                                
$namespace_map$mtom_on$attachment_map);
                }
                else
                {
                    
wsf_create_payload_for_unknown_class_map($payload_dom,
                                
$param_node$user_val$prefix);
                }
            }
            else
            {
                if(
$sig_param_node->hasChildNodes()) {
                    
wsf_create_payload_for_array($payload_dom,
                                
$sig_param_node$param_node$root_node,
                                
$user_val$prefix_i$namespace_map$mtom_on$attachment_map);
                }
                else
                {
                    
wsf_create_payload_for_unknown_array($payload_dom,
                                
$param_node$user_val$prefix);
                }
            }
            
$parent_node->appendChild($param_node);
        }
    }
    else {
        
/* in a case this is not an array */

        
$param_node $payload_dom->createElement($node_name);
        if(
is_object($user_val)) {
            if(
$sig_param_node->hasChildNodes()) {
                
wsf_create_payload_for_class_map($payload_dom
                            
$sig_param_node$param_node$root_node,
                            
$user_val$classmap$prefix_i,
                            
$namespace_map$mtom_on$attachment_map);
            }
            else
            {
                
wsf_create_payload_for_unknown_class_map($payload_dom,
                            
$param_node$user_val$prefix);
            }
        }
        else
        {
            if(
$sig_param_node->hasChildNodes()) {
                
wsf_create_payload_for_array($payload_dom,
                            
$sig_param_node$param_node$root_node,
                            
$user_val$prefix_i$namespace_map$mtom_on$attachment_map);
            }
            else
            {
                
wsf_create_payload_for_unknown_array($payload_dom,
                            
$param_node$user_val$prefix);
            }
        }
        
$parent_node->appendChild($param_node);
    }
}

/**
 * build the content model correctly
 * @param $sig_node sig model to be processed..
 * @param $user_arguments, user arguments as an array
 * @param $parent_node the immediate parent element
 * @param $payload_dom the dom document of the building xml
 * @param $prefix_i - next available prefix index 
 * @param $root_node the root element of the dom
 */
function wsf_build_content_model(DomNode $sig_node, array $user_arguments,
            
DomNode $parent_nodeDomNode $payload_dom$root_node$classmap, &$prefix_i,
            &
$namespace_map$mtom_on, &$attachment_map) {

    
ws_log_write(__FILE____LINE__WSF_LOG_DEBUG"building the content model");

    
$content_model WSF_WSDL_SEQUENCE;
    if(
$sig_node->attributes->getNamedItem(WSF_CONTENT_MODEL)) {
        
$content_model $sig_node->attributes->getNamedItem(WSF_CONTENT_MODEL)->value;
    }

    
ws_log_write(__FILE____LINE__WSF_LOG_DEBUGprint_r($user_argumentsTRUE));
    
ws_log_write(__FILE____LINE__WSF_LOG_DEBUG$content_model);
    
// simple content extension should be treated differently
    
if($content_model == WSF_SIMPLE_CONTENT) {
       
        
$param_type "";
        if(
$sig_node->attributes->getNamedItem(WSF_EXTENSION)) {
            
$param_type $sig_node->attributes->getNamedItem(WSF_EXTENSION)->value;
        }

        
$is_list FALSE;
        if(
$sig_node->attributes->getNamedItem(WSF_LIST) &&
            
$sig_node->attributes->getNamedItem(WSF_LIST)->value == "yes") {
             
$is_list TRUE;
        }
        
$user_val NULL;
        
$user_val_encoded NULL;
        
/* type conversion is needed */
        
if(array_key_exists(WSF_SIMPLE_CONTENT_VALUE$user_arguments)) {
            
$user_val $user_arguments[WSF_SIMPLE_CONTENT_VALUE];
        }
        if(
$param_type == WSF_XSD_BASE64) {
            if(
array_key_exists(WSF_SIMPLE_CONTENT_VALUEWSF_POSTFIX_BASE64$user_arguments)) {
                
$user_val_encoded $user_arguments[WSF_SIMPLE_CONTENT_VALUEWSF_POSTFIX_BASE64];
            }
        }
        if(
$user_val_encoded === NULL  && $user_val === NULL) {
            
wsf_set_nil_element(NULL$parent_node$root_node$prefix_i$namespace_map);
        }
        
$content_type NULL;
        if(
array_key_exists(WSF_CONTENT_TYPE$user_arguments)) {
            
$content_type $user_arguments[WSF_CONTENT_TYPE];
        }
        
wsf_serialize_type_info($param_type$user_val$sig_node$payload_dom$root_node,
                    
$parent_node$namespace_map$mtom_on$attachment_map$user_val_encoded$content_type);
    }

    
$just_found_once FALSE;

    
$sig_param_nodes $sig_node->childNodes;
    foreach(
$sig_param_nodes as $sig_param_node) {
        if(
$sig_param_node->nodeName == WSF_PARAM) {
            if(
$sig_param_node->attributes->getNamedItem(WSF_NAME))
        
$param_name $sig_param_node->attributes->getNamedItem(WSF_NAME)->value;

            
// users are not expected to provide it in exact sequence..
            // for both all and sequences we build the xml same order as in the schema
            // for choice we pick the first non-null value in the group, when it is in the order defined in the schema
            
foreach($user_arguments as $user_key => $user_val) {
                if(
$param_name == $user_key) {
                    if(
$user_val === NULL) {
                        if(
$sig_param_node->attributes->getNamedItem(WSF_MIN_OCCURS) &&
                                
$sig_param_node->attributes->getNamedItem(WSF_MIN_OCCURS)->value == 0) {
                            
ws_log_write(__FILE____LINE__WSF_LOG_DEBUG
                                
"minOccurs=0 element $user_key is nil");
                            break; 
//will not render the min occured 0 nil elements
                        
}
                        else if(
$content_model == WSF_WSDL_SEQUENCE &&
                                
$sig_param_node->attributes->getNamedItem(WSF_XSD_NILLABLE) &&
                                
$sig_param_node->attributes->getNamedItem(WSF_XSD_NILLABLE)->value == "true") {
                            
// this too ok, somehow we would render an nill element here,
                            // we are not handling it here concerning the array elements
                            
ws_log_write(__FILE____LINE__WSF_LOG_DEBUG
                                
"nillable element $user_key is nil");
                        }
                        else {
                            
// not allow to be NIL section
                            
ws_log_write(__FILE____LINE__WSF_LOG_ERROR
                                
"non nillable and minOccurs!=0 element $user_key is nil");
                            
// right now we dont throw excpetion here..
                            //TODO: exit as validation fails
                            
break;
                        }
                            
                    }
                    if ((
$sig_param_node->attributes->getNamedItem(WSF_WSDL_SIMPLE) &&
                            
$sig_param_node->attributes->getNamedItem(WSF_WSDL_SIMPLE)->value == "yes") ||
                            (
$sig_param_node->attributes->getNamedItem(WSF_TYPE) &&
                             
$sig_param_node->attributes->getNamedItem(WSF_TYPE)->value == "anyType")) {
                        
$user_val_encoded NULL;
                        
$param_type NULL;

                        if(
$sig_param_node->attributes->getNamedItem(WSF_TYPE)) {
                            
$param_type 
                                
$sig_param_node->attributes->getNamedItem(WSF_TYPE)->value;
                        }

                        if(
$param_type == WSF_XSD_BASE64) {
                            if(
array_key_exists($user_keyWSF_POSTFIX_BASE64$user_arguments)) {
                                
$user_val_encoded $user_arguments[$user_keyWSF_POSTFIX_BASE64];
                            }
                        }
                        
ws_log_write(__FILE____LINE__WSF_LOG_DEBUG
                                
"calling serialize simple types");
                        
// default simple type
                        
wsf_serialize_simple_types($sig_param_node,
                                    
$user_val$parent_node$payload_dom
                                    
$root_node$classmap$prefix_i$namespace_map,
                                    
$mtom_on$attachment_map$user_val_encoded);
                    }
                    else {
                        
ws_log_write(__FILE____LINE__WSF_LOG_DEBUG
                                
"calling serialize complex types");
                        
wsf_serialize_complex_types($sig_param_node
                                        
$user_val$parent_node$payload_dom,
                                        
$root_node$classmap$prefix_i
                                        
$namespace_map$mtom_on$attachment_map);
                    }
                    if(
$user_val !== NULL) {
                        
$just_found_once TRUE;
                    }
                    break;
                }

            }
            if(
$just_found_once && $content_model == "choice") {
                break;
            }
        }
        else if(
$sig_param_node->nodeName == WSF_INNER_CONTENT) {
            
wsf_build_content_model($sig_param_node$user_arguments$parent_node,
                    
$payload_dom$root_node$classmap$prefix_i,
                    
$namespace_map$mtom_on$attachment_map);
        }
        else if(
$sig_param_node->nodeName == WSF_INHERITED_CONTENT) {
            
wsf_build_content_model($sig_param_node$user_arguments$parent_node,
                    
$payload_dom$root_node$classmap$prefix_i,
                    
$namespace_map$mtom_on$attachment_map);
        }
    }
}

/**
 * convert user object to user arguments array, right now just for one level
 * @param $sig_node DomNode sig model
 * @param $user_obj
 * @return resulting argument array
 */
function wsf_convert_classobj_to_array($sig_node$user_obj) {

    
$user_arguments = array();
    
$sig_param_nodes $sig_node->childNodes;
    
$sig_param_attrs $sig_node->attributes;
    if(!
is_object($user_obj) && !is_array($user_obj)) {
        return 
$user_obj;
    }

    
/* for the simple content type we expect the "VALUE" attribute */
    
if($sig_param_attrs->getNamedItem(WSF_CONTENT_MODEL) &&
            
$sig_param_attrs->getNamedItem(WSF_CONTENT_MODEL)->value == WSF_SIMPLE_CONTENT) {
        
$extension_type "";
        if(
$sig_param_attrs->getNamedItem(WSF_EXTENSION)) {
            
$extension_type $sig_param_attrs->getNamedItem(WSF_EXTENSION)->value;
        }

        
$simple_content_value_const WSF_SIMPLE_CONTENT_VALUE;
        
$reflex_object = new ReflectionObject($user_obj);
        
        
//treat specially for the base64, to give two apis one for base64, one without base64..
        
if($extension_type == WSF_XSD_BASE64) {
            
$simple_content_value_encoded WSF_SIMPLE_CONTENT_VALUE.WSF_POSTFIX_BASE64;

            if(
$reflex_object->hasProperty($simple_content_value_encoded) && $user_obj->$simple_content_value_encoded !== NULL) {
                
$user_arguments[$simple_content_value_encoded] = $user_obj->$simple_content_value_encoded;
            }

            if(
$reflex_object->hasProperty($simple_content_value_const) && $user_obj->$simple_content_value_const !== NULL) {
                
$user_arguments[$simple_content_value_const] = $user_obj->$simple_content_value_const;
            }
        }
        else {
            if(
$reflex_object->hasProperty($simple_content_value_const) && $user_obj->$simple_content_value_const !== NULL) {
                
$user_arguments[$simple_content_value_const] = $user_obj->$simple_content_value_const;
            }
        }
    }
        

    foreach(
$sig_param_nodes as $sig_param_node) {
        if(
$sig_param_node->nodeName == WSF_PARAM && is_object($user_obj)) {
            
$param_attrs $sig_param_node->attributes;
            
$param_name "";
            
$param_type "";
            if(
$param_attrs->getNamedItem(WSF_NAME)) {
                
$param_name $param_attrs->getNamedItem(WSF_NAME)->value;
            }
            if(
$param_attrs->getNamedItem(WSF_TYPE)) {
                
$param_type $param_attrs->getNamedItem(WSF_TYPE)->value;
            }

            
$reflex_object = new ReflectionObject($user_obj);

            if(
$param_type == WSF_XSD_BASE64) {
                
$param_name_encoded $param_name.WSF_POSTFIX_BASE64;
                if(
$reflex_object->hasProperty($param_name_encoded)) {
                    
$user_arguments[$param_name_encoded] = $user_obj->$param_name_encoded;
                }
                if(
$reflex_object->hasProperty($param_name)) {
                    
$user_arguments[$param_name] = $user_obj->$param_name;
                }
            }
            else {
                if(
$reflex_object->hasProperty($param_name)) {
                    
$user_arguments[$param_name] = $user_obj->$param_name;
                }
            }

        }
        else if(
$sig_param_node->nodeName == WSF_INNER_CONTENT) {
            
$tmp_array wsf_convert_classobj_to_array($sig_param_node$user_obj);
            
$user_arguments array_merge($user_arguments$tmp_array);
        }
        else if(
$sig_param_node->nodeName == WSF_INHERITED_CONTENT) {
            
$tmp_array wsf_convert_classobj_to_array($sig_param_node$user_obj);
            
$user_arguments array_merge($user_arguments$tmp_array);
        }
    }
    return 
$user_arguments;
}

/**
 * serialize the php value to the string value to put in the xml
 * @param $xsd_type, xsd type the value hold
 * @param $data_value, the data_value with php type
 * @param $is_list, whether the given map is a list
 * @param $parent_node, for put xsi:type in a case of a need..
 * @return string serialized to string
 */
function wsf_wsdl_serialize_php_value($xsd_type$data_value
            
$sig_param_node$parent_node, &$prefix_i, &$namespace_map$root_node) {

    
$is_list FALSE;
    
$is_union FALSE;
    
$sig_param_attris $sig_param_node->attributes;
    if(
$sig_param_attris->getNamedItem(WSF_LIST) &&
        
$sig_param_attris->getNamedItem(WSF_LIST)->value == "yes") {
         
$is_list TRUE;
    }
   
    
//currently union are not handled correctly
    
if($sig_param_attris->getNamedItem(WSF_UNION) &&
        
$sig_param_attris->getNamedItem(WSF_UNION)->value == "yes") {
         
$is_union TRUE;
    }

    
ws_log_write(__FILE____LINE__WSF_LOG_DEBUG"serializing ".$data_value);
    
// handle the list
    
if($is_list && is_array($data_value)) {
        
$tmp_data_values $data_value;

        
$new_data_value = array();
        foreach(
$tmp_data_values as $tmp_data_value) {
            
//this can't be anytype, since we can't put xsi:type in parent node there..
            
$new_data_value[] = wsf_convert_php_type_to_string($xsd_type$tmp_data_value);
        }

        
$serialized_value implode(" "$new_data_value);
    }
    else {
        
$serialized_value wsf_convert_php_type_to_string($xsd_type$data_value);
        
ws_log_write(__FILE____LINE__WSF_LOG_DEBUG"xsd type info ".$xsd_type);
        if(
$xsd_type == "anyType") {

            if(
array_key_exists(WSF_XSI_NAMESPACE$namespace_map)) {
                
$xsi_prefix $namespace_map[WSF_XSI_NAMESPACE];
            }
            else {
                
$xsi_prefix "xsi";
                
$root_node->setAttribute("xmlns:".$xsi_prefixWSF_XSI_NAMESPACE);
                
$namespace_map[WSF_XSI_NAMESPACE] = $xsi_prefix;
            }
            if(
array_key_exists(WSF_XSD_NAMESPACE$namespace_map)) {
                
$xsd_prefix $namespace_map[WSF_XSD_NAMESPACE];
            }
            else {
                
$xsd_prefix "xsd";
                
$root_node->setAttribute("xmlns:".$xsd_prefixWSF_XSD_NAMESPACE);
                
$namespace_map[WSF_XSD_NAMESPACE] = $xsd_prefix;
            }

            
$attribute_name $xsi_prefix.":"."type";
            
$php_type $xsd_prefix.":".gettype($data_value);
            
$attribute_value $php_type;

            
$parent_node->setAttribute($attribute_name$attribute_value);
                
        }
    }


    
ws_log_write(__FILE____LINE__WSF_LOG_DEBUG"serialized ".$serialized_value);
    return 
$serialized_value;
}

/**
 * serialize the php value to the string value to put in the xml
 * @param $xsd_type, xsd type the value hold
 * @param $data_value, the data_value with php type
 * @return string serialized to string
 */
function wsf_convert_php_type_to_string($xsd_type$data_value) {
    
    
$serialized_value $data_value;
    if(
$serialized_value === NULL) {
        return 
"";
    }
    
    
// we treat dateTime value differently
    
if($xsd_type == "dateTime" || $xsd_type == "date" || $xsd_type == "time") {
        
        if(
gettype($data_value) == "integer") {
            if(
$xsd_type == "dateTime") {
                
$serialized_value date("Y-m-d"$data_value)."T".date("H:i:s"$data_value)."Z";
            }
            else if(
$xsd_type == "date") {
                
$serialized_value date("Y-m-d"$data_value);
            }
            else if(
$xsd_type == "time") {
                    
$serialized_value date("H:i:s"$data_value)."Z";
                }
        }
        else {
            
// hope the other type is the string as it is
            
$serialized_value = (string)$data_value;
        }
    }
    else {
        
$xsd_php_mapping_table wsf_wsdl_util_xsd_to_php_type_map();
        
        if(
array_key_exists($xsd_type$xsd_php_mapping_table)) {
            
//retrieve the php type
            
$type $xsd_php_mapping_table[$xsd_type];
            
            if(
$type == "boolean") {
                if(
$data_value == FALSE) {
                    
$serialized_value "false";
                }
                else
                {
                    
$serialized_value "true";
                }
            }
        }
    }
    return 
$serialized_value."";
}

/**
 * infer the correct type and serialize, specially for mtom binding
 * @param $param_type parameter type
 * @param $user_val user value (default set)
 * @param $sig_node corrosponding sig node
 * @param $payload_dom payload DOM
 * @param $parent_node parent node the dom tree should be set to
 * @param $user_val_encoded (alternative var for base64 types)
 * @param $content_type content type
 * @param $attachment_map map of href => attachment contnet
 */
function wsf_serialize_type_info($param_type$user_val$sig_node$payload_dom$root_node,
                        
$parent_node,
                        &
$namespace_map,
                        
$mtom_on, &$attachment_map,
                        
$user_val_encoded NULL,
                        
$content_type NULL) {

    
/* handle the mtom scenario different to other cases */
    
if($param_type == WSF_XSD_BASE64) {
        if(
$mtom_on) {
            
// if the mtom on, use the encoded one..

            
if(!$user_val) {
                if(
$user_val_encoded) {
                    
$user_val base64_decode($user_val_encoded);
                }
            }

            if(
$user_val) {
                
// just attach the $user_val to the array
                // and prepare the dom structure

                // set the xmlmime namespace
                
$xml_mime_ns_prefix WSF_MIME_NAMESPACE_PREFIX;
                if(
array_key_exists(WSF_MIME_NAMESPACE_URI$namespace_map)) {
                    
//nothing to do special
                    
$xml_mime_ns_prefix $namespace_map[WSF_MIME_NAMESPACE_URI];
                }
                else {
                    
$xml_mime_ns_prefix WSF_MIME_NAMESPACE_PREFIX;
                    
$namespace_map[WSF_MIME_NAMESPACE_URI] = WSF_MIME_NAMESPACE_PREFIX;
                
                    if(
$content_type == NULL){
                        
$root_node->setAttribute("xmlns:".WSF_MIME_NAMESPACE_PREFIX,
                                
WSF_MIME_NAMESPACE_URI);
                    }
                }

                if(
$content_type == NULL) {
                    
$content_type WSF_DEFAULT_CONTENT_TYPE;
                    
// set the content type ..we only set this only,
                    // if the contentType is not available from the schema itself
                    
$parent_node->setAttribute($xml_mime_ns_prefix":"WSF_CONTENT_TYPE,
                                
$content_type);
                }

                
$mtom_include_node $payload_dom->createElementNS(WSF_XOP_NAMESPACE_URI,
                            
WSF_XOP_NAMESPACE_PREFIX.":"WSF_MTOM_INCLUDE_TAG);

                
$href_id NULL;
                do {
                    
$rnd rand();
                    
$href_id "id".$rnd;
                }
                while(
array_key_exists($href_id$attachment_map));

                
// put the attachment to the the map
                
$attachment_map[$href_id] = $user_val;
                
                
$mtom_include_node->setAttribute(WSF_HREFWSF_HREF_PREFIX.$href_id);

                
$parent_node->appendChild($mtom_include_node);
            }
        }
        else {
            
// if the mtom off use the non-encoded variable
            
if(!$user_val_encoded) {
                if(
$user_val) {
                    
$user_val_encoded base64_encode($user_val);
                }
            }

            if(
$user_val_encoded) {
                if(!
wsf_set_nil_element($user_val_encoded$parent_node$root_node$prefix_i$namespace_map)) {
                    
$serialized_value wsf_wsdl_serialize_php_value(
                        
$param_type$user_val_encoded
                        
$sig_node$parent_node$prefix_i$namespace_map$root_node);
                    
$ele $payload_dom->createTextNode($serialized_value);
                    
$parent_node->appendChild($ele);
                }
            }
        }
    }
    else {
        
        
ws_log_write(__FILE____LINE__WSF_LOG_DEBUG"setting the value after a null check");

        if(!
wsf_set_nil_element($user_val$parent_node$root_node$prefix_i$namespace_map)) {
            
$serialized_value wsf_wsdl_serialize_php_value(
                 
$param_type$user_val$sig_node,
                 
$parent_node$prefix_i$namespace_map$root_node);
            
$ele $payload_dom->createTextNode($serialized_value);
            
$parent_node->appendChild($ele);
        }
    }
}

/**
 * Extract the sig node looking at the user object type
 * @param array $sig_model as a DomNode
 * @param DomNode $parent_node - The parent node to add the content 
 * @param DomNode $root_node - The top most of parent
 * @param mixed $user_obj - class object to pass
 * @param $prefix_i - next available prefix index 
 * @param $namespace_map - Just make sure the unique namespace is used.
    Newly added (passed by reference)
 */


function wsf_infer_sig_node_from_user_obj($sig_node$parent_node$root_node
            
$user_obj$classmap, &$prefix_i, array &$namespace_map) {

    
ws_log_write(__FILE____LINE__WSF_LOG_DEBUG"Calling infer sig mode from user obj");

    
// first loop the through sig child whther there is is inheriting-types in there
    
$inheriting_type_sigs = array();
    
$inheriting_type_namespaces = array();

    
$sig_child_nodes $sig_node->childNodes;
    foreach(
$sig_child_nodes as $sig_child_node) {
        
        if(
$sig_child_node->localName == WSF_INHERITING_TYPE) {

            
$sig_child_attris $sig_child_node->attributes;
            
$type_name $type_ns "";
            if(
$sig_child_attris->getNamedItem(WSF_XSI_TYPE)) {
                 
$type_name $sig_child_attris->getNamedItem(WSF_XSI_TYPE)->value;
            }
            if(
$sig_child_attris->getNamedItem(WSF_XSI_TYPE_NS)) {
                 
$type_ns $sig_child_attris->getNamedItem(WSF_XSI_TYPE_NS)->value;
            }

            
ws_log_write(__FILE____LINE__WSF_LOG_DEBUG"type name $type_name ; $type_ns ");
            
$inheriting_type_sigs[$type_name] = $sig_child_node;
            
$inheriting_type_namespaces[$type_name] = $type_ns;
        }
    }
    
    
ws_log_write(__FILE____LINE__WSF_LOG_DEBUGprint_r($inheriting_type_namespacesTRUE));

    
// if not inheriting types just let the sig_node to be the sig node
    
if(count($inheriting_type_sigs) == 0) {
        return 
$sig_node;
    }
      
    
$reflex_obj = new ReflectionObject($user_obj);
    if(!
$reflex_obj) {
        return 
$sig_node;
    }

    
$class_name $reflex_obj->getName();
    
    
// find the type name
    
$type_name $class_name;

    
// if the classmap is present we need to check the type name from the map
    
if($classmap && is_array($classmap)) {
        foreach(
$classmap as $type_name_key => $class_name_value ) {
            if(
$class_name_value == $class_name) {
                
$type_name $type_name_key;
                break;
            }
        }
    }

    
// so we found the type, check with the collected inherited_types
    
$the_sig_node NULL;
    
$the_type_name NULL;
    
$the_type_namespace NULL;
    if(
array_key_exists($type_name$inheriting_type_sigs)) {
        
$the_type_name $type_name;
        
$the_type_namespace $inheriting_type_namespaces[$type_name];
        
$the_sig_node $inheriting_type_sigs[$type_name];
    }
    else {
        
// not in inherited map, so should be the same sig,
        
return $sig_node;
    }

    
//now retrieve the namespace or declare it if it is not present
    
$the_type_ns_prefix NULL;
    if(
array_key_exists($the_type_namespace$namespace_map)) {
        
$the_type_ns_prefix $namespace_map[$the_type_namespace];
    }
    else {
        
$the_type_ns_prefix "ns".$prefix_i;
        
$prefix_i ++;
        
$root_node->setAttribute("xmlns:".$the_type_ns_prefix$the_type_namespace);
        
$namespace_map[$the_type_namespace] = $the_type_ns_prefix;
    }

    
$xsi_namespace_prefix NULL;
    if(
array_key_exists(WSF_XSI_NAMESPACE$namespace_map)) {
        
$xsi_namespace_prefix $namespace_map[WSF_XSI_NAMESPACE];
    }
    else {
        
$xsi_namespace_prefix "xsi";
        
$root_node->setAttribute("xmlns:".$xsi_namespace_prefixWSF_XSI_NAMESPACE);
        
$namespace_map[WSF_XSI_NAMESPACE] = $xsi_namespace_prefix;
    }
    
    
$attribute_name $xsi_namespace_prefix.":"."type";
    
$attribute_value $the_type_ns_prefix.":".$the_type_name;

    
$parent_node->setAttribute($attribute_name$attribute_value);

    
ws_log_write(__FILE____LINE__WSF_LOG_DEBUGwsf_test_serialize_node($the_sig_node));
    return 
$the_sig_node;
}

function 
wsf_set_nil_element($value$parent_node$root_node, &$prefix_i, array &$namespace_map) {
    if(
$value !== NULL) {
        
ws_log_write(__FILE____LINE__WSF_LOG_DEBUG$parent_node->localName" is not nil\n value is: ".print_r($valueTRUE));
        return 
FALSE;
    }
    
ws_log_write(__FILE____LINE__WSF_LOG_DEBUG$parent_node->localName" is nil\n");
    if(
array_key_exists(WSF_XSI_NAMESPACE$namespace_map)) {
        
$prefix $namespace_map[WSF_XSI_NAMESPACE];
    }
    else {
        
$prefix "xsi";
        
$root_node->setAttribute("xmlns:".$prefixWSF_XSI_NAMESPACE);
        
$namespace_map[WSF_XSI_NAMESPACE] = $prefix;
    }

    
$attribute_name $prefix.":"."nil";
    
$attribute_value "1";

    
$parent_node->setAttribute($attribute_name$attribute_value);

    
ws_log_write(__FILE____LINE__WSF_LOG_DEBUG$parent_node->localName" is nil");
    return 
TRUE;
}

//-------------------------------------------------------------------------------------------
//currently we don't have diffent serialization for rpc-style in contrast with doc-lit

?>

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ Read-Only ]

:: Make Dir ::
 
[ Read-Only ]
:: Make File ::
 
[ Read-Only ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 2.1 [PHP 8 Update] [02.02.2022] maintained byC99Shell Github | Generation time: 0.8267 ]--