Author: rfeng
Date: Thu Apr 29 19:45:01 2010
New Revision: 939468

URL: http://svn.apache.org/viewvc?rev=939468&view=rev
Log:
Fix the uri calculation

Modified:
    
tuscany/sca-java-2.x/trunk/modules/implementation-widget-runtime/src/main/java/org/apache/tuscany/sca/implementation/widget/provider/WidgetImplementationProvider.java

Modified: 
tuscany/sca-java-2.x/trunk/modules/implementation-widget-runtime/src/main/java/org/apache/tuscany/sca/implementation/widget/provider/WidgetImplementationProvider.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/implementation-widget-runtime/src/main/java/org/apache/tuscany/sca/implementation/widget/provider/WidgetImplementationProvider.java?rev=939468&r1=939467&r2=939468&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/implementation-widget-runtime/src/main/java/org/apache/tuscany/sca/implementation/widget/provider/WidgetImplementationProvider.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/implementation-widget-runtime/src/main/java/org/apache/tuscany/sca/implementation/widget/provider/WidgetImplementationProvider.java
 Thu Apr 29 19:45:01 2010
@@ -84,11 +84,11 @@ class WidgetImplementationProvider imple
     }
 
     public void start() {
-        String contextRoot = getContextRoot();
+        String baseURI = getBaseURI();
 
         // get the ScaDomainScriptServlet, if it doesn't yet exist create one
         // this uses removeServletMapping / addServletMapping as there is no 
getServletMapping facility
-        scriptURI = URI.create(contextRoot + "/" + this.widgetName + 
".js").toString();
+        scriptURI = URI.create(baseURI + "/" + this.widgetName + 
".js").toString();
         Servlet servlet = servletHost.getServletMapping(scriptURI);
         if (servlet == null /*|| servlet instanceof HTTPGetListenerServlet*/) {
             WidgetComponentScriptServlet widgetScriptServlet;
@@ -111,25 +111,34 @@ class WidgetImplementationProvider imple
      * Get the contextRoot considering the HTTP Binding URI when in a embedded 
environment
      * @return
      */
-    private String getContextRoot() {
-        String contextRoot = null;
+    private String getBaseURI() {
+        String baseURI = null;
+        String contextPath = "/";
         if (servletHost != null) {
-            contextRoot = servletHost.getContextPath();
+            contextPath = servletHost.getContextPath();
         }
-        
-        if (contextRoot == null) {
-            for (ComponentService service : component.getServices()) {
-                if ("Widget".equals(service.getName())) {
-                    for (Binding binding : service.getBindings()) {
-                        if (binding.getType().equals(BINDING_HTTP)) {
-                            contextRoot = binding.getURI();
-                        }
+        if (!contextPath.endsWith("/")) {
+            contextPath = contextPath + "/";
+        }
+
+        ComponentService service = component.getService("Widget");
+        if (service != null) {
+            for (Binding binding : service.getBindings()) {
+                if (binding.getType().equals(BINDING_HTTP)) {
+                    String bindingURI = binding.getURI();
+                    URI uri = URI.create(bindingURI);
+                    if (uri.isAbsolute()) {
+                        return bindingURI;
+                    }
+                    if (bindingURI.startsWith("/")) {
+                        bindingURI = bindingURI.substring(1);
                     }
+                    baseURI = contextPath + bindingURI;
                 }
             }
         }
-        
-        return contextRoot == null ? "" : contextRoot;
-    }    
+
+        return baseURI == null ? "" : baseURI;
+    }
 
 }


Reply via email to