HTTP 500-Fehlermeldung, beim senden von XML an server

Ich bin versucht, senden Sie eine XML-Datei auf meine RESTful-web-server, und erhalten eine XML-Datei zurück, aber ich erhalte einen 500 Fehler.

java.io.IOException: Server returned HTTP response code: 500 for URL:
http://sps-psa-240:8080/NMCJWS/rest/jmsmon2/pub an
Sonne.net.www.Protokoll.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1436)
bei SendXML.senden(SendXML.java:151)

bei SendXML.main(SendXML.java:39)

Linie 151 ist InputStream response = uc.getInputStream();

Wenn ich die Auskommentierung System.out.println(((HttpURLConnection) uc).getResponseCode());,
dann bekomme ich den gleichen Fehler auf OutputStreamWriter out = new OutputStreamWriter(uc.getOutputStream());

Ich weiß, funktioniert der server denn, ein Kollege hat diese Arbeit in Obj-C.

Hier ist mein code:

public class SendXML 
{
    public static void main(String[] args) throws SAXException, XPathExpressionException, ParserConfigurationException, 
                                                IOException, TransformerException 
    {   
        String xml = generateXML("AC24", "/fa/gdscc/dss24-apc");
        send("localhost", xml); 
    }

    public static String generateXML(String conn, String funcAddr) throws ParserConfigurationException, SAXException, 
                                                IOException, XPathExpressionException, TransformerException 
    {
        /*
         * <?xml version="1.0" encoding="UTF-8"?>
            <JMSMON2Req>
                <SubItem UID="iPAD-2031e616-de74-44a7-9292-3745d2b1ba21">
                    <FuncAddr>/fa/gdscc/con1-ac25</FuncAddr>
                    <ItemName>AZANG</ItemName>
                    <ItemName>ELANG</ItemName>
                    <Metadata key="UID">iPAD-2031e616-de74-44a7-9292-3745d2b1ba21</Metadata>
                    <Metadata key="CONN">1</Metadata>
                </SubItem>
            </JMSMON2Req>
         */

        DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
        domFactory.setNamespaceAware(true); //never forget this!
        DocumentBuilder builder = domFactory.newDocumentBuilder();
        Document doc = builder.parse("http://sps-psa-240:8080/NMCWS/rest/conn/subsys/prof?ss=" + conn + "&pt=IPAD_DASHBOARD");

        XPath xpath = XPathFactory.newInstance().newXPath();
        XPathExpression expr = xpath.compile("/SubscrProf/DataItem/DataItemName");

        Object result = expr.evaluate(doc, XPathConstants.NODESET);
        NodeList nodes = (NodeList) result;

        //build xml
        Document output = builder.newDocument();

        //create root
        org.w3c.dom.Element root = output.createElement("JMSMON2Req");
        output.appendChild(root);

            //create subitem
            org.w3c.dom.Element subItemNode = output.createElement("SubItem");
            subItemNode.setAttribute("UID", "IPAD-CN1-DSS26-SC151-PN230-AC26");
            root.appendChild(subItemNode);

                //create funcAddr
                org.w3c.dom.Element funcAddrNode = output.createElement("FuncAddr");
                Text text = output.createTextNode(funcAddr);
                funcAddrNode.appendChild(text);
                subItemNode.appendChild(funcAddrNode);

                //create itemname
                for (int i = 0; i < nodes.getLength(); i++) 
                {
                    org.w3c.dom.Element itemNameNode = output.createElement("SubItem");
                    text = output.createTextNode(nodes.item(i).getTextContent());
                    itemNameNode.appendChild(text);
                    subItemNode.appendChild(itemNameNode);
                }

                //create metadata uid
                org.w3c.dom.Element metaDataNode = output.createElement("Metadata");
                metaDataNode.setAttribute("key", "UID");
                text = output.createTextNode("IPAD-CN1-DSS26-SC151-PN230-AC26");
                metaDataNode.appendChild(text);
                subItemNode.appendChild(metaDataNode);

                //create metadata conn
                org.w3c.dom.Element metaDataNode2 = output.createElement("Metadata");
                metaDataNode2.setAttribute("key", "CONN");
                text = output.createTextNode("4");
                metaDataNode2.appendChild(text);
                subItemNode.appendChild(metaDataNode2);

        /////////////////
        //Output the XML

        //set up a transformer
        TransformerFactory transfac = TransformerFactory.newInstance();
        Transformer trans = transfac.newTransformer();
        trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
        trans.setOutputProperty(OutputKeys.INDENT, "yes");

        //create string from xml tree
        StringWriter sw = new StringWriter();
        StreamResult out = new StreamResult(sw);
        DOMSource source = new DOMSource(output);

        trans.transform(source, out);
        String xmlString = sw.toString();

        //print xml
        System.out.println("Here's the xml:\n" + xmlString);

        return xmlString;
    }

    public static void send(String urladdress, String file) throws MalformedURLException, IOException
    {
        String charset = "UTF-8";
        String s = URLEncoder.encode(file, charset);

        //Open the connection and prepare to POST
        URLConnection uc = new URL(urladdress).openConnection();
        uc.setDoOutput(true);
        uc.setRequestProperty("Accept-Charset", charset);
        uc.setRequestProperty("Content-Type","text/xml");

        try
        {
            //System.out.println(((HttpURLConnection) uc).getResponseCode());
            OutputStreamWriter out = new OutputStreamWriter(uc.getOutputStream());
            out.write(s);
            out.flush();

            InputStream response = uc.getInputStream();
            BufferedReader r = new BufferedReader(new InputStreamReader(response));
            String line;

            while ((line = r.readLine()) != null)
                System.out.println(line);


            out.close();
            response.close();
        }
        catch (IOException e)
        { 
            e.printStackTrace();    //should do real exception handling
        }

    }
}
HTTP 500 bedeutet in der Regel, dass der server-code ist, wirf eine Ausnahme (oft verursacht durch einen bug in der server-code, welcher wiederum kann ausgelöst werden durch eine schlechte user-input). Lesen Sie die server-logs. Was ist zu sagen über die Ursache der HTTP 500-Fehler? Das ist dann die Antwort auf Ihre Frage.
Ich bin nicht in der Lage zu testen, aber Sie müssen möglicherweise schließen Sie die Ausgabe-stream, bevor die Eingabe gelesen.
Schließen der Ausgabe-stream vor dem Lesen der Eingabe nicht beheben kann.
Stellen Sie sicher, dass die generierten XML ist die gleiche wie Ihre Kollegen, die arbeiten. Ich merke verwenden Sie die OMIT_XML_DECLARATION Eigenschaft mit einem " ja " Wert, aber die kommentierte Probe hat, die Erklärung. Darüber hinaus haben Sie zum anzeigen der server-Protokolle, wie andere vorgeschlagen haben, und hinzufügen, dass Fehler detail zu deiner Frage.
Wenn ich hinzufügen org.w3c.dom.Element root = output.createElement("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); bekomme ich einen INVALID_CHARACTER_ERR: Eine ungültige oder illegale XML-Zeichen angegeben ist. Das ist, da es Leerzeichen im Namen. Trotzdem, dass zu beheben?

InformationsquelleAutor Raptrex | 2011-07-12

Schreibe einen Kommentar