2016-07-19 7 views
0

искали на Google/различных других сайтах в течение некоторого времени ...axis2/C: неправильный тип элемента или нулевой узел (om_element.c)

Синопсис: Невозможно сериализовать/объект Deserialize, неправильно тип элемента или нулевой узел (om_element.c).

Сгенерированный код:

xsi_type_attri = axiom_attribute_create (env, "type", "LocomotiveInformationTransaction", xsi_ns); 
//The following line results in ERROR: 
axiom_element_add_attribute (parent_element, env, xsi_type_attri, parent); 

Ошибка (от wlis.log)

[error] om_element.c(283) Wrong element type or null node 

часть файла WSDL:

<?xml version="1.0" encoding="UTF-8"?> 
<!-Created by TIBCO WSDL-> 
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns0="http://www.nscorp.com" xmlns:tns="http://www.nscorp.com" xmlns:ns1="java:com.nscorp.wlis.locoinfo" name="Untitled" targetNamespace="http://www.nscorp.com"> 
<wsdl:types> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.nscorp.com" elementFormDefault="qualified" attributeFormDefault="unqualified"> 
<xs:import namespace="java:com.nscorp.wlis.locoinfo"/> 
<xs:element name="UpdateLocoStatus" nillable="true" type="ns1:LocomotiveInformationTransaction"/> 
<xs:element name="UpdateLocoStatusResponse" nillable="true" type="ns1:LocomotiveResponse"/> 
<xs:element name="isAliveResponse" nillable="true" type="xs:string"/> 
</xs:schema> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:stns="java:com.nscorp.wlis.locoinfo" xmlns="java:com.nscorp.wlis.locoinfo" targetNamespace="java:com.nscorp.wlis.locoinfo" elementFormDefault="qualified" attributeFormDefault="qualified"> 
<xsd:complexType name="ArrayOfCondition"> 
<xsd:sequence> 
<xsd:element name="Condition" nillable="true" type="stns:Condition" minOccurs="0" maxOccurs="unbounded"/> 
</xsd:sequence> 
</xsd:complexType> 

Единственное, что я мог видеть, это было пространство имен, которое было . В этом случае это выглядело (после прохождения кода и множества операторов журнала отладки) он использовал по умолчанию пространство имен xsi . Пробовал жесткое кодирование «ns1» как пространство имен для LocomotiveInformationTransaction, но это не решило проблему.

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

ответ

1

Ошибка говорит о том, что parent_element вы указали не AXIOM_ELEMENT или не имеет связанного элемента.

Это условие истинно, при проверке элемента:

if (!axiom_node_get_data_element(element_node, env) || 
    axiom_node_get_node_type(element_node, env) != AXIOM_ELEMENT) 

Это может быть в случае, если передать другой тип узла (текст, узел и т.д ..) как parent_element.

Проверьте parent_element перед axiom_element_add_attribute вызов:

  1. вызова axiom_node_get_data_element(parent_element, env), чтобы проверить, если элемент данных связан. Он должен быть не NULL;

  2. call to axiom_node_get_node_type(parent_element, env) контрольный элемент type. Это должно быть AXIOM_ELEMENT.

+0

Спасибо за ответ. Я сейчас посмотрю на это. – user1798810

0

Я считаю, что вы имеете в виду проверить parent (не parent_element), не так ли? Что-то здесь не складывается.

Тип Защиту: axiom_node_t *parent и axiom_element_t *parent_element

следующийвызов: axiom_element_add_attribute (parent_element, env, xsi_type_attri, parent);

которыйaxiom_element_add_attribute( axiom_element_t * om_element, const axutil_env_t * env, axiom_attribute_t * attribute, axiom_node_t * element_node){...}

в этой функции: axiom_element_find_namespace(om_element, env, element_node,...);получает.

следующее проверяет element_node, который является AXIOM_DATA_SOURCE (не AXIOM_ELEMENT):

if(!axiom_node_get_data_element(element_node, env) || axiom_node_get_node_type(element_node, env) != AXIOM_ELEMENT)

parent является AXIOM_DATA_SOURCE, это могло быть что-то в файле wsdl? Но что? Файл wsdl работал с gSOAP.

мысли?