SOAP Code Example: Using Complex Types

You can both send and receive complex types with the SOAP component.

Date Entered: 03/28/2008    Last Updated: 03/31/2008

To send a complex type you first need to set the ValueFormat property to tell the component to not xml escape the data you're providing. For instance:

C#
soap.Method = "test";
soap.MethodURI = "http://tempuri.org";
soap.ValueFormat = SoapValueFormats.vfFullXML;
soap.AddParam("parent", "<child1><grandchild1>test</grandchild1></child1>");
soap.BuildPacket();

Java
soap.setMethod("test");
soap.setMethodURI("http://tempuri.org");
soap.setValueFormat(soap.vfFullXML);
soap.addParam("parent", "<child1><grandchild1>test</grandchild1></child1>");
soap.buildPacket();

will result in a SOAPPacket which looks like:

<?xml version="1.0" encoding="utf-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" 
 SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:="">
<SOAP-ENV:Body>
<m:test xmlns:m="http://tempuri.org">
	<parent>
		<child1>
			<grandchild1>test</grandchild1>
		</child1>
	</parent>
</m:test>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

If the server returns a complex type in response to your request you can use the XPath and related properties to traverse the response. For instance if the server returned the value:

<?xml version="1.0" encoding="utf-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" 
 SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:="">
<SOAP-ENV:Body>
<m:TestResults xmlns:m="http://tempuri.org">
	<parent>
		<child1>
			<grandchild1>value1</grandchild1>
			<grandchild2>value2</grandchild2>
		</child1>
	</parent>
</m:TestResults>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

You could use the code below to output the value for the grandchild2 element. Please consult the help files for a complete list of XPath related properties that may be useful in your application.

C#
soap.XPath = "/Envelope/Body/TestResults/parent/child1/grandchild2";
Console.WriteLine(soap.XText);

Java
soap.setXPath("/Envelope/Body/TestResults/parent/child1/grandchild2");
System.out.println(soap.getXText());

We appreciate your feedback.  If you have any questions, comments, or suggestions about this entry please contact our support team at kb@nsoftware.com.