10. XmlServices

The XmlService provides operations to manipulate XML structures. Its WSDL is located at http://server:port/XServices/XmlService?wsdl

10.1. insertNodes

Insert an xml fragment into other elements specified by an XPath expression. This operation is namespace aware. Sample request:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.xservices.brutex.net">
   <soapenv:Header/>
   <soapenv:Body>
      <ws:insertNodes>
         <sourcexml><![CDATA[
         <books>
			<author>
				<name>Mensiok</name>
				<surname>Bello</surname>
			</author>
			<author>
				<name>Schwab</name>
				<surname>Rumsau</surname>
			</author>
			<author>
				<name>Dollibert</name>
				<surname>Rach</surname>
			</author>
         </books>
         ]]></sourcexml>
         <encoding>utf-8</encoding>
         <namespaceList>
            <!--Zero or more repetitions:-->
            <namespace>
               <prefix></prefix>
               <uri></uri>
            </namespace>
         </namespaceList>
         <xpath>/books/author</xpath>
         <!--Optional:-->
         <xmldata><![CDATA[<age namespace="http://btx"/>]]></xmldata>
      </ws:insertNodes>
   </soapenv:Body>
</soapenv:Envelope>

Sample response:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <ns2:insertNodesResponse xmlns:ns2="http://ws.xservices.brutex.net">
         <return><![CDATA[<?xml version='1.0' encoding='UTF-8'?>
         <books>
			<author>
				<name>Mensiok</name>
				<surname>Bello</surname>
			<age namespace="http://btx"/></author>
			<author>
				<name>Schwab</name>
				<surname>Rumsau</surname>
			<age namespace="http://btx"/></author>
			<author>
				<name>Dollibert</name>
				<surname>Rach</surname>
			<age namespace="http://btx"/></author>
         </books>]]></!></return>
      </ns2:insertNodesResponse>
   </soap:Body>
</soap:Envelope>

10.2. insertNodes2

Insert an xml fragment into xml resource (i.e. file, URL) specified by an XPath expression. This operation is namespace aware. Sample request:

...

Sample response:

...

10.3. replaceNodes

Replace an xml fragment with another xml fragment. This operation is namespace aware. Sample request:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:ws="http://ws.xservices.brutex.net">
   <soapenv:Header/>
   <soapenv:Body>
      <ws:replaceNodes>
         <sourcexml><![CDATA[
         <books>
			<author>
				<name>Mensiok</name>
				<surname>Bello</surname>
			</author>
			<author>
				<name>Schwab</name>
				<surname>Rumsau</surname>
			</author>
			<author>
				<name>Dollibert</name>
				<surname>Rach</surname>
			</author>
         </books>
         ]]>
         </sourcexml>
         <encoding>utf-8</encoding>
         <namespaceList>
            <!--Zero or more repetitions:-->
            <namespace>
               <prefix></prefix>
               <uri></uri>
            </namespace>
         </namespaceList>
         <xpath>*/name[text()='Schwab']</xpath>
         <!--Optional:-->
         <xmldata><![CDATA[<name>Meyer</name><age>45</age><!--edited here-->]]></xmldata>
      </ws:replaceNodes>
   </soapenv:Body>
</soapenv:Envelope>

Sample response:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <ns2:replaceNodesResponse xmlns:ns2="http://ws.xservices.brutex.net">
         <return><![CDATA[<?xml version='1.0' encoding='UTF-8'?>
         <books>
			<author>
				<name>Mensiok</name>
				<surname>Bello</surname>
			</author>
			<author>
				<name>Meyer</name><age>45</age><!--edited here-->
				<surname>Rumsau</surname>
			</author>
			<author>
				<name>Dollibert</name>
				<surname>Rach</surname>
			</author>
         </books>]]></return>
      </ns2:replaceNodesResponse>
   </soap:Body>
</soap:Envelope>

10.4. replaceNodes2

Replace an xml fragment with another xml fragment read from a resource (i.e. file, URL). This operation is namespace aware. Sample request:

...

Sample response:

...

10.5. selectXPath

Selects xmlfragements, nodes, attribute or text from xml data using an XPath expression. This function requires namespaces to be declared correctly.

