[jdom-interest] xmlOutputter question
Rick Avlonitis
rick.softly at gmail.com
Fri Jan 16 05:26:53 PST 2009
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)");
> 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)");
> 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>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.jdom.org/pipermail/jdom-interest/attachments/20090116/45c4377c/attachment.htm
More information about the jdom-interest
mailing list