Re: xmlOutputter question
"Rick Avlonitis" <[email protected]>
| Newsgroups | gmane.comp.java.jdom.general |
|---|---|
| Message-ID | <[email protected]> |
Thank you for the inputs. However, I have to disagree. My problem can be distilled like so: If I create a document from an ArrayList<Element> and try to post, the server doesn't update. If I create a document by parsing the file made from a document that was made from ArrayList<Element> and post, the server updates. This makes me think that the http output stream is not at fault, since it works for the case for the document built from a parsed file. (I have also since wrapped the httpOutputStream in a bufferedStreamReader and called flush(). Still nothing). It makes me think that there is a setting which is read from the parsed file which is not read from the ArrayList<Element>. So the above makes me wonder if ArrayList<Element> is a suitable list to work with. What other container could I use? Regards, Rick On Sat, Jan 17, 2009 at 1:49 AM, Joe Bowbeer <[email protected]> wrote: > I agree with Jason that you should close the output stream (which will also > flush) before getting the response code. > > Also, if you're going to be doing a lot of http processing I recommend > using Apache's httpclient instead of dealing with Java's HttpConnection > directly. > > > On Fri, Jan 16, 2009 at 5:26 AM, Rick Avlonitis wrote: > >> When I call xmlOutputter.output(docForPosting, http.getOutputStream()), >> this fails to update the data but I get: (Response Code: 200, Response >> Message: OK). >> But when I write the docForPosting to a file and then create a new >> document from the parsed file, I can successfully update the data (Response >> Code: 200, Response Message: OK). >> >> Why can I not put data successfully on the server with >> xmlOutputter.output(docForPosting, http.getOutputStream())? >> >> Your help will be appreciated. My code is below: >> >> >> package myJDom; >>> >>> import org.jdom.*; >>> import org.jdom.input.DOMBuilder; >>> import org.jdom.input.SAXBuilder; >>> import org.jdom.output.XMLOutputter; >>> import org.xml.sax.SAXException; >>> >>> import java.io.File; >>> import java.io.FileWriter; >>> import java.io.IOException; >>> import java.net.Authenticator; >>> import java.net.HttpURLConnection; >>> import java.net.URISyntaxException; >>> import java.net.URL; >>> import java.net.URLConnection; >>> import java.util.ArrayList; >>> import java.util.List; >>> >>> import javax.xml.parsers.DocumentBuilder; >>> import javax.xml.parsers.DocumentBuilderFactory; >>> import javax.xml.parsers.ParserConfigurationException; >>> >>> public class MyJDomParser { >>> protected List<Element> rawElementList = new ArrayList<Element>(); >>> protected List<Element> scrubbedElementList = new >>> ArrayList<Element>(); >>> protected List<Element> newElementList = new ArrayList<Element>(); >>> protected SAXBuilder saxBuilder = new SAXBuilder(); >>> protected DOMBuilder domBuilder = new DOMBuilder(); >>> protected Document rawDoc = new Document(); >>> protected Element element; >>> >>> @SuppressWarnings("unchecked") >>> public void parseUrl() throws JDOMException, IOException { >>> System.out.println("preparing to parse the elements..."); >>> URL url = new URL( >>> " >>> http://192.168.1.199:3334/sdata/slx/dynamic/accounts(A6UJ9A000036)<http://192.168.1.199:3334/sdata/slx/dynamic/accounts%28A6UJ9A000036%29> >>> "); >>> saxBuilder.setIgnoringElementContentWhitespace(true); >>> rawDoc = saxBuilder.build(url); >>> >>> element = rawDoc.getRootElement(); >>> rawElementList.addAll(element.getChildren()); >>> >>> for (int i = 0; i < 3; i++) {// remove 2 useless elements >>> rawElementList.remove(0); >>> } >>> >>> for (int i = 0; i < rawElementList.size(); i++) { >>> String s = rawElementList.get(i).getText(); >>> if (s != null && s != "") { >>> scrubbedElementList.add(rawElementList.get(i)); >>> } >>> } >>> >>> for (Element e : scrubbedElementList) { >>> System.out.println(e.getText()); >>> } >>> // for (Element e : rawElementList) { >>> // System.out.println(e.getText()); >>> // } >>> } >>> >>> public void getAllChangedElements() throws URISyntaxException { >>> System.out.println("preparing to change the data..."); >>> Element entry = new Element("entry"); >>> entry.addNamespaceDeclaration(Namespace.getNamespace("")); >>> newElementList.add(entry); >>> // rawElementList.add(entry); >>> >>> for (int i = 0; i < scrubbedElementList.size(); i++) { >>> String s = scrubbedElementList.get(i).getText(); >>> String name = scrubbedElementList.get(i).getName(); >>> if (s != null && s != "") { >>> if (name == "AccountName") { >>> s = "****55555******"; >>> } >>> Element e = new Element(name); >>> e.setText(s); >>> newElementList.add(e); >>> } >>> } >>> // return newData; >>> // for (Element e : newElementList) { >>> // System.out.println(e.getText()); >>> // } >>> } >>> >>> public void postData() throws IOException, JDOMException, >>> ParserConfigurationException, SAXException { >>> // building a document from DOM >>> DocumentBuilderFactory dbfac = >>> DocumentBuilderFactory.newInstance(); >>> DocumentBuilder docBuilder = dbfac.newDocumentBuilder(); >>> org.w3c.dom.Document docPrepareToPost = docBuilder.newDocument(); >>> >>> // create my root element >>> org.w3c.dom.Element root = >>> docPrepareToPost.createElement("entry"); >>> docPrepareToPost.appendChild(root); >>> >>> // add elements to my dom doc >>> for (int i = 0; i < newElementList.size(); i++) { >>> org.w3c.dom.Element child = docPrepareToPost >>> .createElement(newElementList.get(i).getName()); >>> child.setTextContent(newElementList.get(i).getText()); >>> root.appendChild(child); >>> } >>> >>> // parsing my doc from the file allows me a successful post >>> // FileWriter fs = new FileWriter("/home/rick/deleteme/crap2"); >>> // //posting is successful from this parsed file >>> // xmlOutputter.output(docForPosting, fs); >>> >>> DocumentBuilderFactory factory = >>> DocumentBuilderFactory.newInstance(); >>> docPrepareToPost = factory.newDocumentBuilder().parse( >>> new File("/home/rick/deleteme/crap2")); >>> >>> // setting up the stream >>> URL url = new URL( >>> " >>> http://192.168.1.199:3334/sdata/slx/dynamic/accounts(A6UJ9A000036)<http://192.168.1.199:3334/sdata/slx/dynamic/accounts%28A6UJ9A000036%29> >>> "); >>> URLConnection connection = url.openConnection(); >>> connection.setDoOutput(true); >>> java.net.HttpURLConnection http = (HttpURLConnection) connection; >>> http.setRequestMethod("PUT"); >>> HttpURLConnection.setFollowRedirects(true); >>> http.setRequestProperty("Content-type", >>> "application/atom+xml;type=entry"); >>> >>> // creating a JDom doc from the DOM doc to facilitate streaming >>> to the >>> // server >>> org.jdom.Document docForPosting = >>> domBuilder.build(docPrepareToPost); >>> >>> XMLOutputter xmlOutputter = new XMLOutputter(); >>> //this fails to update the data (Response Code: 200, Response >>> Message: OK) >>> xmlOutputter.output(docForPosting, http.getOutputStream()); >>> //output seems ok >>> xmlOutputter.output(docForPosting, System.out); >>> //the printout seems ok >>> System.out.println("doctype = " + docForPosting.getDocType()); >>> //=null >>> FileWriter file = new FileWriter("/home/rick/deleteme/crap2"); >>> //this successfully updates the data (Response Code: 200, >>> Response Message: OK) >>> xmlOutputter.output(docForPosting, file); >>> >>> System.out.println("Response Code: " + http.getResponseCode()); >>> System.out.println("Response Message: " + >>> http.getResponseMessage()); >>> } >>> >>> public static void main(String[] args) { >>> MyJDomParser parser = new MyJDomParser(); >>> Authenticator.setDefault(new MyAuthenticator()); >>> try { >>> parser.parseUrl(); >>> parser.getAllChangedElements(); >>> parser.postData(); >>> } catch (JDOMException e) { >>> e.printStackTrace(); >>> } catch (IOException e) { >>> e.printStackTrace(); >>> } catch (URISyntaxException e) { >>> e.printStackTrace(); >>> } catch (ParserConfigurationException e) { >>> e.printStackTrace(); >>> } catch (SAXException e) { >>> e.printStackTrace(); >>> } >>> } >>> } >>> >> >> *Output (snipped):* >> >> preparing to change the data... >>> <?xml version="1.0" encoding="UTF-8"?> >>> <entry><entry >>> /><published>0001-01-01T00:00:00+00:00</published><title>**------**</title><updated>2009-01-16T12:38:38+00:00</updated><AccountName>****55555******</AccountName><AccountNameUpper>**SHORTENED**</AccountNameUpper><CreateDate>2008-10-21T09:01:41+00:00</CreateDate><CreateUser>U6UJ9A000009</CreateUser><LastHistoryBy>ADMIN >>> </LastHistoryBy><LastHistoryDate>2008-10-31T13:25:58+00:00</LastHistoryDate><ModifyDate>2009-01-16T12:38:38+00:00</ModifyDate><ModifyUser>ADMIN >>> </ModifyUser><Status>Active</Status><Type>Corporate</Type><Prefix>Mr.</Prefix><Name>Bob</Name><Surname>Smith</Surname><Gender>Male</Gender><Idtype>I.D.</Idtype><Idpassportno>7904055766543</Idpassportno><Citizen>RSA</Citizen></entry> >>> >>> >> >> > > _______________________________________________ > To control your jdom-interest membership: > http://www.jdom.org/mailman/options/jdom-interest/[email protected] > _______________________________________________ To control your jdom-interest membership: http://www.jdom.org/mailman/options/jdom-interest/[email protected]