title: HTTP 500 error when sending XML to server
body: <p>I am trying to send an XML file to my RESTful web server, and receive a XML file in return, however, I am getting a 500 error.</p>
  
  <blockquote>
    <p>java.io.IOException: Server returned HTTP response code: 500 for URL:
    <a href="http://sps-psa-240:8080/NMCJWS/rest/jmsmon2/pub" rel="nofollow">http://sps-psa-240:8080/NMCJWS/rest/jmsmon2/pub</a>   at
    sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1436)
      at SendXML.send(SendXML.java:151)<br>
          at SendXML.main(SendXML.java:39)</p>
  </blockquote>
  
  <p>Line 151 is <code>InputStream response = uc.getInputStream();</code></p>
  
  <p>If I uncomment <code>System.out.println(((HttpURLConnection) uc).getResponseCode());</code>, 
  then I get the same error on <code>OutputStreamWriter out = new OutputStreamWriter(uc.getOutputStream());</code></p>
  
  <p>I know the server works because a coworker has this working in Obj-C.</p>
  
  <p>Here is my code:</p>
  
  <pre><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 
      {
          /*
           * &lt;?xml version="1.0" encoding="UTF-8"?&gt;
              &lt;JMSMON2Req&gt;
                  &lt;SubItem UID="iPAD-2031e616-de74-44a7-9292-3745d2b1ba21"&gt;
                      &lt;FuncAddr&gt;/fa/gdscc/con1-ac25&lt;/FuncAddr&gt;
                      &lt;ItemName&gt;AZANG&lt;/ItemName&gt;
                      &lt;ItemName&gt;ELANG&lt;/ItemName&gt;
                      &lt;Metadata key="UID"&gt;iPAD-2031e616-de74-44a7-9292-3745d2b1ba21&lt;/Metadata&gt;
                      &lt;Metadata key="CONN"&gt;1&lt;/Metadata&gt;
                  &lt;/SubItem&gt;
              &lt;/JMSMON2Req&gt;
           */
  
          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 + "&amp;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 &lt; 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
          }
  
      }
  }
  </code></pre>