版權聲明:轉載請注明出處 https://blog.csdn.net/seashouwang/article/details/24014669
xfire使用中出現故障:
1.
[2014-04-16 14:51:07.564]-[ERROR] org.apache.struts2.dispatcher.Dispatcher Exception occurred during processing request: Could not read XML stream.. Nested exception is javax.xml.stream.XMLStreamException: ParseError at [row,col]:[6,648]
Message: elementGetText() function expects text only elment but START_ELEMENT was encountered.
org.codehaus.xfire.fault.XFireFault: Could not read XML stream.. Nested exception is javax.xml.stream.XMLStreamException: ParseError at [row,col]:[6,648]
Message: elementGetText() function expects text only elment but START_ELEMENT was encountered.
at org.codehaus.xfire.fault.XFireFault.createFault(XFireFault.java:89)
Caused by: org.codehaus.xfire.XFireRuntimeException: Could not read XML stream.. Nested exception is javax.xml.stream.XMLStreamException: ParseError at [row,col]:[6,648]
Message: elementGetText() function expects text only elment but START_ELEMENT was encountered.
at org.codehaus.xfire.aegis.stax.ElementReader.getValue(ElementReader.java:128)
at org.codehaus.xfire.aegis.type.basic.StringType.readObject(StringType.java:21)
at org.codehaus.xfire.aegis.type.basic.BeanType.readObject(BeanType.java:159)
at org.codehaus.xfire.aegis.type.basic.ArrayType.readCollection(ArrayType.java:80)
at org.codehaus.xfire.aegis.type.collection.CollectionType.readObject(CollectionType.java:36)
at org.codehaus.xfire.aegis.AegisBindingProvider.readParameter(AegisBindingProvider.java:169)
at org.codehaus.xfire.service.binding.AbstractBinding.read(AbstractBinding.java:206)
at org.codehaus.xfire.service.binding.WrappedBinding.readMessage(WrappedBinding.java:51)
at org.codehaus.xfire.soap.handler.SoapBodyHandler.invoke(SoapBodyHandler.java:42)
at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)
at org.codehaus.xfire.client.Client.onReceive(Client.java:406)
... 82 more
Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[6,648]
Message: elementGetText() function expects text only elment but START_ELEMENT was encountered.
at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.getElementText(XMLStreamReaderImpl.java:851)
at org.codehaus.xfire.util.stax.DepthXMLStreamReader.getElementText(DepthXMLStreamReader.java:86)
at org.codehaus.xfire.util.stax.DepthXMLStreamReader.getElementText(DepthXMLStreamReader.java:86)
at org.codehaus.xfire.aegis.stax.ElementReader.getValue(ElementReader.java:122)
... 92 more
2.
Caused by: org.codehaus.xfire.XFireRuntimeException: Could not read XML stream..
Nested exception is com.ctc.wstx.exc.WstxParsingException: Expected a text token, got START_ELEMENT.
問題描寫敘述:以上是導入文本件出現錯誤信息,使用的是字符流進行讀取文件,在action層做了對應的處理特殊字符,在傳輸到service是出現不能解析。
1.
[2014-04-16 14:51:07.564]-[ERROR] org.apache.struts2.dispatcher.Dispatcher Exception occurred during processing request: Could not read XML stream.. Nested exception is javax.xml.stream.XMLStreamException: ParseError at [row,col]:[6,648]
Message: elementGetText() function expects text only elment but START_ELEMENT was encountered.
org.codehaus.xfire.fault.XFireFault: Could not read XML stream.. Nested exception is javax.xml.stream.XMLStreamException: ParseError at [row,col]:[6,648]
Message: elementGetText() function expects text only elment but START_ELEMENT was encountered.
at org.codehaus.xfire.fault.XFireFault.createFault(XFireFault.java:89)
Caused by: org.codehaus.xfire.XFireRuntimeException: Could not read XML stream.. Nested exception is javax.xml.stream.XMLStreamException: ParseError at [row,col]:[6,648]
Message: elementGetText() function expects text only elment but START_ELEMENT was encountered.
at org.codehaus.xfire.aegis.stax.ElementReader.getValue(ElementReader.java:128)
at org.codehaus.xfire.aegis.type.basic.StringType.readObject(StringType.java:21)
at org.codehaus.xfire.aegis.type.basic.BeanType.readObject(BeanType.java:159)
at org.codehaus.xfire.aegis.type.basic.ArrayType.readCollection(ArrayType.java:80)
at org.codehaus.xfire.aegis.type.collection.CollectionType.readObject(CollectionType.java:36)
at org.codehaus.xfire.aegis.AegisBindingProvider.readParameter(AegisBindingProvider.java:169)
at org.codehaus.xfire.service.binding.AbstractBinding.read(AbstractBinding.java:206)
at org.codehaus.xfire.service.binding.WrappedBinding.readMessage(WrappedBinding.java:51)
at org.codehaus.xfire.soap.handler.SoapBodyHandler.invoke(SoapBodyHandler.java:42)
at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)
at org.codehaus.xfire.client.Client.onReceive(Client.java:406)
... 82 more
Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[6,648]
Message: elementGetText() function expects text only elment but START_ELEMENT was encountered.
at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.getElementText(XMLStreamReaderImpl.java:851)
at org.codehaus.xfire.util.stax.DepthXMLStreamReader.getElementText(DepthXMLStreamReader.java:86)
at org.codehaus.xfire.util.stax.DepthXMLStreamReader.getElementText(DepthXMLStreamReader.java:86)
at org.codehaus.xfire.aegis.stax.ElementReader.getValue(ElementReader.java:122)
... 92 more
2.
Caused by: org.codehaus.xfire.XFireRuntimeException: Could not read XML stream..
Nested exception is com.ctc.wstx.exc.WstxParsingException: Expected a text token, got START_ELEMENT.
問題描寫敘述:以上是導入文本件出現錯誤信息,使用的是字符流進行讀取文件,在action層做了對應的處理特殊字符,在傳輸到service是出現不能解析。
看了網上非常多人提出的jdk問題。沖突問題等解決的方法,都試過沒有一個能夠。
最后找到一個網友的解決的方法最可行。就是改動wstx.jar文件。
解決方法:以上問題主要是在傳輸文本或者xml過程中出現特殊字符,xfire公布的webservice中不能解析一下特殊字符,比方&,¥,{},<>等或者是編碼問題。使用統一編碼格式傳遞參數。
將xfire中的wstx-asl-3.2.9.jar包中BaseStreamWriter類中的方法處理xml部分進行改動,加上處理特殊字符就可以解決這個問題。
以上解決方式來自於博客園以為網友提供的解決方式。非常感謝該網友提供的幫助。該網友提供的解決方式例如以下:
1.改動wstx-asl-3.2.9.jar包中BaseStreamWriter類。
至於改動的文件本人一起上傳到資源。希望對遇到此問題的朋友一個小小的幫助。
2.用法:能夠直接使用wstx-asl-3.2.9.jar包,改包中已經包括被改動的文件。或者使用BaseStreamWriter源文件放在src文件夾下。