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();
SOAPMessage message = prepareMessage();
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/WaterLevelVerifiedMonthly");
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 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();
SOAPBody body = message.getSOAPBody();
Name bodyName = soapFactory.createName("getWLVerifiedMonthlyAndMetadata", "water",
"https://opendap.co-ops.nos.noaa.gov/axis/webservices/waterlevelverifiedmonthly/wsdl");
SOAPBodyElement bodyElement = body.addBodyElement(bodyName);
//Constructing the body for the request
Name name = soapFactory.createName("stationId");
SOAPElement symbol = bodyElement.addChildElement(name);
symbol.addTextNode("8454000");
name = soapFactory.createName("beginDate");
symbol = bodyElement.addChildElement(name);
symbol.addTextNode("20150101 00:00");
name = soapFactory.createName("endDate");
symbol = bodyElement.addChildElement(name);
symbol.addTextNode("20150501 00:00");
name = soapFactory.createName("datum");
symbol = bodyElement.addChildElement(name);
symbol.addTextNode("MLLW");
name = soapFactory.createName("unit");
symbol = bodyElement.addChildElement(name);
symbol.addTextNode("0");
name = soapFactory.createName("timeZone");
symbol = bodyElement.addChildElement(name);
symbol.addTextNode("0");
} 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 ("beginDate".equals(tagName)) {
System.out.println("Begin Date : " + se.getValue());
} else if ("endDate".equals(tagName)) {
System.out.println("End Date : " + se.getValue());
} else if ("datum".equals(tagName)) {
System.out.println("Datum : " + se.getValue());
} else if ("unit".equals(tagName)) {
System.out.println("Unit : " + se.getValue());
} else if ("timeZone".equals(tagName)) {
System.out.println("Time Zone : " + 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 ("timeStamp".equals(tagName)) {
System.out.println("Time Stamp: " + se.getValue());
} else if (tagName.equals("MHHW")) {
System.out.println("MHHW : " + se.getValue());
} else if (tagName.equals("MHW")) {
System.out.println("MHW : " + se.getValue());
} else if (tagName.equals("DTL")) {
System.out.println("DTL : " + se.getValue());
} else if (tagName.equals("MTL")) {
System.out.println("MTL : " + se.getValue());
} else if (tagName.equals("MSL")) {
System.out.println("MSL : " + se.getValue());
} else if (tagName.equals("MLW")) {
System.out.println("MLW : " + se.getValue());
} else if (tagName.equals("MLLW")) {
System.out.println("MLLW : " + se.getValue());
} else if (tagName.equals("GT")) {
System.out.println("GT : " + se.getValue());
} else if (tagName.equals("MN")) {
System.out.println("MN : " + se.getValue());
} else if (tagName.equals("DHQ")) {
System.out.println("DHQ : " + se.getValue());
} else if (tagName.equals("DLQ")) {
System.out.println("DLQ : " + se.getValue());
} else if (tagName.equals("HWI")) {
System.out.println("HWI : " + se.getValue());
} else if (tagName.equals("LWI")) {
System.out.println("LWI : " + se.getValue());
} else if (tagName.equals("highest")) {
System.out.println("Highest Tide : " + se.getValue());
} else if (tagName.equals("lowest")) {
System.out.println("Lowest Tide : " + se.getValue());
} else if (tagName.equals("inferred")) {
System.out.println("Inferred Tide : " + se.getValue());
}
}
}
}
/****************************************************
SAMPLE RUN
>java Client
Printing the message that is being sent:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<water:getWLVerifiedMonthlyAndMetadata xmlns:water="https://opendap.co-ops.nos.noaa.gov/axis/webservices/waterlevelverifiedmonthly/wsdl">
<stationId>8454000</stationId>
<beginDate>20150101 00:00</beginDate>
<endDate>20150501 00:00</endDate>
<datum>MLLW</datum>
<unit>0</unit>
<timeZone>0</timeZone>
</water:getWLVerifiedMonthlyAndMetadata>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Iterating through the response object to get the values:
Printing Metadata
Station ID : 8454000
station Name : Providence
Latitude : 41.8072
Longitude : -71.4011
State : RI
Data Source : USDOC/NOAA/NOS/COOPS(Center for Operational Oceanographic Products and Services)
Begin Date : 20150101 00:00
End Date : 20150501 00:00
Datum : MLLW
Unit : Meters
Time Zone : GMT
Printing the data
Time Stamp: 2015/01/01 00:00
MHHW : 1.42
MHW : 1.337
DTL : 0.649
MTL : 0.645
MSL : 0.598
MLW : -0.047
MLLW : -0.123
GT : 1.543
MN : 1.384
DHQ : 0.083
DLQ : 0.076
HWI : 0.33
LWI : 5.88
Highest Tide : 1.852
Lowest Tide : -0.447
Inferred Tide : 0
Time Stamp: 2015/02/01 00:00
MHHW : 1.443
MHW : 1.351
DTL : 0.679
MTL : 0.666
MSL : 0.609
MLW : -0.02
MLLW : -0.086
GT : 1.529
MN : 1.371
DHQ : 0.092
DLQ : 0.066
HWI : 0.38
LWI : 5.77
Highest Tide : 2.03
Lowest Tide : -0.702
Inferred Tide : 0
Time Stamp: 2015/03/01 00:00
MHHW : 1.369
MHW : 1.288
DTL : 0.622
MTL : 0.618
MSL : 0.572
MLW : -0.053
MLLW : -0.126
GT : 1.495
MN : 1.341
DHQ : 0.081
DLQ : 0.073
HWI : 0.38
LWI : 5.86
Highest Tide : 1.939
Lowest Tide : -0.523
Inferred Tide : 0
Time Stamp: 2015/04/01 00:00
MHHW : 1.471
MHW : 1.398
DTL : 0.731
MTL : 0.717
MSL : 0.681
MLW : 0.036
MLLW : -0.01
GT : 1.481
MN : 1.362
DHQ : 0.073
DLQ : 0.046
HWI : 0.42
LWI : 5.73
Highest Tide : 2.089
Lowest Tide : -0.323
Inferred Tide : 0
Time Stamp: 2015/05/01 00:00
MHHW : 1.439
MHW : 1.373
DTL : 0.716
MTL : 0.699
MSL : 0.663
MLW : 0.024
MLLW : -0.007
GT : 1.446
MN : 1.349
DHQ : 0.066
DLQ : 0.031
HWI : 0.44
LWI : 5.75
Highest Tide : 1.81
Lowest Tide : -0.235
Inferred Tide : 0
*********************************************************/