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();
SOAPMessage message = prepareMessage();
URL endpoint = new URL("https://opendap.co-ops.nos.noaa.gov/axis/services/SurveyCurrents");
SOAPMessage response = connection.call(message, endpoint);
connection.close();
System.out.print("\nPrinting the message that is being sent: \n\n");
message.writeTo(System.out);
System.out.println("\n\n");
System.out.println("\n\nIterating through the response object to get the values:\n\n");
SOAPBody responseBody = response.getSOAPBody();
if (responseBody.hasFault()) {
SOAPFault fault = responseBody.getFault();
String actor = fault.getFaultActor();
System.out.println("Fault contains: ");
System.out.println("Fault code: " + fault.getFaultCodeAsName().getQualifiedName());
System.out.println("Fault string: " + fault.getFaultString());
if (actor != null) {
System.out.println("Actor: " + actor);
}
} else {
Iterator iterator = responseBody.getChildElements();
Iterator iterator2 = null;
Iterator iterator3 = null;
String tagName = null;
SOAPElement se = null;
if (iterator.hasNext()) {
se = (SOAPElement) iterator.next();
iterator = se.getChildElements();
while (iterator.hasNext()) {
se = (SOAPElement) iterator.next();
printMetadata(se);
tagName = se.getElementName().getLocalName();
if ("data".equals(tagName)) {
iterator2 = se.getChildElements();
while (iterator2.hasNext()) {
se = (SOAPElement) iterator2.next();
iterator3 = se.getChildElements();
while (iterator3.hasNext()) {
se = (SOAPElement) iterator3.next();
printData(se);
}
}
}
}
}
}
} catch (SOAPException e) {
System.err.println("ERROR: ******* " + e.toString());
} catch (IOException io) {
System.err.println("ERROR: ******* " + io.toString());
}
}
public static SOAPMessage prepareMessage() {
SOAPMessage message = null;
try {
SOAPFactory soapFactory = SOAPFactory.newInstance();
MessageFactory factory = MessageFactory.newInstance();
message = factory.createMessage();
SOAPHeader header = message.getSOAPHeader();
SOAPBody body = message.getSOAPBody();
header.detachNode();
message.getMimeHeaders().addHeader("SOAPAction", "");
Name bodyName = soapFactory.createName("getCurrentsAndMetadata", "csd",
"https://opendap.co-ops.nos.noaa.gov/axis/webservices/currents/wsdl");
SOAPBodyElement bodyElement = body.addBodyElement(bodyName);
Name name = soapFactory.createName("stationId");
SOAPElement symbol = bodyElement.addChildElement(name);
symbol.addTextNode("COI0502");
name = soapFactory.createName("beginDate");
symbol = bodyElement.addChildElement(name);
symbol.addTextNode("20050528 00:00");
name = soapFactory.createName("endDate");
symbol = bodyElement.addChildElement(name);
symbol.addTextNode("20050528 00:18");
name = soapFactory.createName("binNumber");
symbol = bodyElement.addChildElement(name);
symbol.addTextNode("1");
} catch (SOAPException e) {
System.err.println("ERROR: ******* " + e.toString());
}
return message;
}
public static void printMetadata(SOAPElement se) {
String tagName = se.getElementName().getLocalName();
if (tagName != null) {
if ("stationId".equals(tagName)) {
System.out.println("Printing Metadata \n");
System.out.println("Station ID : " + se.getValue());
} else if ("stationName".equals(tagName)) {
System.out.println("station Name : " + se.getValue());
} else if ("latitude".equals(tagName)) {
System.out.println("Latitude : " + se.getValue());
} else if ("longitude".equals(tagName)) {
System.out.println("Longitude : " + se.getValue());
} else if ("state".equals(tagName)) {
System.out.println("State : " + se.getValue());
} else if ("dataSource".equals(tagName)) {
System.out.println("Data Source : " + se.getValue());
} else if ("COOPSDisclaimer".equals(tagName)) {
System.out.println("COOPS Disclaimer : " + se.getValue());
} else if ("beginDate".equals(tagName)) {
System.out.println("Begin Date : " + se.getValue());
} else if ("endDate".equals(tagName)) {
System.out.println("End Date : " + se.getValue());
} else if ("timeZone".equals(tagName)) {
System.out.println("Time Zone : " + se.getValue());
} else if ("unit".equals(tagName)) {
System.out.println("Unit : " + se.getValue());
} else if ("sensorOrientation".equals(tagName)) {
System.out.println("Orientation : " + se.getValue());
} else if ("binNumber".equals(tagName)) {
System.out.println("Bin Number : " + se.getValue());
} else if ("binDistance".equals(tagName)) {
System.out.println("Bin Distance (ft): " + se.getValue() + "\n");
System.out.println("Printing the data \n");
}
}
}
public static void printData(SOAPElement se) {
String tagName = se.getElementName().getLocalName();
if (tagName != null) {
if (tagName.equals("timeStamp")) {
System.out.println("Time Stamp : " + se.getValue());
} else if (tagName.equals("CS")) {
System.out.println("CS : " + se.getValue());
} else if (tagName.equals("CD")) {
System.out.println("CD : " + se.getValue() + "\n");
}
}
}
}