You are viewing a plain text version of this content. The canonical link for it is here.
Posted to soap-user@ws.apache.org by Jack Byrne <jb...@aol.com> on 2003/02/17 13:48:09 UTC

Controlling namespace prefixes in SAAJ

Hello,

My sample code below is producing the following XML

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope 
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <soapenv:Header>
  <Header1 attr1="value1" attr2="value2" 
xmlns="http://mydomain.com/header1"/>
  <Header2 xmlns="http://mydomain.com/header2">
   <ns1:child1 xmlns:ns1="http://mydomain.com/child1">
    <ns1:child2>Value for Child2</ns1:child2>
    <child3 xmlns="">Value for Child3</child3>
   </ns1:child1>
  </Header2>
 </soapenv:Header>
 <soapenv:Body>
  ................
 </soapenv:Body>
</soapenv:Envelope>

    private void createSOAPHeader(boolean test) throws Exception {
        String property = null;
       
        // Create the SOAP envelope
        SOAPPart soapPart = message.getSOAPPart();
        envelope = soapPart.getEnvelope();
       
        // Create the SOAP Header within the envelope
        SOAPHeader header = envelope.getHeader();
       
        // Create the Header1 Element and add it
        Name header1 = envelope.createName("Header1", "", 
"http://mydomain.com/header1");
        SOAPHeaderElement headerElement = header.addHeaderElement(header1);
       
        // Add some attributes
        Name attr1 = envelope.createName("attr1");
        headerElement.addAttribute(attr1, "value1");
        Name attr2 = envelope.createName("attr2");
        headerElement.addAttribute(attr2, "value2");
               
        // Create the Header2 Element and add it
        Name header2 = envelope.createName("Header2", "", 
"http://mydomain.com/header2");
        headerElement = header.addHeaderElement(header2);
       
        // Create some child Elements for Header2
        Name name = envelope.createName("child1", "child1_ns", 
"http://mydomain.com/child1");
        SOAPElement child1 = headerElement.addChildElement(name);
       
        // Create child2 element
        name = envelope.createName("child2", "child1_ns", 
"http://mydomain.com/child1");
        SOAPElement child2 = child1.addChildElement(name);
        child2.addTextNode("Value for Child2");
       
        // Create child3 element
        name = envelope.createName("child3");
        SOAPElement child3 = child1.addChildElement(name);
        child3.addTextNode("Value for Child3");
    }

Questions,

1) The namespace prefix is "ns1", I would like it to be "child1_ns" - 
how can I control this
2) How can I omit the namespace prefix before an Element name for example

how can I get encode
   <ns1:child1 xmlns:ns1="http://mydomain.com/child1">
to be
   <child1 xmlns:ns1="http://mydomain.com/child1">

3) How can I produce the following output
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope 
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <soapenv:Header>
  <Header1 attr1="value1" attr2="value2" 
xmlns="http://mydomain.com/header1"/>
  <Header2 xmlns="http://mydomain.com/header2">
   <child1 xmlns:ns_child1="http://mydomain.com/child1">
    <ns_child1:child2>Value for Child2</ns_child1:child2>
    <child3 xmlns="">Value for Child3</child3>
   </ns_child1:child1>
  </Header2>
 </soapenv:Header>
 <soapenv:Body>
  ........................
 </soapenv:Body>
</soapenv:Envelope>


Re: Controlling namespace prefixes in SAAJ

Posted by Scott Nichol <sn...@scottnichol.com>.
SAAJ questions should be posted to either a general purpose SOAP list 
or a list for a product that implements SAAJ, such as Axis.

On 17 Feb 2003 at 12:48, Jack Byrne wrote:

> Hello,
> 
> My sample code below is producing the following XML
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <soapenv:Envelope 
> xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
> xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
>  <soapenv:Header>
>   <Header1 attr1="value1" attr2="value2" 
> xmlns="http://mydomain.com/header1"/>
>   <Header2 xmlns="http://mydomain.com/header2">
>    <ns1:child1 xmlns:ns1="http://mydomain.com/child1">
>     <ns1:child2>Value for Child2</ns1:child2>
>     <child3 xmlns="">Value for Child3</child3>
>    </ns1:child1>
>   </Header2>
>  </soapenv:Header>
>  <soapenv:Body>
>   ................
>  </soapenv:Body>
> </soapenv:Envelope>
> 
>     private void createSOAPHeader(boolean test) throws Exception {
>         String property = null;
>        
>         // Create the SOAP envelope
>         SOAPPart soapPart = message.getSOAPPart();
>         envelope = soapPart.getEnvelope();
>        
>         // Create the SOAP Header within the envelope
>         SOAPHeader header = envelope.getHeader();
>        
>         // Create the Header1 Element and add it
>         Name header1 = envelope.createName("Header1", "", 
> "http://mydomain.com/header1");
>         SOAPHeaderElement headerElement = header.addHeaderElement(header1);
>        
>         // Add some attributes
>         Name attr1 = envelope.createName("attr1");
>         headerElement.addAttribute(attr1, "value1");
>         Name attr2 = envelope.createName("attr2");
>         headerElement.addAttribute(attr2, "value2");
>                
>         // Create the Header2 Element and add it
>         Name header2 = envelope.createName("Header2", "", 
> "http://mydomain.com/header2");
>         headerElement = header.addHeaderElement(header2);
>        
>         // Create some child Elements for Header2
>         Name name = envelope.createName("child1", "child1_ns", 
> "http://mydomain.com/child1");
>         SOAPElement child1 = headerElement.addChildElement(name);
>        
>         // Create child2 element
>         name = envelope.createName("child2", "child1_ns", 
> "http://mydomain.com/child1");
>         SOAPElement child2 = child1.addChildElement(name);
>         child2.addTextNode("Value for Child2");
>        
>         // Create child3 element
>         name = envelope.createName("child3");
>         SOAPElement child3 = child1.addChildElement(name);
>         child3.addTextNode("Value for Child3");
>     }
> 
> Questions,
> 
> 1) The namespace prefix is "ns1", I would like it to be "child1_ns" - 
> how can I control this
> 2) How can I omit the namespace prefix before an Element name for example
> 
> how can I get encode
>    <ns1:child1 xmlns:ns1="http://mydomain.com/child1">
> to be
>    <child1 xmlns:ns1="http://mydomain.com/child1">
> 
> 3) How can I produce the following output
> <?xml version="1.0" encoding="UTF-8"?>
> <soapenv:Envelope 
> xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
> xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
>  <soapenv:Header>
>   <Header1 attr1="value1" attr2="value2" 
> xmlns="http://mydomain.com/header1"/>
>   <Header2 xmlns="http://mydomain.com/header2">
>    <child1 xmlns:ns_child1="http://mydomain.com/child1">
>     <ns_child1:child2>Value for Child2</ns_child1:child2>
>     <child3 xmlns="">Value for Child3</child3>
>    </ns_child1:child1>
>   </Header2>
>  </soapenv:Header>
>  <soapenv:Body>
>   ........................
>  </soapenv:Body>
> </soapenv:Envelope>
> 
> 


Scott Nichol

Do not reply directly to this e-mail address,
as it is filtered to only receive e-mail from
specific mailing lists.