reverted as much custom vijava code as possible

This commit is contained in:
Adrian Cole 2011-01-23 13:04:43 -08:00
parent e182253658
commit 78b77c8172
2 changed files with 165 additions and 119 deletions

View File

@ -30,6 +30,7 @@ POSSIBILITY OF SUCH DAMAGE.
package com.vmware.vim25.mo; package com.vmware.vim25.mo;
import java.net.MalformedURLException; import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException; import java.rmi.RemoteException;
import java.util.Calendar; import java.util.Calendar;
@ -56,28 +57,25 @@ import com.vmware.vim25.ws.WSClient;
* @author Steve JIN (sjin@vmware.com) * @author Steve JIN (sjin@vmware.com)
*/ */
public class ServiceInstance extends ManagedObject { public class ServiceInstance extends ManagedObject
{
// @Resource private ServiceContent serviceContent = null;
// @Named(ComputeServiceConstants.COMPUTE_LOGGER) final static ManagedObjectReference SERVICE_INSTANCE_MOR;
// protected Logger logger = Logger.NULL; public final static String VIM25_NAMESPACE = " xmlns=\"urn:vim25\">";
public final static String VIM20_NAMESPACE = " xmlns=\"urn:vim2\">";
private ServiceContent serviceContent = null;
final static ManagedObjectReference SERVICE_INSTANCE_MOR; static
public final static String VIM25_NAMESPACE = " xmlns=\"urn:vim25\">"; {
public final static String VIM20_NAMESPACE = " xmlns=\"urn:vim2\">"; SERVICE_INSTANCE_MOR = new ManagedObjectReference();
SERVICE_INSTANCE_MOR.set_value("ServiceInstance");
static SERVICE_INSTANCE_MOR.setType("ServiceInstance");
{ }
SERVICE_INSTANCE_MOR = new ManagedObjectReference();
SERVICE_INSTANCE_MOR.set_value("ServiceInstance");
SERVICE_INSTANCE_MOR.setType("ServiceInstance");
}
// PATCHED CONSTRUCTOR
public ServiceInstance(WSClient wsc, String username, String password, String ignoreCert) public ServiceInstance(WSClient wsc, String username, String password, String ignoreCert)
throws RemoteException, MalformedURLException { throws RemoteException, MalformedURLException
{
//logger.debug(">> ServiceInstance(%s, %s, %s, %s)", username, password, ignoreCert);
if(ignoreCert.equals("true")) { if(ignoreCert.equals("true")) {
this.ignoreCertificate(); this.ignoreCertificate();
} }
@ -85,30 +83,102 @@ public class ServiceInstance extends ManagedObject {
if(username == null) { if(username == null) {
throw new NullPointerException("username cannot be null."); throw new NullPointerException("username cannot be null.");
} }
setMOR(SERVICE_INSTANCE_MOR); setMOR(SERVICE_INSTANCE_MOR);
VimPortType vimService_ = new VimPortType(wsc.getBaseUrl().toString(), ignoreCert.equals("true")); // PATCH TO USE OUR wsc
VimPortType vimService = new VimPortType(wsc); VimPortType vimService = new VimPortType(wsc);
vimService.getWsc().setVimNameSpace(wsc.getVimNameSpace()); vimService.getWsc().setVimNameSpace(wsc.getVimNameSpace());
serviceContent = vimService.retrieveServiceContent(SERVICE_INSTANCE_MOR); serviceContent = vimService.retrieveServiceContent(SERVICE_INSTANCE_MOR);
vimService.getWsc().setSoapActionOnApiVersion(serviceContent.getAbout().getApiVersion()); vimService.getWsc().setSoapActionOnApiVersion(serviceContent.getAbout().getApiVersion());
setServerConnection(new ServerConnection(wsc.getBaseUrl(), vimService, this)); setServerConnection(new ServerConnection(wsc.getBaseUrl(), vimService, this));
// escape 5 special chars // escape 5 special chars
// http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references // http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references
password = password.replace("&", "&") password = password.replace("&", "&")
.replace("<", "&lt;") .replace("<", "&lt;")
.replace(">", "&gt;") .replace(">", "&gt;")
.replace("\"", "&quot;") .replace("\"", "&quot;")
.replace("'", "&apos;"); .replace("'", "&apos;");
UserSession userSession = getSessionManager().login(username, password, null); UserSession userSession = getSessionManager().login(username, password, null);
// it appears that this data is never used anywhere via reference checks getServerConnection().setUserSession(userSession);
// getServerConnection().setUserSession(userSession);
} }
public ServiceInstance(URL url, String username, String password)
throws RemoteException, MalformedURLException
{
this(url, username, password, false);
}
public ServiceInstance(URL url, String username, String password, boolean ignoreCert)
throws RemoteException, MalformedURLException
{
this(url, username, password, ignoreCert, VIM25_NAMESPACE);
}
public ServiceInstance(URL url, String username, String password, boolean ignoreCert, String namespace)
throws RemoteException, MalformedURLException
{
if(url == null || username==null)
{
throw new NullPointerException("None of url, username can be null.");
}
setMOR(SERVICE_INSTANCE_MOR);
VimPortType vimService = new VimPortType(url.toString(), ignoreCert);
vimService.getWsc().setVimNameSpace(namespace);
serviceContent = vimService.retrieveServiceContent(SERVICE_INSTANCE_MOR);
vimService.getWsc().setSoapActionOnApiVersion(serviceContent.getAbout().getApiVersion());
setServerConnection(new ServerConnection(url, vimService, this));
// escape 5 special chars
// http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references
password = password.replace("&", "&amp;")
.replace("<", "&lt;")
.replace(">", "&gt;")
.replace("\"", "&quot;")
.replace("'", "&apos;");
UserSession userSession = getSessionManager().login(username, password, null);
getServerConnection().setUserSession(userSession);
}
public ServiceInstance(URL url, String sessionStr, boolean ignoreCert)
throws RemoteException, MalformedURLException
{
this(url, sessionStr, ignoreCert, VIM25_NAMESPACE);
}
// sessionStr format: "vmware_soap_session=\"B3240D15-34DF-4BB8-B902-A844FDF42E85\""
public ServiceInstance(URL url, String sessionStr, boolean ignoreCert, String namespace)
throws RemoteException, MalformedURLException
{
if(url == null || sessionStr ==null)
{
throw new NullPointerException("None of url, session string can be null.");
}
setMOR(SERVICE_INSTANCE_MOR);
VimPortType vimService = new VimPortType(url.toString(), ignoreCert);
WSClient wsc = vimService.getWsc();
wsc.setCookie(sessionStr);
wsc.setVimNameSpace(namespace);
serviceContent = vimService.retrieveServiceContent(SERVICE_INSTANCE_MOR);
setServerConnection(new ServerConnection(url, vimService, this));
UserSession userSession = (UserSession) getSessionManager().getCurrentProperty("currentSession");
getServerConnection().setUserSession(userSession);
}
public ServiceInstance(ServerConnection sc)
{
super(sc, SERVICE_INSTANCE_MOR);
}
public Calendar getServerClock() public Calendar getServerClock()
{ {

View File

@ -64,13 +64,10 @@ import org.jclouds.util.Strings2;
import com.vmware.vim25.ManagedObjectReference; import com.vmware.vim25.ManagedObjectReference;
/** /**
*
* Patched to include logging
*
* The Web Service Engine * The Web Service Engine
* @author Steve Jin (sjin@vmware.com) * @author Steve Jin (sjin@vmware.com)
*/ */
// MARKED NOT FINAL
public class WSClient public class WSClient
{ {
private final static String SOAP_HEADER = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><soapenv:Envelope xmlns:soapenc=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"><soapenv:Body>"; private final static String SOAP_HEADER = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><soapenv:Envelope xmlns:soapenc=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"><soapenv:Body>";
@ -86,38 +83,36 @@ public class WSClient
private int connectTimeout = 0; private int connectTimeout = 0;
private int readTimeout = 0; private int readTimeout = 0;
public WSClient(String serverUrl) throws MalformedURLException
{
public WSClient(String serverUrl) throws MalformedURLException { this(serverUrl, true);
this(serverUrl, true);
} }
public WSClient(String serverUrl, boolean ignoreCert) throws MalformedURLException { public WSClient(String serverUrl, boolean ignoreCert) throws MalformedURLException
if(serverUrl.endsWith("/")) { {
if(serverUrl.endsWith("/"))
{
serverUrl = serverUrl.substring(0, serverUrl.length()-1); serverUrl = serverUrl.substring(0, serverUrl.length()-1);
} }
this.baseUrl = new URL(serverUrl); this.baseUrl = new URL(serverUrl);
if(ignoreCert) { if(ignoreCert)
ignoreCertificates(); {
try
{
trustAllHttpsCertificates();
HttpsURLConnection.setDefaultHostnameVerifier
(
new HostnameVerifier()
{
public boolean verify(String urlHostName, SSLSession session)
{
return true;
}
}
);
} catch (Exception e) {}
} }
} }
/**
*
*/
public void ignoreCertificates() {
try {
trustAllHttpsCertificates();
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
public boolean verify(String urlHostName, SSLSession session) {
return true;
}
});
} catch (Exception e) {
// TODO
}
}
public Object invoke(ManagedObjectReference mor, String methodName, Argument[] paras, String returnType) throws IOException public Object invoke(ManagedObjectReference mor, String methodName, Argument[] paras, String returnType) throws IOException
{ {
@ -133,23 +128,9 @@ public WSClient(String serverUrl) throws MalformedURLException {
Element body = (Element) root.elements().get(0); Element body = (Element) root.elements().get(0);
Element resp = (Element) body.elements().get(0); Element resp = (Element) body.elements().get(0);
// System.out.println("\n\n++++ methodName " + methodName);
//
// for (Argument argument : paras) {
// System.out.println("par: " + argument.getName() + ", " + argument.getValue());
// if(argument.getValue() instanceof ManagedObjectReference)
// System.out.println("\t** " + ((ManagedObjectReference) argument.getValue()).getVal());
// else if(argument.getValue() instanceof PropertyFilterSpec) {
// for (ObjectSpec p : ((PropertyFilterSpec) argument.getValue()).getObjectSet()) {
// System.out.println("\t-- " + p.getObj().getVal());
// }
//
// }
// }
if(resp.getName().indexOf("Fault")!=-1) if(resp.getName().indexOf("Fault")!=-1)
{ {
SoapFaultException sfe = null; SoapFaultException sfe = null;
try try
{ {
sfe = XmlGen.parseSoapFault(resp); sfe = XmlGen.parseSoapFault(resp);
@ -164,7 +145,7 @@ public WSClient(String serverUrl) throws MalformedURLException {
} }
else else
{ {
throw sfe; throw sfe;
} }
} }
else else
@ -187,8 +168,8 @@ public WSClient(String serverUrl) throws MalformedURLException {
} }
} }
public Element invoke(String methodName, Argument[] paras) throws RemoteException { public Element invoke(String methodName, Argument[] paras) throws RemoteException
{
String soapMsg = createSoapMessage(methodName, paras); String soapMsg = createSoapMessage(methodName, paras);
Element root = null; Element root = null;
@ -198,7 +179,7 @@ public WSClient(String serverUrl) throws MalformedURLException {
is = post(soapMsg); is = post(soapMsg);
SAXReader reader = new SAXReader(); SAXReader reader = new SAXReader();
Document doc = reader.read(is); Document doc = reader.read(is);
root = doc.getRootElement(); root = doc.getRootElement();
} catch (Exception e) } catch (Exception e)
{ {
throw new RemoteException("VI SDK invoke exception:" + e); throw new RemoteException("VI SDK invoke exception:" + e);
@ -226,12 +207,13 @@ public WSClient(String serverUrl) throws MalformedURLException {
} }
} }
private String createSoapMessage(String methodName, Argument[] paras) { private String createSoapMessage(String methodName, Argument[] paras)
{
StringBuffer sb = new StringBuffer(); StringBuffer sb = new StringBuffer();
sb.append(SOAP_HEADER); sb.append(SOAP_HEADER);
sb.append("<" + methodName + vimNameSpace); sb.append("<" + methodName + vimNameSpace);
for(int i=0; i<paras.length; i++) for(int i=0; i<paras.length; i++)
{ {
String key = paras[i].getName(); String key = paras[i].getName();
@ -242,14 +224,13 @@ public WSClient(String serverUrl) throws MalformedURLException {
sb.append("</" + methodName + ">"); sb.append("</" + methodName + ">");
sb.append(SOAP_END); sb.append(SOAP_END);
// System.out.println("sb.tostring: " + sb.toString());
return sb.toString(); return sb.toString();
} }
public InputStream post(String soapMsg) throws IOException public InputStream post(String soapMsg) throws IOException
{ {
HttpURLConnection postCon = (HttpURLConnection) baseUrl.openConnection(); HttpURLConnection postCon = (HttpURLConnection) baseUrl.openConnection();
if(connectTimeout > 0) if(connectTimeout > 0)
postCon.setConnectTimeout(connectTimeout); postCon.setConnectTimeout(connectTimeout);
if(readTimeout > 0) if(readTimeout > 0)
@ -271,14 +252,12 @@ public WSClient(String serverUrl) throws MalformedURLException {
OutputStream os = postCon.getOutputStream(); OutputStream os = postCon.getOutputStream();
OutputStreamWriter out = new OutputStreamWriter(os); OutputStreamWriter out = new OutputStreamWriter(os);
// PRINT REQUEST // PRINT REQUEST
try { try {
System.out.printf("%s %s HTTP/1.1%n", "POST", baseUrl.toURI().toASCIIString()); System.out.printf("%s %s HTTP/1.1%n", "POST", baseUrl.toURI().toASCIIString());
for( Entry<String, List<String>> i :postCon.getRequestProperties().entrySet()){ System.out.printf("%s: %s%n", SOAP_ACTION_HEADER, soapAction);
for (String v: i.getValue()) if(cookie!=null)
System.out.printf("%s: %s%n", i.getKey(), v); System.out.printf("%s: %s%n", "Cookie", cookie);
}
System.out.println(soapMsg); System.out.println(soapMsg);
} catch (URISyntaxException e1) { } catch (URISyntaxException e1) {
@ -293,33 +272,32 @@ public WSClient(String serverUrl) throws MalformedURLException {
try try
{ {
is = postCon.getInputStream(); is = postCon.getInputStream();
} }
catch(IOException ioe) catch(IOException ioe)
{ {
is = postCon.getErrorStream(); is = postCon.getErrorStream();
} }
// PRINT RESPONSE
System.out.printf("HTTP/1.1 %d %s", postCon.getResponseCode(), postCon.getResponseMessage());
for( Entry<String, List<String>> i :postCon.getHeaderFields().entrySet()){
for (String v: i.getValue())
System.out.printf("%s: %s%n", i.getKey(), v);
}
String response = Strings2.toStringAndClose(is);
System.out.println(response);
is = new ByteArrayInputStream(response.getBytes());
// END PRINT RESPONSE
if(cookie==null) if(cookie==null)
{ {
cookie = postCon.getHeaderField("Set-Cookie"); cookie = postCon.getHeaderField("Set-Cookie");
} }
// PRINT RESPONSE
System.out.printf("HTTP/1.1 %d %s", postCon.getResponseCode(), postCon.getResponseMessage());
for (Entry<String, List<String>> i : postCon.getHeaderFields().entrySet()) {
for (String v : i.getValue())
System.out.printf("%s: %s%n", i.getKey(), v);
}
String response = Strings2.toStringAndClose(is);
System.out.println(response);
is = new ByteArrayInputStream(response.getBytes());
// END PRINT RESPONSE
return is; return is;
} }
@ -430,7 +408,5 @@ public WSClient(String serverUrl) throws MalformedURLException {
throws CertificateException throws CertificateException
{ {
} }
} }
} }