Sample request:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:ws="http://ws.xservices.brutex.net">
   <soapenv:Header/>
   <soapenv:Body>
      <ws:selectXPath>
         <sourcexml>
         <![CDATA[<notes xmlns="http://demo.brutex.net" xmlns:bx="http://bx.brutex.net">
	<bx:note>
		<to>Lena</to>
		<from>Jani</from>
		<heading>Reminder ABC</heading>
		<body>Don't forget me this weekend!</body>
	</bx:note>
	<note>
		<to>John</to>
		<from>Lena</from>
		<heading>Call Mr. ABC</heading>
		<body>Please call back</body>
	</note>
	<bx:note>
		<to>Brian</to>
		<from>JJohn</from>
		<heading>Reminder XServices</heading>
		<body>How to use selectXPath?</body>
	</bx:note>
</notes>
]]>
		</sourcexml>
         <encoding>utf-8</encoding>
         <namespaceList>
            <namespace>
               <prefix>ns</prefix>
               <uri>http://demo.brutex.net</uri>
            </namespace>
            <namespace>
               <prefix>bx</prefix>
               <uri>http://bx.brutex.net</uri>
            </namespace>
         </namespaceList>
         <xpath>*/bx:note/ns:heading/text()</xpath>
      </ws:selectXPath>
   </soapenv:Body>
</soapenv:Envelope>

Sample response:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <ns2:selectXPathResponse xmlns:ns2="http://ws.xservices.brutex.net">
         <return>
            <stringlist>Reminder ABC</stringlist>
            <stringlist>Reminder XServices</stringlist>
            <size>2</size>
         </return>
      </ns2:selectXPathResponse>
   </soap:Body>
</soap:Envelope>

10.6. setAttribute

Set an attribute into elements matched by an XPath expression.

Sample request:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.xservices.brutex.net">
   <soapenv:Header/>
   <soapenv:Body>
      <ws:setAttribute>
         <sourcexml>         
         <![CDATA[<notes xmlns="http://demo.brutex.net">
	<note>
		<to>Lena</to>
		<from>Jani</from>
		<heading>Reminder ABC</heading>
		<body>Don't forget me this weekend!</body>
	</note>
	<note>
		<to>John</to>
		<from>Lena</from>
		<heading>Call Mr. ABC</heading>
		<body>Please call back</body>
	</note>
</notes>
]]></sourcexml>
         <encoding>utf-8</encoding>
         <!--Optional:-->
         <namespaceList>
            <!--Zero or more repetitions:-->
            <namespace>
               <prefix>bx</prefix>
               <uri>http://demo.brutex.net</uri>
            </namespace>
         </namespaceList>
         <xpath>*/bx:note</xpath>
         <attribute>
            <name>priority</name>
            <!--Optional:-->
            <value>high</value>
         </attribute>
      </ws:setAttribute>
   </soapenv:Body>
</soapenv:Envelope>

Sample response:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <ns2:setAttributeResponse xmlns:ns2="http://ws.xservices.brutex.net">
         <return><![CDATA[<?xml version='1.0' encoding='UTF-8'?>         
         <notes xmlns="http://demo.brutex.net">
	<note xmlns:axis2ns16="http://demo.brutex.net" axis2ns16:priority="high">
		<to>Lena</to>
		<from>Jani</from>
		<heading>Reminder ABC</heading>
		<body>Don't forget me this weekend!</body>
	</note>
	<note xmlns:axis2ns17="http://demo.brutex.net" axis2ns17:priority="high">
		<to>John</to>
		<from>Lena</from>
		<heading>Call Mr. ABC</heading>
		<body>Please call back</body>
	</note>
</notes>]]></return>
      </ns2:setAttributeResponse>
   </soap:Body>
</soap:Envelope>

10.7. wrapInCDATA

Simply wraps any data fragment into <![CDATA[ ... ]]> section. This can be useful if you want to preserve indentation or line breaks.

Sample request:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:ws="http://ws.xservices.brutex.net">
   <soapenv:Header/>
   <soapenv:Body>
      <ws:wrapInCDATA>
         <data>Hello World, here is some &lt;xml&gt; data</data>
      </ws:wrapInCDATA>
   </soapenv:Body>
</soapenv:Envelope>

Sample response:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <ns2:wrapInCDATAResponse xmlns:ns2="http://ws.xservices.brutex.net">
         <return>&lt;![CDATA[Hello World, here is some &lt;xml> data]]&gt;</return>
      </ns2:wrapInCDATAResponse>
   </soap:Body>
</soap:Envelope>