axis2导致javax.xml.stream.XMLStreamException:元素文本内容可能不包含START_ELEMENT

时间:2016-02-06 10:15:21

标签: java xml axis2

我通过eclipse生成了一个axis2 Web服务客户端。

我执行时总是遇到这个错误。

org.apache.axis2.AxisFault: javax.xml.stream.XMLStreamException: element text content may not contain START_ELEMENT

在wsdl我有

<xsd:element name="transactionError" type="transactionError"/>
<xsd:complexType name="transactionError">
<xsd:all>
<xsd:element name="request_id" type="xsd:string"/>
<xsd:element name="trans_id" nillable="true" type="string"/>
<xsd:element name="date_time" nillable="true" type="string"/>
<xsd:element name="error_code" nillable="true" type="int"/>
<xsd:element name="error_text" nillable="true" type="string"/>
</xsd:all>
</xsd:complexType>

在调试调用时,我可以看到响应是

<n:transactionError xmlns:n="http://www.xxxx.com/wsdl/xxxxx.wsdl">
<transactionError>
<request_id>Rxxxxxx</request_id>
<date_time>2016-02-06 12:02:53</date_time>
<error_code>-12</error_code>
<error_text>xxxxxxxxxxxxxxxx</error_text>
</transactionError></n:transactionError>

java.lang.String content = reader.getElementText();

它正在抛出异常 javax.xml.stream.XMLStreamException: element text content may not contain START_ELEMENT

在具有这些属性的阅读器上

reader.currentNode = <transactionError><request_id>Rxxxxxx</request_id><date_time>2016-02-06 12:02:53</date_time><error_code>-12</error_code><error_text>xxxxxxxxx</error_text></transactionError>

reader.namespaceCount = -1

知道问题是什么?

1 个答案:

答案 0 :(得分:4)

您只能在包含纯文本内容的元素上调用XMLStreamReader.getElementText()方法。可以为<request_id><date_time><error_code><error_text>调用此方法,因为这些元素的子元素只是文本,但您不能在<transactionError>上使用此方法{1}}因为它有其他元素作为孩子。

XMLStreamReader.getElementText()的Javadoc包含详细的伪代码,该伪代码显示该方法如何计算它返回的String以及它将在什么条件下抛出XMLStreamException。如果当前元素具有任何元素子元素,则此方法将抛出异常。

如果Axis2生成了这段代码,我会建议检查他们是否已经在更新的版本中修复了这个问题,并且如果仍然存在问题,则在Apache中针对他们的项目打开bug report