我通过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
知道问题是什么?
答案 0 :(得分:4)
您只能在包含纯文本内容的元素上调用XMLStreamReader.getElementText()方法。可以为<request_id>
,<date_time>
,<error_code>
或<error_text>
调用此方法,因为这些元素的子元素只是文本,但您不能在<transactionError>
上使用此方法{1}}因为它有其他元素作为孩子。
XMLStreamReader.getElementText()的Javadoc包含详细的伪代码,该伪代码显示该方法如何计算它返回的String
以及它将在什么条件下抛出XMLStreamException
。如果当前元素具有任何元素子元素,则此方法将抛出异常。
如果Axis2生成了这段代码,我会建议检查他们是否已经在更新的版本中修复了这个问题,并且如果仍然存在问题,则在Apache中针对他们的项目打开bug report。