import java.io.IOException;
import java.net.URL;
import java.util.Iterator;
import javax.xml.soap.*;
public class Client {
public static void main(String[] args) {
try {
SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
SOAPConnection connection = soapConnectionFactory.createConnection();
SOAPFactory soapFactory = SOAPFactory.newInstance();
MessageFactory factory = MessageFactory.newInstance();
SOAPMessage message = factory.createMessage();
SOAPBody body = message.getSOAPBody();
Name bodyName = soapFactory.createName("getHistoricStations", "", "urn:HistoricStations");
body.addBodyElement(bodyName);
System.out.print("\nPrinting the message that is being sent: \n\n");
message.writeTo(System.out);
System.out.println("\n\n");
URL endpoint = new URL("https://opendap.co-ops.nos.noaa.gov/axis/services/HistoricStations");
SOAPMessage response = connection.call(message, endpoint);
connection.close();
/*
System.out.println("\nPrinting the respone that was recieved: \n\n");
response.writeTo(System.out);
*/
//Uncoment this part if you want the response to be saved locally in an XML file
/*
FileOutputStream fout = new FileOutputStream("SoapResponse.xml");
response.writeTo(fout);
fout.close();
*/
//You can also stores the response as a String
/*
ByteArrayOutputStream out = new ByteArrayOutputStream();
response.writeTo(out);
String str = out.toString();
*/
System.out.println("\n\nIterating through the response object to get the values:\n\n");
SOAPBody responseBody = response.getSOAPBody();
//Checking for errors
if (responseBody.hasFault()) {
SOAPFault newFault = responseBody.getFault();
System.out.println("SAOP FAULT:\n");
System.out.println("code = " + newFault.getFaultCodeAsName());
System.out.println("message = " + newFault.getFaultString());
System.out.println("actor = " + newFault.getFaultActor());
} else {
Iterator iterator = responseBody.getChildElements();
Iterator iterator2, iterator3, iterator4, iterator5;
String tagName = null;
SOAPElement se = null;
Name attributeName = null;
if (iterator.hasNext()) {
se = (SOAPElement) iterator.next();//Stations Tag
iterator2 = se.getChildElements();
se = (SOAPElement) iterator2.next();//Station Tag
iterator2 = se.getChildElements();
while (iterator2.hasNext()) {
se = (SOAPElement) iterator2.next();
tagName = se.getElementName().getLocalName();
System.out.println("\n\n******************************************************");
if (tagName != null && tagName.equals("station")) {
//attributes for a station
attributeName = soapFactory.createName("name");
System.out.print("Station Name : " + se.getAttributeValue(attributeName));//Station Name
attributeName = soapFactory.createName("ID");
System.out.print("\nStation ID : " + se.getAttributeValue(attributeName));//Station ID
iterator3 = se.getChildElements();
se = (SOAPElement) iterator3.next();//Metadata Tag
iterator4 = se.getChildElements();
se = (SOAPElement) iterator4.next();//Location Tag
iterator5 = se.getChildElements();
while (iterator5.hasNext()) {
se = (SOAPElement)iterator5.next();
tagName = se.getElementName().getLocalName();
if (tagName != null) {
//The name of the tag in this case is 'lat'
if (tagName.equals("lat")) {
System.out.print("\nLatitude : " + se.getValue());//Latitude
} else if (tagName.equals("long")) {
System.out.print("\nLongitude : " + se.getValue());//Longitude
} else if (tagName.equals("state")) {
if (se.getValue() == null) {
System.out.print("\nState : " );//State is Null
} else {
System.out.print("\nState : " + se.getValue());//State
}
}
}
}
se = (SOAPElement ) iterator4.next();//Established Date Tag
tagName = se.getElementName().getLocalName();
if (tagName != null && tagName.equals("date_established")) {
if (se.getValue() == null) {
System.out.print("\nEstablished Date : ");//Established Date is Null
} else {
System.out.print("\nEstablished Date : " + se.getValue());//Established Date
}
}
se = (SOAPElement ) iterator4.next();//Removed Date Tag
tagName = se.getElementName().getLocalName();
if (tagName != null && tagName.equals("date_removeded")) {
if (se.getValue() == null) {
System.out.println("\nRemoved Date : ");//Removed Date is Null
} else {
System.out.println("\nRemoved Date : " + se.getValue());//Removed Date
}
}
}
}
}
}
} catch (SOAPException e) {
System.err.println("ERROR: ******* " + e.toString());
} catch (IOException io) {
System.err.println("ERROR: ******* " + io.toString());
}
}
}
/****************************************************
SAMPLE RUN
>java Client
Sample Output (The entire output is omitted for it is too long)
******************************************************
Station Name : Barbuda
Station ID : 9761115
Latitude : 17.5908
Longitude : -61.8206
State : Antigua and Barbuda
Established Date : 2011-05-24
Removed Date : present
******************************************************
Station Name : NAOS ISLAND, PANAMA BAY
Station ID : 9812530
Latitude : 8.9183
Longitude : -79.5333
State : Panama
Established Date : 1991-08-25
Removed Date : 1998-01-28
******************************************************/