From 78b77c81722b1914117f4f6d6e61626089d7ec4f Mon Sep 17 00:00:00 2001 From: Adrian Cole Date: Sun, 23 Jan 2011 13:04:43 -0800 Subject: [PATCH] reverted as much custom vijava code as possible --- .../com/vmware/vim25/mo/ServiceInstance.java | 154 +++++++++++++----- .../java/com/vmware/vim25/ws/WSClient.java | 130 ++++++--------- 2 files changed, 165 insertions(+), 119 deletions(-) diff --git a/sandbox-apis/vi/src/main/java/com/vmware/vim25/mo/ServiceInstance.java b/sandbox-apis/vi/src/main/java/com/vmware/vim25/mo/ServiceInstance.java index 15d1f24fd7..b1756f0ff8 100644 --- a/sandbox-apis/vi/src/main/java/com/vmware/vim25/mo/ServiceInstance.java +++ b/sandbox-apis/vi/src/main/java/com/vmware/vim25/mo/ServiceInstance.java @@ -30,6 +30,7 @@ POSSIBILITY OF SUCH DAMAGE. package com.vmware.vim25.mo; import java.net.MalformedURLException; +import java.net.URL; import java.rmi.RemoteException; import java.util.Calendar; @@ -56,28 +57,25 @@ import com.vmware.vim25.ws.WSClient; * @author Steve JIN (sjin@vmware.com) */ -public class ServiceInstance extends ManagedObject { - -// @Resource -// @Named(ComputeServiceConstants.COMPUTE_LOGGER) -// protected Logger logger = Logger.NULL; - - private ServiceContent serviceContent = null; - final static ManagedObjectReference SERVICE_INSTANCE_MOR; - public final static String VIM25_NAMESPACE = " xmlns=\"urn:vim25\">"; - public final static String VIM20_NAMESPACE = " xmlns=\"urn:vim2\">"; - - static - { - SERVICE_INSTANCE_MOR = new ManagedObjectReference(); - SERVICE_INSTANCE_MOR.set_value("ServiceInstance"); - SERVICE_INSTANCE_MOR.setType("ServiceInstance"); - } +public class ServiceInstance extends ManagedObject +{ + private ServiceContent serviceContent = null; + final static ManagedObjectReference SERVICE_INSTANCE_MOR; + public final static String VIM25_NAMESPACE = " xmlns=\"urn:vim25\">"; + public final static String VIM20_NAMESPACE = " xmlns=\"urn:vim2\">"; + + static + { + 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) - throws RemoteException, MalformedURLException { + throws RemoteException, MalformedURLException + { - //logger.debug(">> ServiceInstance(%s, %s, %s, %s)", username, password, ignoreCert); if(ignoreCert.equals("true")) { this.ignoreCertificate(); } @@ -85,30 +83,102 @@ public class ServiceInstance extends ManagedObject { if(username == null) { throw new NullPointerException("username cannot be null."); } - - setMOR(SERVICE_INSTANCE_MOR); - - VimPortType vimService_ = new VimPortType(wsc.getBaseUrl().toString(), ignoreCert.equals("true")); - VimPortType vimService = new VimPortType(wsc); - vimService.getWsc().setVimNameSpace(wsc.getVimNameSpace()); - - serviceContent = vimService.retrieveServiceContent(SERVICE_INSTANCE_MOR); - vimService.getWsc().setSoapActionOnApiVersion(serviceContent.getAbout().getApiVersion()); - setServerConnection(new ServerConnection(wsc.getBaseUrl(), vimService, this)); - - // escape 5 special chars - // http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references - password = password.replace("&", "&") - .replace("<", "<") - .replace(">", ">") - .replace("\"", """) - .replace("'", "'"); - - UserSession userSession = getSessionManager().login(username, password, null); - // it appears that this data is never used anywhere via reference checks - // getServerConnection().setUserSession(userSession); + + setMOR(SERVICE_INSTANCE_MOR); + + // PATCH TO USE OUR wsc + VimPortType vimService = new VimPortType(wsc); + vimService.getWsc().setVimNameSpace(wsc.getVimNameSpace()); + + serviceContent = vimService.retrieveServiceContent(SERVICE_INSTANCE_MOR); + vimService.getWsc().setSoapActionOnApiVersion(serviceContent.getAbout().getApiVersion()); + setServerConnection(new ServerConnection(wsc.getBaseUrl(), vimService, this)); + + // escape 5 special chars + // http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references + password = password.replace("&", "&") + .replace("<", "<") + .replace(">", ">") + .replace("\"", """) + .replace("'", "'"); + + UserSession userSession = getSessionManager().login(username, password, null); + 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("&", "&") + .replace("<", "<") + .replace(">", ">") + .replace("\"", """) + .replace("'", "'"); + + 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() { diff --git a/sandbox-apis/vi/src/main/java/com/vmware/vim25/ws/WSClient.java b/sandbox-apis/vi/src/main/java/com/vmware/vim25/ws/WSClient.java index 8977ab898a..cdd9ce495a 100644 --- a/sandbox-apis/vi/src/main/java/com/vmware/vim25/ws/WSClient.java +++ b/sandbox-apis/vi/src/main/java/com/vmware/vim25/ws/WSClient.java @@ -64,13 +64,10 @@ import org.jclouds.util.Strings2; import com.vmware.vim25.ManagedObjectReference; /** - * - * Patched to include logging - * * The Web Service Engine * @author Steve Jin (sjin@vmware.com) */ - +// MARKED NOT FINAL public class WSClient { private final static String SOAP_HEADER = ""; @@ -86,38 +83,36 @@ public class WSClient private int connectTimeout = 0; private int readTimeout = 0; - - -public WSClient(String serverUrl) throws MalformedURLException { - this(serverUrl, true); - + public WSClient(String serverUrl) throws MalformedURLException + { + this(serverUrl, true); } - public WSClient(String serverUrl, boolean ignoreCert) throws MalformedURLException { - if(serverUrl.endsWith("/")) { + public WSClient(String serverUrl, boolean ignoreCert) throws MalformedURLException + { + if(serverUrl.endsWith("/")) + { serverUrl = serverUrl.substring(0, serverUrl.length()-1); } this.baseUrl = new URL(serverUrl); - if(ignoreCert) { - ignoreCertificates(); + if(ignoreCert) + { + 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 { @@ -133,23 +128,9 @@ public WSClient(String serverUrl) throws MalformedURLException { Element body = (Element) root.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) { - SoapFaultException sfe = null; + SoapFaultException sfe = null; try { sfe = XmlGen.parseSoapFault(resp); @@ -164,7 +145,7 @@ public WSClient(String serverUrl) throws MalformedURLException { } else { - throw sfe; + throw sfe; } } 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); Element root = null; @@ -198,7 +179,7 @@ public WSClient(String serverUrl) throws MalformedURLException { is = post(soapMsg); SAXReader reader = new SAXReader(); Document doc = reader.read(is); - root = doc.getRootElement(); + root = doc.getRootElement(); } catch (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(); sb.append(SOAP_HEADER); sb.append("<" + methodName + vimNameSpace); - + for(int i=0; i"); sb.append(SOAP_END); -// System.out.println("sb.tostring: " + sb.toString()); return sb.toString(); } public InputStream post(String soapMsg) throws IOException { HttpURLConnection postCon = (HttpURLConnection) baseUrl.openConnection(); - + if(connectTimeout > 0) postCon.setConnectTimeout(connectTimeout); if(readTimeout > 0) @@ -271,14 +252,12 @@ public WSClient(String serverUrl) throws MalformedURLException { OutputStream os = postCon.getOutputStream(); OutputStreamWriter out = new OutputStreamWriter(os); - // PRINT REQUEST try { System.out.printf("%s %s HTTP/1.1%n", "POST", baseUrl.toURI().toASCIIString()); - for( Entry> i :postCon.getRequestProperties().entrySet()){ - for (String v: i.getValue()) - System.out.printf("%s: %s%n", i.getKey(), v); - } + System.out.printf("%s: %s%n", SOAP_ACTION_HEADER, soapAction); + if(cookie!=null) + System.out.printf("%s: %s%n", "Cookie", cookie); System.out.println(soapMsg); } catch (URISyntaxException e1) { @@ -293,33 +272,32 @@ public WSClient(String serverUrl) throws MalformedURLException { try { - is = postCon.getInputStream(); + is = postCon.getInputStream(); } 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> 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) { cookie = postCon.getHeaderField("Set-Cookie"); } + + // PRINT RESPONSE + + System.out.printf("HTTP/1.1 %d %s", postCon.getResponseCode(), postCon.getResponseMessage()); + + for (Entry> 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; } @@ -430,7 +408,5 @@ public WSClient(String serverUrl) throws MalformedURLException { throws CertificateException { } - - } }