[jdom-interest] xmlOutputter question

Rick Avlonitis rick.softly at gmail.com
Mon Jan 19 01:15:22 PST 2009


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 <joe.bowbeer at gmail.com> 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/youraddr@yourhost.com
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.jdom.org/pipermail/jdom-interest/attachments/20090119/4036b352/attachment.htm


More information about the jdom-interest mailing list