cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

XML creation with namespace prefix in dom with java.

Former Member
0 Likes
2,993

Hi Experts,

I need to create the below xml structure , but i am not able to create it exactly kindly help me in creating it.

I am able to create a below structure but without namespace prefix like URN

XML required :-

       <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:enterpri...

           <soapenv:Header>

              <urn:PackageVersionHeader>

                 <!--Zero or more repetitions:-->

                 <urn:packageVersions>

                    <urn:majorNumber>?</urn:majorNumber>

                    <urn:minorNumber>?</urn:minorNumber>

                    <urn:namespace>?</urn:namespace>

                 </urn:packageVersions>

              </urn:PackageVersionHeader>

              <urn:MruHeader>

                 <urn:updateMru>?</urn:updateMru>

              </urn:MruHeader>

              <urn:QueryOptions>

                 <!--Optional:-->

                 <urn:batchSize>?</urn:batchSize>

              </urn:QueryOptions>

              <urn:SessionHeader>

                 <urn:sessionId>?</urn:sessionId>

              </urn:SessionHeader>

           </soapenv:Header>

           <soapenv:Body>

              <urn:query>

                 <urn:queryString>?</urn:queryString>

              </urn:query>

           </soapenv:Body>

        </soapenv:Envelope>

Kindly help me in solving the issue.

View Entire Topic
markangelo_dihiansan
Active Contributor
0 Likes

Hi Vijay,

Are you using external definitions?Setting elementFormDefault to "qualified" should do the trick. Same is the case for data types in 7.4.

Here's a sample:

Regards,

Mark

Former Member
0 Likes

Hi Dihiansan,

Thanks for the update, I am trying this with the new HCI . So i am not using this.

Thanks ,

Vijay

markangelo_dihiansan
Active Contributor
0 Likes

Hi Vijay,

I've modified your code a little bit:


import java.io.*;

import java.net.MalformedURLException;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.ParserConfigurationException;

import javax.xml.transform.Transformer;

import javax.xml.transform.TransformerException;

import javax.xml.transform.TransformerFactory;

import javax.xml.transform.dom.DOMSource;

import javax.xml.transform.stream.StreamResult;

//import org.apache.cxf.binding.soap.SoapHeader;

import org.w3c.dom.Document;

import org.w3c.dom.Element;

public class Test {

  private static Element createElement(String name, Element el, Document doc){

   Element element = doc.createElement(name);

   el.appendChild(element);

   return element;

  }

 

  private static void createElement(String name, Element el, Document doc, String value){

   Element element = doc.createElement(name);

   el.appendChild(element);

   if(!value.equals("")){

   element.setTextContent(value);

   }

  }

 

public static void main(String args[]) throws ParserConfigurationException, TransformerException, MalformedURLException{

  DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

  dbf.setNamespaceAware(true);

  dbf.setIgnoringElementContentWhitespace(true);

  dbf.setValidating(false);

  DocumentBuilder db = dbf.newDocumentBuilder();

  Document doc = db.newDocument();

  Element Envelope = doc.createElementNS("http://schemas.xmlsoap.org/soap/envelope/", "Envelope");

  Envelope.setPrefix("soapenv");

  Envelope.setAttribute("xmlns:urn", "urn:enterprise.soap.sforce.com");

  Element Header=createElement("soapenv:Header",Envelope,doc);

  Element PackageVersionHeader=createElement("urn:PackageVersionHeader",Header,doc);

  Element PackageVersions=createElement("urn:PackageVersions",PackageVersionHeader,doc);

  createElement("urn:majorNumber",PackageVersions,doc,"0");

  createElement("urn:minorNumber",PackageVersions,doc,"2");

  createElement("urn:namespace",PackageVersions,doc,"Vijay");

  Element MruHeader=createElement("urn:MruHeader",Header,doc);

  createElement("urn:updateMru",MruHeader,doc,"1");

  Element QueryOptions=createElement("urn:QueryOptions",Header,doc);

  createElement("urn:batchSize",QueryOptions,doc,"1");

  Element SessionHeader=createElement("urn:SessionHeader",Header,doc);

  createElement("urn:sessionId",SessionHeader,doc,"Vijay");

 

  Element Body=createElement("soapenv:Body",Envelope,doc);

  Element query=createElement("urn:query",Body,doc);

  createElement("urn:queryString",query,doc,"queryString");

  StringWriter sw = new StringWriter();

  StreamResult result = new StreamResult(sw);

  DOMSource source = new DOMSource(Envelope);

  TransformerFactory tf =  TransformerFactory.newInstance();

  Transformer transformer = tf.newTransformer();

  transformer.transform(source, result);

  String xmlString = sw.toString();

  System.out.println(xmlString);

  }

}

Output


<?xml version="1.0" encoding="UTF-8"?>

<soapenv:Envelope xmlns:urn="urn:enterprise.soap.sforce.com" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">

   <soapenv:Header>

      <urn:PackageVersionHeader>

         <urn:PackageVersions>

            <urn:majorNumber>0</urn:majorNumber>

            <urn:minorNumber>2</urn:minorNumber>

            <urn:namespace>Vijay</urn:namespace>

         </urn:PackageVersions>

      </urn:PackageVersionHeader>

      <urn:MruHeader>

         <urn:updateMru>1</urn:updateMru>

      </urn:MruHeader>

      <urn:QueryOptions>

         <urn:batchSize>1</urn:batchSize>

      </urn:QueryOptions>

      <urn:SessionHeader>

         <urn:sessionId>Vijay</urn:sessionId>

      </urn:SessionHeader>

   </soapenv:Header>

   <soapenv:Body>

      <urn:query>

         <urn:queryString>queryString</urn:queryString>

      </urn:query>

   </soapenv:Body>

</soapenv:Envelope>

Regards,

Mark

Former Member
0 Likes

Hi Dihiansan,

Many Thanks Dihiansan, it started working also i have learned how write as well from your code.

Also i have understand how to set prefix.

Thanks,

Vijay