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 2006/09/11 11:29:27 UTC

svn commit: r442178 - in /incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba: CorbaBindingImpl.java CorbaDSIServant.java

Author: dmiddlem
Date: Mon Sep 11 04:29:26 2006
New Revision: 442178

URL: http://svn.apache.org/viewvc?view=rev&rev=442178
Log:
Small improvements to the code for committed fix for issue (YOKO-162)

Modified:
    incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaBindingImpl.java
    incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaDSIServant.java

Modified: incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaBindingImpl.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaBindingImpl.java?view=diff&rev=442178&r1=442177&r2=442178
==============================================================================
--- incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaBindingImpl.java (original)
+++ incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaBindingImpl.java Mon Sep 11 04:29:26 2006
@@ -225,7 +225,7 @@
     }
 
     private boolean addMarshalParams(DataBindingCallback callback,
-                                     List<ParamType> paramTypes,
+                                     List<ParamType> params,
                                      CorbaMessageContext corbaCtx,
                                      ObjectMessageContext objContext,
                                      XMLInputFactory inputFactory,
@@ -236,26 +236,24 @@
         Object ret = objContext.getReturn();
         boolean hasOutParamReturn = false;
         
-        // We need to count the number of out parameters to determine how Celtix is going to handle things.
-        int outParamCount = 0;
-        for (Iterator<ParamType> paramIter = paramTypes.iterator(); paramIter.hasNext();) {
-            ParamType p = paramIter.next();
-            if (p.getMode().equals(ModeType.OUT)) {
-                outParamCount++;
-            }
+        // We need to check to see if Celtix is using the return type of the operation as the method for
+        // passing back the value of a CORBA out parameter.
+        if (args != null) {
+            hasOutParamReturn = params.size() != args.length;
+        } else {
+            hasOutParamReturn = params.size() > 0;
         }
 
         int cbParamCount = 0;
-        for (Iterator<ParamType> paramIter = paramTypes.iterator(); paramIter.hasNext();) {
+        for (Iterator<ParamType> paramIter = params.iterator(); paramIter.hasNext();) {
             ParamType param = paramIter.next();
             QName elName = null;
             Object partValue = null;
-            if (param.getMode().equals(ModeType.OUT) && outParamCount == 1) {
+            if (param.getMode().equals(ModeType.OUT) && hasOutParamReturn) {
                 // This is actually an OUT parameter to a CORBA application
                 WebResult wr = callback.getWebResult();
                 elName = new QName(wr.targetNamespace(), wr.name());
                 partValue = ret;
-                hasOutParamReturn = true;
             } else {
                 WebParam wp = callback.getWebParam(cbParamCount);
                 elName = new QName(wp.targetNamespace(), wp.name());
@@ -397,8 +395,8 @@
             outputFactory.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES, Boolean.TRUE);
 
             boolean hasOutParamReturn = 
-                addUnmarshalParams(callback, params, inputFactory, outputFactory, 
-                                   corbaCtx, objContext, reader);
+                addUnmarshalParams(callback, params, corbaCtx, objContext, 
+                                   inputFactory, outputFactory, reader);
             
             // Check to see if we have an input or output message and handle the return type
             // appropriately
@@ -423,18 +421,21 @@
     }
     
     public boolean addUnmarshalParams(DataBindingCallback callback,
-                                   List<ParamType> params,
-                                   XMLInputFactory inputFactory,
-                                   XMLOutputFactory outputFactory, 
-                                   CorbaMessageContext corbaContext,
-                                   ObjectMessageContext objContext,
-                                   DataReader<XMLEventReader> reader) throws java.lang.Exception {
+                                      List<ParamType> params,
+                                      CorbaMessageContext corbaContext,
+                                      ObjectMessageContext objContext,
+                                      XMLInputFactory inputFactory,
+                                      XMLOutputFactory outputFactory, 
+                                      DataReader<XMLEventReader> reader) throws java.lang.Exception {
         int cbParamIndex = 0;
         int paramOffset = 0;
 
         Object[] args = objContext.getMessageObjects();
         CorbaStreamable[] streamables = corbaContext.getMessage().getStreamableArguments();
         boolean hasOutParamReturn = false;
+
+        // We need to check to see if Celtix is using the return type of the operation as the method for
+        // passing back the value of a CORBA out parameter.
         if (args != null) {
             hasOutParamReturn = params.size() != args.length;
         } else {

Modified: incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaDSIServant.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaDSIServant.java?view=diff&rev=442178&r1=442177&r2=442178
==============================================================================
--- incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaDSIServant.java (original)
+++ incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaDSIServant.java Mon Sep 11 04:29:26 2006
@@ -27,6 +27,7 @@
 import javax.xml.ws.WebServiceException;
 import javax.xml.ws.handler.MessageContext;
 
+//import org.apache.schemas.yoko.bindings.corba.ArgType;
 import org.apache.schemas.yoko.bindings.corba.BindingType;
 import org.apache.schemas.yoko.bindings.corba.ModeType;
 import org.apache.schemas.yoko.bindings.corba.OperationType;
@@ -119,7 +120,7 @@
             // Build a list of streamables that correspond to the values that should be contained in the
             // argument list of the ServerRequest, build the correct NVList and retreive the arguments
             CorbaStreamable[] arguments = new CorbaStreamable[paramTypes.size()];
-            NVList list = prepareDIIArgsList(corbaCtx, arguments, paramTypes, typeMaps, callback);
+            NVList list = prepareDIIArgsList(corbaCtx, objectCtx, arguments, paramTypes, typeMaps, callback);
             request.arguments(list);
 
             serverBinding.getBindingImpl().unmarshal(corbaCtx, objectCtx, callback);
@@ -159,17 +160,19 @@
         }
     }
     
-    public NVList prepareDIIArgsList(CorbaMessageContext corbaCtx, CorbaStreamable[] streamables, 
-                                     List<ParamType> params, List<CorbaTypeMap> typeMaps,
-                                     DataBindingCallback callback) {
+    public NVList prepareDIIArgsList(CorbaMessageContext corbaCtx, ObjectMessageContext objContext, 
+                                     CorbaStreamable[] streamables, List<ParamType> params,  
+                                     List<CorbaTypeMap> typeMaps, DataBindingCallback callback) {
         NVList list = orb.create_list(streamables.length);
 
-        int outParamCount = 0;
-        for (Iterator<ParamType> iter = params.iterator(); iter.hasNext();) {
-            ParamType param = iter.next();
-            if (param.getMode().equals(ModeType.OUT)) {
-                outParamCount++;
-            }
+        // We need to check to see if Celtix is using the return type of the operation as the method for
+        // passing back the value of a CORBA out parameter.
+        Object[] args = objContext.getMessageObjects();
+        boolean hasOutParamReturn = false;
+        if (args != null) {
+            hasOutParamReturn = params.size() != args.length;
+        } else {
+            hasOutParamReturn = params.size() > 0;
         }
         
         int paramOffset = 0;
@@ -178,7 +181,7 @@
             int index = cbParamCount + paramOffset;
             ParamType pType = iter.next();
             QName paramName = null;
-            if (pType.getMode().equals(ModeType.OUT) && outParamCount == 1) {
+            if (pType.getMode().equals(ModeType.OUT) && hasOutParamReturn) {
                 paramName = new QName(callback.getWebResult().targetNamespace(),
                                       callback.getWebResult().name());
                 paramOffset = 1;