You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@axis.apache.org by xu cai <je...@gmail.com> on 2006/07/23 06:51:16 UTC
Got well-formd soap response, but still with org.xml.sax.SAXParseException: Premature end of file
hi, this time, I debug with tcpmon, and find that the soap response is
well-formed.
but I still get a "org.xml.sax.SAXParseException: Premature end of file".
I find that there is an namespace definition "xmlns:ns1=
http://www.test.com/test/i01 in soap response, and xml parser may not get
schema of this namespace and finally report the error.
So my question is how to associate my xsd file with the namespace in client
side code ? so that the the following generated soap response can be parsed
well ?
thanks
-Jeffrey
soap response:
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<ns1:requestResponse soapenv:encodingStyle="
http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="
http://www.test.com/test/i01">
<requestReturn href="#id0"/>
</ns1:requestResponse>
<multiRef id="id0" soapenc:root="0" soapenv:encodingStyle="
http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns2:Reply"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns2="
http://www.test.com/test/i01">
<Status xsi:type="xsd:boolean">true</Status>
<Reason xsi:type="soapenc:string">hello world</Reason>
<Size xsi:type="xsd:int">0</Size>
<AbsoluteSize xsi:type="xsd:int">0</AbsoluteSize>
<StartRow xsi:type="xsd:int">0</StartRow>
</multiRef>
</soapenv:Body>
</soapenv:Envelope>
exception:
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: org.xml.sax.SAXParseException: Premature end of file.
faultActor:
faultNode:
faultDetail:
{
http://xml.apache.org/axis/}stackTrace:org.xml.sax.SAXParseException:
Premature end of file.
at
org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown
Source)
at org.apache.xerces.util.ErrorHandlerWrapper.fatalError(Unknown
Source)
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown
Source)
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown
Source)
at org.apache.xerces.impl.XMLVersionDetector.determineDocVersion(Unknown
Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown
Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown
Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown
Source)
at javax.xml.parsers.SAXParser.parse(SAXParser.java:375)
at org.apache.axis.encoding.DeserializationContext.parse(
DeserializationContext.java:235)
at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:697)
at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(
MustUnderstandChecker.java:62)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
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)
Re: Got well-formd soap response, but still with org.xml.sax.SAXParseException: Premature end of file
Posted by xu cai <je...@gmail.com>.
Really weird, I change a little on
org.apache.axis.encoding.DeserializationContext.java,
write the Soap response to a txt file, and parse the the Soap response from
the txt file.
and this time, the boring "org.xml.sax.SAXParseException: Premature end of
file" disappeared.
Following is snippet of org.apache.axis.encoding.DeserializationContext.java,
I made change from line 237 to 239.
231 public void parse() throws SAXException
232 {
233 if (inputSource != null) {
234 SAXParser parser = XMLUtils.getSAXParser();
235 try {
236 parser.setProperty("
http://xml.org/sax/properties/lexical-handler", this);
237 printIs(inputSource); //write the soap response to
/tmp/a.txt
238 parser.parse(new
FileInputStream("/tmp/a.txt"),this); // parse the /tmp/a.txt
239 //parser.parse(inputSource, this);
240
241 try {
242 // cleanup - so that the parser can be reused.
243 parser.setProperty("
http://xml.org/sax/properties/lexical-handler", null
LexicalHandler);
244 } catch (Exception e){
245 // Ignore.
246 }
247
248 // only release the parser for reuse if there wasn't
an
249 // error. While parsers should be reusable, don't
trust
250 // parsers that died to clean up appropriately.
251 XMLUtils.releaseSAXParser(parser);
252 } catch (IOException e) {
253 throw new SAXException(e);
254 }
255 inputSource = null;
256 }
257 }
258
So seems that the reply soap message is well-formed, but may be less of one
of control character ? Could anybody give me a explain ? or it's a bug of
Axis 1.4?
On 7/23/06, xu cai <je...@gmail.com> wrote:
>
> hi, this time, I debug with tcpmon, and find that the soap response is
> well-formed.
> but I still get a "org.xml.sax.SAXParseException: Premature end of file".
>
> I find that there is an namespace definition "xmlns:ns1=
> http://www.test.com/test/i01 in soap response, and xml parser may not get
> schema of this namespace and finally report the error.
>
> So my question is how to associate my xsd file with the namespace in
> client side code ? so that the the following generated soap response can be
> parsed well ?
>
> thanks
> -Jeffrey
>
> soap response:
>
> <?xml version="1.0" encoding="utf-8"?>
> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
> xmlns:xsd="http://www.w3.org/2001/XMLSchema " xmlns:xsi="
> http://www.w3.org/2001/XMLSchema-instance"><http://www.w3.org/2001/XMLSchema-instance%22%3E>
> <soapenv:Body>
> <ns1:requestResponse soapenv:encodingStyle="
> http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="http://www.test.com/test/i01"><http://www.test.com/test/i01%22%3E>
> <requestReturn href="#id0"/>
> </ns1:requestResponse>
> <multiRef id="id0" soapenc:root="0" soapenv:encodingStyle="
> http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns2:Reply"
> xmlns:soapenc=" http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns2="
> http://www.test.com/test/i01"> <http://www.test.com/test/i01%22%3E>
> <Status xsi:type="xsd:boolean">true</Status>
> <Reason xsi:type="soapenc:string">hello world</Reason>
> <Size xsi:type="xsd:int">0</Size>
> <AbsoluteSize xsi:type="xsd:int">0</AbsoluteSize>
> <StartRow xsi:type="xsd:int">0</StartRow>
> </multiRef>
> </soapenv:Body>
> </soapenv:Envelope>
>
> exception:
> AxisFault
> faultCode: {
> http://schemas.xmlsoap.org/soap/envelope/}Server.userException<http://schemas.xmlsoap.org/soap/envelope/%7DServer.userException>
> faultSubcode:
> faultString: org.xml.sax.SAXParseException : Premature end of file.
> faultActor:
> faultNode:
> faultDetail:
> {http://xml.apache.org/axis/}stackTrace:org.xml.sax.SAXParseException
> <http://xml.apache.org/axis/%7DstackTrace:org.xml.sax.SAXParseException>:
> Premature end of file.
> at
> org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown
> Source)
> at org.apache.xerces.util.ErrorHandlerWrapper.fatalError(Unknown
> Source)
> at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown
> Source)
> at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown
> Source)
> at org.apache.xerces.impl.XMLVersionDetector.determineDocVersion(Unknown Source)
> at org.apache.xerces.parsers.XML11Configuration.parse(Unknown
> Source)
> at org.apache.xerces.parsers.XML11Configuration.parse(Unknown
> Source)
> at org.apache.xerces.parsers.XMLParser.parse (Unknown Source)
> at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown
> Source)
> at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown
> Source)
> at javax.xml.parsers.SAXParser.parse (SAXParser.java:375)
> at org.apache.axis.encoding.DeserializationContext.parse(
> DeserializationContext.java:235)
> at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:697)
> at org.apache.axis.Message.getSOAPEnvelope (Message.java:435)
> at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(
> MustUnderstandChecker.java:62)
> at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
> 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)
>
>
>
--
- xucai
Re: Got well-formd soap response, but still with org.xml.sax.SAXParseException: Premature end of file
Posted by xu cai <je...@gmail.com>.
Really weird, I change a little on
org.apache.axis.encoding.DeserializationContext.java,
write the Soap response to a txt file, and parse the the Soap response from
the txt file.
and this time, the boring "org.xml.sax.SAXParseException: Premature end of
file" disappeared.
Following is snippet of org.apache.axis.encoding.DeserializationContext.java,
I made change from line 237 to 239.
231 public void parse() throws SAXException
232 {
233 if (inputSource != null) {
234 SAXParser parser = XMLUtils.getSAXParser();
235 try {
236 parser.setProperty("
http://xml.org/sax/properties/lexical-handler", this);
237 printIs(inputSource); //write the soap response to
/tmp/a.txt
238 parser.parse(new
FileInputStream("/tmp/a.txt"),this); // parse the /tmp/a.txt
239 //parser.parse(inputSource, this);
240
241 try {
242 // cleanup - so that the parser can be reused.
243 parser.setProperty("
http://xml.org/sax/properties/lexical-handler", null
LexicalHandler);
244 } catch (Exception e){
245 // Ignore.
246 }
247
248 // only release the parser for reuse if there wasn't
an
249 // error. While parsers should be reusable, don't
trust
250 // parsers that died to clean up appropriately.
251 XMLUtils.releaseSAXParser(parser);
252 } catch (IOException e) {
253 throw new SAXException(e);
254 }
255 inputSource = null;
256 }
257 }
258
So seems that the reply soap message is well-formed, but may be less of one
of control character ? Could anybody give me a explain ? or it's a bug of
Axis 1.4?
On 7/23/06, xu cai <je...@gmail.com> wrote:
>
> hi, this time, I debug with tcpmon, and find that the soap response is
> well-formed.
> but I still get a "org.xml.sax.SAXParseException: Premature end of file".
>
> I find that there is an namespace definition "xmlns:ns1=
> http://www.test.com/test/i01 in soap response, and xml parser may not get
> schema of this namespace and finally report the error.
>
> So my question is how to associate my xsd file with the namespace in
> client side code ? so that the the following generated soap response can be
> parsed well ?
>
> thanks
> -Jeffrey
>
> soap response:
>
> <?xml version="1.0" encoding="utf-8"?>
> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
> xmlns:xsd="http://www.w3.org/2001/XMLSchema " xmlns:xsi="
> http://www.w3.org/2001/XMLSchema-instance"><http://www.w3.org/2001/XMLSchema-instance%22%3E>
> <soapenv:Body>
> <ns1:requestResponse soapenv:encodingStyle="
> http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="http://www.test.com/test/i01"><http://www.test.com/test/i01%22%3E>
> <requestReturn href="#id0"/>
> </ns1:requestResponse>
> <multiRef id="id0" soapenc:root="0" soapenv:encodingStyle="
> http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns2:Reply"
> xmlns:soapenc=" http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns2="
> http://www.test.com/test/i01"> <http://www.test.com/test/i01%22%3E>
> <Status xsi:type="xsd:boolean">true</Status>
> <Reason xsi:type="soapenc:string">hello world</Reason>
> <Size xsi:type="xsd:int">0</Size>
> <AbsoluteSize xsi:type="xsd:int">0</AbsoluteSize>
> <StartRow xsi:type="xsd:int">0</StartRow>
> </multiRef>
> </soapenv:Body>
> </soapenv:Envelope>
>
> exception:
> AxisFault
> faultCode: {
> http://schemas.xmlsoap.org/soap/envelope/}Server.userException<http://schemas.xmlsoap.org/soap/envelope/%7DServer.userException>
> faultSubcode:
> faultString: org.xml.sax.SAXParseException : Premature end of file.
> faultActor:
> faultNode:
> faultDetail:
> {http://xml.apache.org/axis/}stackTrace:org.xml.sax.SAXParseException
> <http://xml.apache.org/axis/%7DstackTrace:org.xml.sax.SAXParseException>:
> Premature end of file.
> at
> org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown
> Source)
> at org.apache.xerces.util.ErrorHandlerWrapper.fatalError(Unknown
> Source)
> at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown
> Source)
> at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown
> Source)
> at org.apache.xerces.impl.XMLVersionDetector.determineDocVersion(Unknown Source)
> at org.apache.xerces.parsers.XML11Configuration.parse(Unknown
> Source)
> at org.apache.xerces.parsers.XML11Configuration.parse(Unknown
> Source)
> at org.apache.xerces.parsers.XMLParser.parse (Unknown Source)
> at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown
> Source)
> at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown
> Source)
> at javax.xml.parsers.SAXParser.parse (SAXParser.java:375)
> at org.apache.axis.encoding.DeserializationContext.parse(
> DeserializationContext.java:235)
> at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:697)
> at org.apache.axis.Message.getSOAPEnvelope (Message.java:435)
> at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(
> MustUnderstandChecker.java:62)
> at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
> 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)
>
>
>
--
- xucai