我在本机部署了一个WEBSERVICE用客户端调用没问题,可得到返回值,然后部署到服务器上的时候,却报错,服务器上不是一个新环境,是现有的一个工程,我只是把内容合并到了服务器上,包括WSDD,CLASS,LIB,请各位DX帮忙看看啊,很急
报错信息如下:
[code="java"]2008-10-22 15:50:30 DEBUG main - NSPush (32)
2008-10-22 15:50:30 DEBUG main - org.apache.axis.i18n.resource::handleGetObject(empty00)
2008-10-22 15:50:30 DEBUG main - NSPop (empty)
2008-10-22 15:50:30 DEBUG main - NSPush (32)
2008-10-22 15:50:30 DEBUG main - org.apache.axis.i18n.resource::handleGetObject(empty00)
2008-10-22 15:50:30 DEBUG main - NSPop (empty)
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: org.xml.sax.SAXParseException: The root element is required in a well-formed document.
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}stackTrace:org.xml.sax.SAXParseException: The root element is required in a well-formed document.
at org.apache.xerces.framework.XMLParser.reportError(XMLParser.java:1213)
at org.apache.xerces.framework.XMLDocumentScanner.reportFatalXMLError(XMLDocumentScanner.java:570)
at org.apache.xerces.framework.XMLDocumentScanner$XMLDeclDispatcher.endOfInput(XMLDocumentScanner.java:790)
at org.apache.xerces.framework.XMLDocumentScanner.endOfInput(XMLDocumentScanner.java:418)
at org.apache.xerces.validators.common.XMLValidator.sendEndOfInputNotifications(XMLValidator.java:712)
at org.apache.xerces.readers.DefaultEntityHandler.changeReaders(DefaultEntityHandler.java:1031)
at org.apache.xerces.readers.XMLEntityReader.changeReaders(XMLEntityReader.java:168)
at org.apache.xerces.readers.UTF8Reader.changeReaders(UTF8Reader.java:182)
at org.apache.xerces.readers.UTF8Reader.lookingAtChar(UTF8Reader.java:197)
at org.apache.xerces.framework.XMLDocumentScanner$XMLDeclDispatcher.dispatch(XMLDocumentScanner.java:686)
at org.apache.xerces.framework.XMLDocumentScanner.parseSome(XMLDocumentScanner.java:381)
at org.apache.xerces.framework.XMLParser.parse(XMLParser.java:1098)
at javax.xml.parsers.SAXParser.parse(Unknown Source)
at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
at org.apache.axis.transport.http.HTTPSender.readFromSocket(HTTPSender.java:796)
at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:144)
at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:2443)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
at com.cattsoft.hainan.sync.INASProvisionSoapBindingStub.asyncResultService(INASProvisionSoapBindingStub.java:462)
at com.ztesoft.oss.zjinterface.ispp.client.bl.IomToInassYnc.test(IomToInassYnc.java:222)
at com.ztesoft.oss.zjinterface.ispp.client.bl.IomToIsapGFacadeTest.main(IomToIsapGFacadeTest.java:39)
{http://xml.apache.org/axis/}hostname:uyt-d8ee464767b
org.xml.sax.SAXParseException: The root element is required in a well-formed document.
at org.apache.axis.AxisFault.makeFault(AxisFault.java:101)
at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:701)
at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
at org.apache.axis.transport.http.HTTPSender.readFromSocket(HTTPSender.java:796)
at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:144)
at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:2443)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
at com.cattsoft.hainan.sync.INASProvisionSoapBindingStub.asyncResultService(INASProvisionSoapBindingStub.java:462)
at com.ztesoft.oss.zjinterface.ispp.client.bl.IomToInassYnc.test(IomToInassYnc.java:222)
at com.ztesoft.oss.zjinterface.ispp.client.bl.IomToIsapGFacadeTest.main(IomToIsapGFacadeTest.java:39)
Caused by: org.xml.sax.SAXParseException: The root element is required in a well-formed document.
at org.apache.xerces.framework.XMLParser.reportError(XMLParser.java:1213)
at org.apache.xerces.framework.XMLDocumentScanner.reportFatalXMLError(XMLDocumentScanner.java:570)
at org.apache.xerces.framework.XMLDocumentScanner$XMLDeclDispatcher.endOfInput(XMLDocumentScanner.java:790)
at org.apache.xerces.framework.XMLDocumentScanner.endOfInput(XMLDocumentScanner.java:418)
at org.apache.xerces.validators.common.XMLValidator.sendEndOfInputNotifications(XMLValidator.java:712)
at org.apache.xerces.readers.DefaultEntityHandler.changeReaders(DefaultEntityHandler.java:1031)
at org.apache.xerces.readers.XMLEntityReader.changeReaders(XMLEntityReader.java:168)
at org.apache.xerces.readers.UTF8Reader.changeReaders(UTF8Reader.java:182)
at org.apache.xerces.readers.UTF8Reader.lookingAtChar(UTF8Reader.java:197)
at org.apache.xerces.framework.XMLDocumentScanner$XMLDeclDispatcher.dispatch(XMLDocumentScanner.java:686)
at org.apache.xerces.framework.XMLDocumentScanner.parseSome(XMLDocumentScanner.java:381)
at org.apache.xerces.framework.XMLParser.parse(XMLParser.java:1098)
at javax.xml.parsers.SAXParser.parse(Unknown Source)
at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
... 15 more[/code]
I have found the problem:
Axis1 (and I believe this is what the core saaj implementation of websphere is based on) caches the InputStream for later use.
When calling the MessageFactory.createMessage(mimeHeaders,InputStre am) the implementation of Axis1 (and websphere) caches the inputstream.
In AbstractWebServiceConnection.receive however, the inputstream is closed after creating the message. Causing Axis to lose the message contents and thus a SAXParseException later on in the process
I have implemented my own version of the MessageFacroryImpl that convert the inputstream to a byte[].. Hopefully this problem can be solved within Spring-WS.. Maybe not closing the InputStream?
Hope this helps
rgds
Joost