cancel
Showing results for 
Search instead for 
Did you mean: 
Subscribe

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.

0 Likes
View Entire Topic
engswee
Active Contributor
0 Likes

Hi Vijay

Did you try using the createElementNS() method of the Document class instead of createElement()?

Document (Java Platform SE 6)

You might want to share your code if you require further help.

Rgds

Eng Swee

Former Member
0 Likes

Hi Yeoh,

Yes, i have tried it actually the problem is i want to declare the namespace and refer it with the prefix.

code what i have tried

import java.io.*;

import java.net.MalformedURLException;

import java.net.URL;

import java.util.ArrayList;

import java.util.List;

import javax.xml.namespace.QName;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.ParserConfigurationException;

import javax.xml.transform.Transformer;

import javax.xml.transform.TransformerConfigurationException;

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.Attr;

import org.w3c.dom.Document;

import org.w3c.dom.Element;

public class SFDC_SoapHeaders {

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

  {

// URL namespaceUrl = new URL("urn:enterprise.soap.sforce.com");

// String namespaceact = "xmlns:urn="+namespaceUrl.toString();

  DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

  dbf.setNamespaceAware(true);

  dbf.setIgnoringElementContentWhitespace(true);

  dbf.setValidating(false);

  DocumentBuilder db = dbf.newDocumentBuilder();

  Document doc = db.newDocument();

  //Element Envelope = doc.createElement("Envelope");

  //Envelope.setAttributeNS("http://schemas.xmlsoap.org/soap/envelope/", "Envelope", "soapenv");

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

// Header.setAttribute("xmlns:soapenv", "asdsa");

// Header.setAttributeNS("http://schemas.xmlsoap.org/soap/envelope/", "soapenv", "urn:enterprise.soap.sforce.com");

  Header.setPrefix("Soapenv");

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

  //.appendChild(Header);

  Element PackageVersionHeader = doc.createElement("PackageVersionHeader");

  Header.appendChild(PackageVersionHeader);

  Element packageVersions = doc.createElement( "packageVersions");

  PackageVersionHeader.appendChild(packageVersions);

  Element majorNumber = doc.createElement( "majorNumber");

  PackageVersionHeader.appendChild(majorNumber);

  majorNumber.setTextContent("0");

  //majorNumber.setPrefix("urn");

  majorNumber.setAttribute("urn", "urn=urn:enterprise.soap.sforce.com");

  Element minorNumber = doc.createElement("minorNumber");

  PackageVersionHeader.appendChild(minorNumber);

  minorNumber.setTextContent("2");

  Element namespace = doc.createElement("namespace");

  PackageVersionHeader.appendChild(namespace);

  namespace.setTextContent("Vijay2");

  //namespace.setPrefix("urn");

  Element MruHeader = doc.createElement("MruHeader");

  Header.appendChild(MruHeader);

  Header.setPrefix("urn");

  Header.setAttribute("urn", "urn=urn:enterprise.soap.sforce.com");

  Element updateMru = doc.createElementNS("urn=urn:enterprise.soap.sforce.com","updateMru");

  MruHeader.appendChild(updateMru);

  updateMru.setPrefix("urn");

  updateMru.setAttribute("urn", "urn=urn:enterprise.soap.sforce.com");

  updateMru.setTextContent("1");

  Element QueryOptions = doc.createElement("QueryOptions");

  Header.appendChild(QueryOptions);

  Header.setPrefix("urn");

  Header.setAttribute("urn", "urn=urn:enterprise.soap.sforce.com");

  Element batchSize = doc.createElement("batchSize");

  QueryOptions.appendChild(batchSize);

  batchSize.setTextContent("1");

  Element SessionHeader = doc.createElement("SessionHeader");

  Header.appendChild(SessionHeader);

  Element sessionId = doc.createElementNS("urn=urn:enterprise.soap.sforce.com", "sessionId");

  SessionHeader.appendChild(sessionId);

  sessionId.setTextContent("Vijay");

  //SoapHeader soapheader = new SoapHeader(new QName(Header.getNamespaceURI(),

  // Header.getLocalName()), Header);

  //soapheader.setActor("actor_test");

  //soapheader.setMustUnderstand(true);

  StringWriter sw = new StringWriter();

  StreamResult result = new StreamResult(sw);

  DOMSource source = new DOMSource(Header);

  TransformerFactory tf =  TransformerFactory.newInstance();

  Transformer transformer = tf.newTransformer();

  transformer.transform(source, result);

  String xmlString = sw.toString();

  System.out.println(xmlString);

  }

}

Output it

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

<urn:soapenv xmlns:urn="urn:enterprise.soap.sforce.com" urn="urn=urn:enterprise.soap.sforce.com">

  <PackageVersionHeader>

  <packageVersions/>

  <majorNumber urn="urn=urn:enterprise.soap.sforce.com">0</majorNumber>

  <minorNumber>2</minorNumber>

  <namespace>Vijay2</namespace>

  </PackageVersionHeader>

  <MruHeader>

  <urn:updateMru xmlns:urn="urn=urn:enterprise.soap.sforce.com" urn="urn=urn:enterprise.soap.sforce.com">1</urn:updateMru>

  </MruHeader>

  <QueryOptions>

  <batchSize>1</batchSize>

  </QueryOptions>

  <SessionHeader>

  <sessionId xmlns="urn=urn:enterprise.soap.sforce.com">Vijay</sessionId>

  </SessionHeader>

</urn:soapenv>

Kindly help me in solving the issue.

engswee
Active Contributor
0 Likes

I think the usage of the method is incorrect.

It should be like that


Element updateMru = doc.createElementNS("urn:enterprise.soap.sforce.com","urn:updateMru");

The first argument is the namespace, the second is the name of the element with a prefix.

Also try to comment out the setAttribute() calls.

Try this out and see how your output looks like.