import javax.xml.soap.*;
import java.util.Iterator;
import java.net.URL;
import java.io.*;
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("getActiveStationsV2", "", "urn:ActiveStations");
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/ActiveStations");
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******************************************************");
System.out.println("Station Name\t ID\t\t Latitude\t Longitude\t State\t Date\t SHEF ID\t Deployment Designation");
if(tagName!=null && tagName.equals("stationV2")){
//attributes for a station
attributeName = soapFactory.createName("name");
System.out.print(se.getAttributeValue(attributeName));//Station Name
attributeName = soapFactory.createName("ID");
System.out.print("\t" + 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("\t\t" + se.getValue());//Latitude
}else if(tagName.equals("long")){
System.out.print("\t" + se.getValue()); //longitude
}else if(tagName.equals("state")){
System.out.print("\t" + se.getValue()); //State
}
}
}
while (iterator4.hasNext()){
se = (SOAPElement)iterator4.next();
tagName = se.getElementName().getLocalName();
if(tagName!=null){
if(tagName.equals("date_established")){
System.out.print("\t\t" + se.getValue());//Established Date
}else if(tagName.equals("shef_id")){
System.out.print("\t" + se.getValue()); //SHEF ID
}else if(tagName.equals("deployment_designation")){
System.out.print("\t" + se.getValue()); //Deployment Designation
}
}
}
System.out.println("\n\nParameters\t DCP\t SensorId\t Status");
while (iterator3.hasNext()){
se = (SOAPElement)iterator3.next();
attributeName = soapFactory.createName("name");
System.out.print(se.getAttributeValue(attributeName));
attributeName = soapFactory.createName("DCP");
System.out.print("\t" + se.getAttributeValue(attributeName));
attributeName = soapFactory.createName("sensorID");
System.out.print("\t" + se.getAttributeValue(attributeName));
attributeName = soapFactory.createName("status");
System.out.println("\t" + se.getAttributeValue(attributeName));
}
}
}
}
}
} 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 ID Latitude Longitude State Date SHEF ID Deployment Designation
Nikiski 9455760 60.6833 -151.3980 AK 1971-05-21 NKTA2 NWLON, NWLORTS
Parameters DCP SensorId Status
Winds 1 C1 1
Air Temp 1 D1 1
Water Temp 1 E1 1
Air Pressure 1 F1 1
Water Level 1 N1 1
******************************************************
Station Name ID Latitude Longitude State Date SHEF ID Deployment Designation
Anchorage 9455920 61.2383 -149.8900 AK 1964-04-24 ANTA2 NWLORTS
Parameters DCP SensorId Status
Winds 1 C1 1
Air Temp 1 D1 1
Water Temp 1 E1 1
Air Pressure 1 F1 1
Water Level 1 N1 1
********************************************************/