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(¤t_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(¤t_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 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(¤t_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; }