AXIS2/C:错误的元素类型或null节点(om_element.C)



已经在谷歌/其他各种网站上搜索了一段时间。。。

剧情简介:无法序列化/反序列化对象、错误的元素类型或null节点(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"硬编码为的命名空间机车信息交易,但这并没有解决问题。

如果您需要更多信息,请告诉我。

错误表明您给定的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的情况下发生的。

axiom_element_add_attribute呼叫之前检查您的parent_element

  1. 调用axiom_node_get_data_element(parent_element, env)检查数据元素是否绑定。它必须不是NULL

  2. 调用axiom_node_get_node_type(parent_element, env)检查元素的类型。它必须是AXIOM_ELEMENT

我相信你的意思是检查parent(而不是parent_element),对吧?这里有些地方不对劲。

类型defaxiom_node_t *parentaxiom_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)

parentAXIOM_DATA_SOURCE,这可能是wsdl文件中的内容吗?但是什么?相同的wsdl文件与gSOAP一起工作良好。

想法?

相关内容

  • 没有找到相关文章

最新更新