+49 228 5552576-0


info@predic8.com

Create SOAP Request with Java

The Membrane SOA Model can create SOAP requests out of a WSDL document and a Java Map filled with the data for the request.

package sample.wsdl;

import groovy.xml.MarkupBuilder;
import java.io.StringWriter;
import java.util.HashMap;

import com.predic8.wsdl.*;
import com.predic8.wstool.creator.*;

public class CreateSOAPRequest {

  public static void main(String[] args) {

    WSDLParser parser = new WSDLParser();
    
    Definitions wsdl = parser.parse("resources/article/article.wsdl");
    
    StringWriter writer = new StringWriter();
    
    HashMap<String, String> formParams = new HashMap<String, String>();
    formParams.put("xpath:/create/article/name", "foo");
    formParams.put("xpath:/create/article/description", "bar");
    formParams.put("xpath:/create/article/price/amount", "00.00");
    formParams.put("xpath:/create/article/price/currency", "USD");
    formParams.put("xpath:/create/article/id", "1");
    
    SOARequestCreator creator = new SOARequestCreator();
    creator.setBuilder(new MarkupBuilder(writer));
    creator.setDefinitions(wsdl);
    creator.setFormParams(formParams);
    creator.setCreator(new RequestCreator());
    
    //creator.createRequest(PortType name, Operation name, Binding name);
    creator.createRequest("ArticleServicePT", "create", "ArticleServicePTBinding");

    System.out.println(writer);
  }
}
      
Listing 1: CreateSOAPRequest

The following table shows the input for the SOARequestCreator.

Key Value
xpath:/create/article/name foo
xpath:/create/article/description bar
xpath:/create/article/price/amount 00.00
xpath:/create/article/price/currency USD
xpath:/create/article/id 1

Using the table above you get the following soap request message.

<s11:Envelope xmlns:s11='http://schemas.xmlsoap.org/soap/envelope/'>
  <s11:Body>
    <ns1:create xmlns:ns1='http://predic8.com/wsdl/material/ArticleService/1/'>
      <article xmlns:ns1='http://predic8.com/material/1/'>
        <name xmlns:ns1='http://predic8.com/material/1/'>foo</name>
        <description xmlns:ns1='http://predic8.com/material/1/'>bar</description>
        <price xmlns:ns1='http://predic8.com/common/1/'>
          <amount xmlns:ns1='http://predic8.com/common/1/'>00.00</amount>
          <currency xmlns:ns1='http://predic8.com/common/1/'>USD</currency>
        </price>
        <id xmlns:ns1='http://predic8.com/material/1/'>1</id>
      </article>
    </ns1:create>
  </s11:Body>
</s11:Envelope>
      
Listing 2: Created soap request message

Unbounded Elements

To create a list of repeating elements in a SOAP request square brackets can be used.

Listing 3 shows how to set the formParams from Listing 1 to create a request with more than one item.

    ...
    HashMap<String, String> formParams = new HashMap<String, String>();
    formParams.put("xpath:/order/items/item[1]/name", "apple");
    formParams.put("xpath:/order/items/item[1]/quantity", "3");
    formParams.put("xpath:/order/items/item[1]/price", ".95");
    formParams.put("xpath:/order/items/item[2]/name", "orange");
    formParams.put("xpath:/order/items/item[2]/quantity", "5");
    formParams.put("xpath:/order/items/item[2]/price", "1.45");
    ...
      
Listing 3: CreateSOAPRequest with unbounded number of elements