Has anyone actual been able to make a SOAP call to a cups server??
Here is what I have been trying to do:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
public class PostXML_CUPS {
public static void main(String[] args) {
PostXML_CUPS axl = new PostXML_CUPS();
try {
// build SOAP request
String xmldata = "<SOAP-ENV:Envelope " +
"xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\"> " +
"<SOAP-ENV:Header/> " +
"<SOAP-ENV:Body> " +
" <login xmlns=\"urn:cisco:cup:presence:soap\" force=\"true\" > " +
" <username>TPAUser</username> " +
" <password>password</password> " +
" </login> " +
" </SOAP-ENV:Body> " +
"</SOAP-ENV:Envelope> ";
//Create socket
String path = "/EPASSoap/service/v70";
String host = "AAA.BBB.CCC.DDD";
String port = "8443";
// Implement the certificate-related stuffs required for sending request via https
X509TrustManager xtm = axl.new MyTrustManager();
TrustManager[] mytm = { xtm };
SSLContext ctx = SSLContext.getInstance("SSL");
ctx.init(null, mytm, null);
SSLSocketFactory sslFact = (SSLSocketFactory) ctx.getSocketFactory();
Socket sock = (SSLSocket) sslFact.createSocket(host, Integer.parseInt(port));
//Send header
BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(sock.getOutputStream(),"UTF-8"));
wr.write("POST " + path + " HTTP/1.1\r\n");
wr.write("Content-Type: application/soap+xml; charset=UTF-8; action=\"urn:cisco:cup:presence:soap/login\"\r\n");
wr.write("Connection: Keep-Alive\r\n");
wr.write("Host: " + host + ":" + port + "\r\n");
wr.write("Content-Length: " + xmldata.length() + "\r\n");
wr.write("\r\n");
//Send data
wr.write(xmldata);
System.out.println(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();
}
}
// **************************************************************
// inner class
/* testing the SSL interface */
public class MyTrustManager implements X509TrustManager {
MyTrustManager() {}
public void checkClientTrusted(X509Certificate chain[], String authType) throws CertificateException {}
public void checkServerTrusted(X509Certificate chain[], String authType) throws CertificateException {}
public X509Certificate[] getAcceptedIssuers() {
return null;
}
}
}
When I run this code, I get this back:
<env:Fault>
<env:Code><env

alue>env:Sender</env

alue></env:Code>
<env:Reason><env:Text xml:lang="en">Invalid request.</env:Text></env:Reason>
</env:Fault>
Anyone got any ideas, or is willing to share their working code?
Thanks