[jdom-interest] xmlOutputter question

Joe Bowbeer joe.bowbeer at gmail.com
Mon Jan 19 09:08:40 PST 2009


What's the diff between the two documents created in the two different ways?

Also, what's your root element?

The snippet below looks like nothing more than an empty "entry" element:

<?xml version="1.0" encoding="UTF-8"?>
<entry><entry /> ...ignored...

On Mon, Jan 19, 2009 at 1:15 AM, Rick Avlonitis wrote:

> 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 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/9af67601/attachment.htm


More information about the jdom-interest mailing list