【发布时间】:2012-01-17 15:59:11
【问题描述】:
以下是我的应用程序中将被许多线程访问的方法。
public static String getXMLAsString(org.dom4j.Document dom4jDocument)
{
String strXML="";
try {
strXML = dom4jDocument.asXML();
}
catch(Exception e){
e.printStackTrace();
System.out.println("XMLUtility : General Exception :- "+e.getMessage());
}
return strXML;
}
成功执行某个线程后会报如下错误。
java.lang.StackOverflowError
at java.lang.String.indexOf(String.java:1352)
at org.apache.xerces.dom.ElementNSImpl.getPrefix(Unknown Source)
at org.dom4j.io.DOMReader.readElement(DOMReader.java:169)
.........................................................
.........................................................
以下是成功执行线程的上定义方法的结果
<?xml version="1.0" encoding="UTF-8"?>
<action_script>
<command>SUSPEND^
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:spi="http://nsn.com/npm/SoapProvisioningInterface/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Header/>
<soapenv:Body>
<spi:updateService>
<spi:request>
<spi:service>
<spi:serviceIdentifier>
<spi:serviceCode>CFS_Residential_v1</spi:serviceCode>
</spi:serviceIdentifier>
<spi:attributes>
<spi:attribute spi:name="CallingSystem" xsi:type="spi:singlevalue">
<spi:value xsi:type="xsd:string">OCS</spi:value>
</spi:attribute>
<spi:attribute spi:name="MSISDN" xsi:type="spi:singlevalue">
<spi:value xsi:type="xsd:string">{MSISDN}</spi:value>
</spi:attribute>
<spi:attribute spi:name="HSSUserAdminBlock" xsi:type="spi:singlevalue">
<spi:value xsi:type="xsd:boolean">true</spi:value>
</spi:attribute>
<spi:attribute spi:name="IMSPrivateID" xsi:type="spi:singlevalue">
<spi:value xsi:type="xsd:string">{username}</spi:value>
</spi:attribute>
</spi:attributes>
</spi:service>
</spi:request>
</spi:updateService>
</soapenv:Body>
</soapenv:Envelope>
</command>
<success_message>//ns1:updateServiceResponse</success_message>
<command>DEACTIVATE^
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:spi="http://nsn.com/npm/SoapProvisioningInterface/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Header/>
<soapenv:Body>
<spi:updateService>
<spi:request>
<spi:service>
<spi:serviceIdentifier>
<spi:serviceCode>CFS_Residential_v1</spi:serviceCode>
</spi:serviceIdentifier>
<spi:attributes>
<spi:attribute spi:name="CallingSystem" xsi:type="spi:singlevalue">
<spi:value xsi:type="xsd:string">OCS</spi:value>
</spi:attribute>
<spi:attribute spi:name="MSISDN" xsi:type="spi:singlevalue">
<spi:value xsi:type="xsd:string">{MSISDN}</spi:value>
</spi:attribute>
<spi:attribute spi:name="HSSUserAdminBlock" xsi:type="spi:singlevalue">
<spi:value xsi:type="xsd:boolean">true</spi:value>
</spi:attribute>
<spi:attribute spi:name="IMSPrivateID" xsi:type="spi:singlevalue">
<spi:value xsi:type="xsd:string">{username}</spi:value>
</spi:attribute>
</spi:attributes>
</spi:service>
</spi:request>
</spi:updateService>
</soapenv:Body>
</soapenv:Envelope>
</command>
<success_message>//ns1:updateServiceResponse</success_message>
<command>ACTIVATE^
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:spi="http://nsn.com/npm/SoapProvisioningInterface/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Header/>
<soapenv:Body>
<spi:updateService>
<spi:request>
<spi:service>
<spi:serviceIdentifier>
<spi:serviceCode>CFS_Residential_v1</spi:serviceCode>
</spi:serviceIdentifier>
<spi:attributes>
<spi:attribute spi:name="CallingSystem" xsi:type="spi:singlevalue">
<spi:value xsi:type="xsd:string">OCS</spi:value>
</spi:attribute>
<spi:attribute spi:name="MSISDN" xsi:type="spi:singlevalue">
<spi:value xsi:type="xsd:string">{MSISDN}</spi:value>
</spi:attribute>
<spi:attribute spi:name="HSSUserAdminBlock" xsi:type="spi:singlevalue">
<spi:value xsi:type="xsd:boolean">false</spi:value>
</spi:attribute>
<spi:attribute spi:name="IMSPrivateID" xsi:type="spi:singlevalue">
<spi:value xsi:type="xsd:string">{username}</spi:value>
</spi:attribute>
</spi:attributes>
</spi:service>
</spi:request>
</spi:updateService>
</soapenv:Body>
</soapenv:Envelope>
</command>
<success_message>//ns1:updateServiceResponse</success_message>
</action_script>
【问题讨论】:
-
您的数据是什么样的?它是干净有效的xml吗?
-
看起来像一个无限递归循环,但不知道是什么原因造成的......
-
已添加到 Michael 评论中,尝试发布您获得的示例 xml 作为此代码的输入,如果可能,请在此处发布。
-
如果 dom4j 允许,我会感到惊讶,但是当元素是它自己的祖先时,您还没有创建 XML 文档?
-
您应该尝试调试代码以查看异常发生时堆栈跟踪的样子。如果存在重复的相同方法调用序列的模式,那么查看 XML 解析器库尝试执行的操作可能会有所帮助。
标签: java stack-overflow dom4j