You are viewing a plain text version of this content. The canonical link for it is here.
Posted to yoko-commits@incubator.apache.org by dm...@apache.org on 2007/05/03 14:36:59 UTC

svn commit: r534892 - in /incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba: runtime/CorbaStaxObject.java utils/CorbaObjectReferenceHelper.java

Author: dmiddlem
Date: Thu May  3 07:36:56 2007
New Revision: 534892

URL: http://svn.apache.org/viewvc?view=rev&rev=534892
Log:
* Fix for YOKO-364.
* A few miscellaneous optimizations for Object Reference support.

Modified:
    incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/runtime/CorbaStaxObject.java
    incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/utils/CorbaObjectReferenceHelper.java

Modified: incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/runtime/CorbaStaxObject.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/runtime/CorbaStaxObject.java?view=diff&rev=534892&r1=534891&r2=534892
==============================================================================
--- incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/runtime/CorbaStaxObject.java (original)
+++ incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/runtime/CorbaStaxObject.java Thu May  3 07:36:56 2007
@@ -29,6 +29,8 @@
 
 import javax.wsdl.Binding;
 import javax.wsdl.Definition;
+import javax.wsdl.Port;
+import javax.wsdl.Service;
 import javax.xml.namespace.QName;
 import javax.xml.stream.XMLEventFactory;
 import javax.xml.stream.XMLEventReader;
@@ -46,6 +48,7 @@
 import org.apache.cxf.service.model.ServiceInfo;
 import org.apache.cxf.wsdl11.WSDLServiceBuilder;
 
+import org.apache.schemas.yoko.bindings.corba.AddressType;
 import org.apache.schemas.yoko.bindings.corba.Alias;
 import org.apache.schemas.yoko.bindings.corba.Anonarray;
 import org.apache.schemas.yoko.bindings.corba.Anonsequence;
@@ -1427,9 +1430,13 @@
                 }
                 reader.nextEvent().asEndElement();
 
-                org.omg.CORBA.Object ref = orb.string_to_object(address);
+                if (address == null) {
+                    address = readAddressInfoFromWSDL(serviceName, interfaceName);
+                }
+                
+                org.omg.CORBA.Object ref = CorbaUtils.importObjectReference(orb, address);
                 ref = CorbaObjectReferenceHelper.addYokoProfileToReference(ref, address, endpointName,
-                        interfaceName, serviceName);
+                                                                           interfaceName, serviceName);
                 obj.setReference(ref);
             }
         } catch (java.lang.Exception ex) {
@@ -1607,6 +1614,37 @@
         }
 
         return wsdlBinding;
+    }
+
+    private String readAddressInfoFromWSDL(QName serviceName, QName interfaceName) {
+        String address = null;
+        
+        Definition wsdlDef = (Definition)serviceInfo.getProperty(WSDLServiceBuilder.WSDL_DEFINITION);
+        Service service = wsdlDef.getService(serviceName);
+        Collection portsList = service.getPorts().values();
+        Port port = null;
+
+        for (Iterator iter = portsList.iterator(); iter.hasNext();) {
+            Port p = (Port)iter.next();
+            Binding binding = p.getBinding();
+            if (binding.getPortType().getQName().equals(interfaceName)) {
+                port = p;
+                break;
+            }
+        }
+        
+        if (port != null) {
+            List extElements = port.getExtensibilityElements();
+            for (Iterator iter = extElements.iterator(); iter.hasNext();) {
+                Object obj = iter.next();
+                if (obj instanceof AddressType) {
+                    AddressType addr = (AddressType)obj;
+                    address = addr.getLocation();
+                }
+            }
+        }
+        
+        return address;
     }
     
     private boolean isNestedSequence(TypeCode tc) {

Modified: incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/utils/CorbaObjectReferenceHelper.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/utils/CorbaObjectReferenceHelper.java?view=diff&rev=534892&r1=534891&r2=534892
==============================================================================
--- incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/utils/CorbaObjectReferenceHelper.java (original)
+++ incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/utils/CorbaObjectReferenceHelper.java Thu May  3 07:36:56 2007
@@ -240,7 +240,17 @@
                     int id = profileStream.read_ulong();
                     switch(id) {
                     case YOKO_ENDPOINT_ADDRESS_ID:
-                        address.append(profileStream.read_string());
+                        String addr = profileStream.read_string();
+                        //address.append(profileStream.read_string());
+                        
+                        // We have to remember that if the address was specified as a file, the
+                        // file most likely will not be available on the remote side.  We'll 
+                        // convert these over to an address based on our object reference.
+                        if (addr.startsWith("relfile:") || addr.startsWith("file:")) {
+                            address.append(orb.object_to_string(obj));
+                        } else {
+                            address.append(addr);
+                        }
                         break;
                     case YOKO_ENDPOINT_NAME_ID:
                         endpointName.append(profileStream.read_string());
@@ -272,4 +282,4 @@
             }
         }
     }
-}
\ No newline at end of file
+}