Re: xmlOutputter question
"Rick Avlonitis" <[email protected]>
| Newsgroups | gmane.comp.java.jdom.general |
|---|---|
| Message-ID | <[email protected]> |
I may be wrong here, but it seems that JDom is perhaps not the choice to use when posting to an atom feed. I say this because I can output a document to a file with no problems. However, I can't out the document to an http stream. I've wrapped the stream in a buffer and called flush on it to no avail. I know that there isn't a problem with the stream, because when I create a new document from the file where I output to originally, it works. But I don't want to have to write to a file (or even a string). I want to find a solution that works. My solution is fine until I want to post the results back to the server :(. Perhaps ROME is the way to go? On Mon, Jan 19, 2009 at 7:11 PM, Joe Bowbeer <[email protected]> wrote: > 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/[email protected] >>>> >>> >>> >> > > _______________________________________________ > 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]