0

我有以下代码来调用 URL:http://10.105.0.120/24online/servlet/ClientRegistrationResponse?action=response&phone=919638983856&actioncode=0000

代码 :

StringBuffer request=new StringBuffer();
             request.append(xml);
             URL url = new URL(url);
             HttpURLConnection obj = null;   
                obj = (HttpURLConnection)url.openConnection();  //create a SSL connection object server-to-server

                ((URLConnection)obj).setDoInput(true);
                ((URLConnection)obj).setDoOutput(true);
                ((URLConnection)obj).setUseCaches(false);
//              ((URLConnection)obj).setReadTimeout(10);
                ((URLConnection)obj).setRequestProperty("Content-Type","application/x-www-form-urlencoded");
                obj.setRequestMethod("POST");
                obj.setRequestProperty("charset", "US-ASCII");
                //obj.setConnectTimeout(PropertyReader.IN_REQUEST_TIMEOUT);
                //obj.setReadTimeout(PropertyReader.IN_REQUEST_TIMEOUT);
                // Here the HTTPS request URL is created

                DataOutputStream dataoutputstream = new DataOutputStream(((URLConnection)obj).getOutputStream());
                dataoutputstream.writeBytes(request.toString());    //request
                //dataoutputstream.flush(); 
                dataoutputstream.close(); //connection closed
                BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(((URLConnection)obj).getInputStream()));
                String res = "";

                                while ( (res = bufferedreader.readLine()) != null ) {

                    conresponse += res;
                }
                bufferedreader.close();

但我收到以下错误:

java.io.IOException: Server returned HTTP response code: 500 for URL: http://10.105.0.120/24online/servlet/ClientRegistrationResponse?action=response&phone=919638983856&actioncode=0000
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1313)
    at cyberoam.corporate.integration.XMLSenderReceiver.sendFileData1(XMLSenderReceiver.java:70)
    at cyberoam.corporate.modes.TopupRequestThread.sendTopupRequest(TopupRequestThread.java:56)
    at cyberoam.corporate.modes.TopupRequestThread.run(TopupRequestThread.java:31)
org.jdom.input.JDOMParseException: Error on line -1: Premature end of file.
    at org.jdom.input.SAXBuilder.build(SAXBuilder.java:504)
    at cyberoam.corporate.integration.XMLProcessor.parseXML(XMLProcessor.java:392)
    at cyberoam.corporate.modes.TopupRequestThread.sendTopupRequest(TopupRequestThread.java:62)
    at cyberoam.corporate.modes.TopupRequestThread.run(TopupRequestThread.java:31)
Caused by: 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.jdom.input.SAXBuilder.build(SAXBuilder.java:489)
    ... 3 more
Caused by: 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.jdom.input.SAXBuilder.build(SAXBuilder.java:489)
    at cyberoam.corporate.integration.XMLProcessor.parseXML(XMLProcessor.java:392)
    at cyberoam.corporate.modes.TopupRequestThread.sendTopupRequest(TopupRequestThread.java:62)
    at cyberoam.corporate.modes.TopupRequestThread.run(TopupRequestThread.java:31)
Caused by: 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.jdom.input.SAXBuilder.build(SAXBuilder.java:489)
    at cyberoam.corporate.integration.XMLProcessor.parseXML(XMLProcessor.java:392)
    at cyberoam.corporate.modes.TopupRequestThread.sendTopupRequest(TopupRequestThread.java:62)
    at cyberoam.corporate.modes.TopupRequestThread.run(TopupRequestThread.java:31)
2012-07-12 18:52:49,416 - PIPE_COMM: In Receiving Object for /usr/local/nas/pipes/raam_to_gui_pipe
******************SMPPThread constructor called*****************

这个错误的原因是什么?就像我直接从浏览器调用 URL 一样,它工作得很好。

4

1 回答 1

1

Is there a question?

You have sent a bad request to the server, and it is responding with an internal server error (code 500). The logical thing to do is to check your HTTP server logs (it is a 10.* IP address, so it is local to you).

Also the JDOM Exceptions are in a different thread or something.... there is no JDOM related code in the code you show, and the exception stack traces are not linked in any way to the IOException with the 500 status response. Alternatively, you are ignoring the status-500 response (IOException), and then expecting the JDOM code in that same thread to parse a (probably empty) error-response from the server (which would no doubt end in a premature end-of-file).

You need to:

  • check your server logs
  • handle all exceptions appropriately
  • potentially add some debug code to enable you to inspect the data you send to / retrieve from the server.
于 2012-07-12T13:59:25.407 回答