Something more basic and very low-level now: just post a SOAP message by writing the XML file yourself!
I am going to introduce briefly how to write a simple SOAP message to consume a remote procedure like: readLS(). Let's take a look at the xml below (rpc operation style with use of: encoded, so if you want to send a SOAP message to my on-line document/literal web service use Example 1-10):
You can find below a version, of the same SOAP message, for a document-style use of literal web service. And you can adapt easily for an other type of web service with the TcpTunnelGui tool (see here for installation and use).
Next section we will see how to upload an xml file to a web service. Pay attention at the rpc or document operation style of the web service you want to consume (see the WSDL) and use one of the two preceding SOAP message provided. The code below is for rpc/encoded or rpc/literal operation style.
Use the examples below as a template for posting an xml SOAP message to my document/literal operation style web service. Also, you can customize the message you send to the remote procedure (in bold).
Example 1-11. Upload the SOAP message: PostXml.java
import java.net.*;
import java.io.*;
public class PostXml {
public static void main(String[] args) {
try {
String xmldata = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
"<env:Envelope " +
"env:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" " +
"xmlns:env=\"http://schemas.xmlsoap.org/soap/envelope/\" " +
"xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" " +
"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">" +
"<env:Header/>" +
"<env:Body>" +
"<ans1:readLS xmlns:ans1=\"http://phonedirlux.homeip.net/types\">" +
"<String_1 xsi:type=\"xsd:string\">your message or e-mail</String_1>" +
"</ans1:readLS>" +
"</env:Body>" +
"</env:Envelope>";
//Create socket
String hostname = "www.pascalbotte.be";
int port = 80;
InetAddress addr = InetAddress.getByName(hostname);
Socket sock = new Socket(addr, port);
//Send header
String path = "/rcx-ws/rcx";
BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(sock.getOutputStream(),"UTF-8"));
// You can use "UTF8" for compatibility with the Microsoft virtual machine.
wr.write("POST " + path + " HTTP/1.0\r\n");
wr.write("Host: www.pascalbotte.be\r\n");
wr.write("Content-Length: " + xmldata.length() + "\r\n");
wr.write("Content-Type: text/xml; charset=\"utf-8\"\r\n");
wr.write("\r\n");
//Send data
wr.write(xmldata);
wr.flush();
// Response
BufferedReader rd = new BufferedReader(new InputStreamReader(sock.getInputStream()));
String line;
while((line = rd.readLine()) != null)
System.out.println(line);
} catch (Exception e) {
e.printStackTrace();
}
}
}
For more advanced sample you can use the tool: TcpTunnelGui to help you to format your SOAP message (see here for installation and use).
This technique should only be used for demo purpose or because you have to consume a SOAP web service and you don't want to be dependant of any library. Example: if you want to provide an applet on the internet available for every one. Check here if my applet is on-line. This, very basic, Java applet call the method status() and should work from any computer running Java.
![]() | ![]() | ![]() |
| Dynamic Invocation Interface (DII) with JAX-RPC (RPC/encoded and document/literal in section 1.4.5) | ![]() My home page Index RSS | Send or Post a SOAP message using SAAJ (document/literal) |