[jdom-interest] xmlOutputter question
Joe Bowbeer
joe.bowbeer at gmail.com
Mon Jan 19 09:11:59 PST 2009
On Mon, Jan 19, 2009 at 9:08 AM, Joe Bowbeer wrote:
> 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...
Update: Nope, I got that wrong. The document itself is an "entry" and the
first element is an empty "entry".
Joe
>
>
> 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/5e175614/attachment.htm
More information about the jdom-interest
mailing list