You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by he...@apache.org on 2005/06/30 14:50:31 UTC

svn commit: r202549 - in /webservices/axis/trunk/java/modules: core/src/org/apache/axis/receivers/RawXMLINOutMessageReceiver.java samples/test/org/apache/axis/mail/MailRequestResponseRawXMLTest.java

Author: hemapani
Date: Thu Jun 30 05:50:30 2005
New Revision: 202549

URL: http://svn.apache.org/viewcvs?rev=202549&view=rev
Log:
update the Message Receiver

Modified:
    webservices/axis/trunk/java/modules/core/src/org/apache/axis/receivers/RawXMLINOutMessageReceiver.java
    webservices/axis/trunk/java/modules/samples/test/org/apache/axis/mail/MailRequestResponseRawXMLTest.java

Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis/receivers/RawXMLINOutMessageReceiver.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis/receivers/RawXMLINOutMessageReceiver.java?rev=202549&r1=202548&r2=202549&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis/receivers/RawXMLINOutMessageReceiver.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis/receivers/RawXMLINOutMessageReceiver.java Thu Jun 30 05:50:30 2005
@@ -34,8 +34,8 @@
  * This is a Simple java Provider.
  */
 public class RawXMLINOutMessageReceiver
-        extends AbstractInOutSyncMessageReceiver
-        implements MessageReceiver {
+    extends AbstractInOutSyncMessageReceiver
+    implements MessageReceiver {
     /**
      * Field log
      */
@@ -47,11 +47,6 @@
     private String scope;
 
     /**
-     * Field method
-     */
-    private Method method;
-
-    /**
      * Field classLoader
      */
     private ClassLoader classLoader;
@@ -64,7 +59,7 @@
     }
 
     public void invokeBusinessLogic(MessageContext msgContext, MessageContext newmsgContext)
-            throws AxisFault {
+        throws AxisFault {
         try {
 
             // get the implementation class for the Web Service
@@ -72,91 +67,81 @@
 
             // find the WebService method
             Class ImplClass = obj.getClass();
-            DependencyManager.configureBusinussLogicProvider(obj, msgContext);
-
-            OperationDescription op = msgContext.getOperationContext().getAxisOperation();
-            if (op == null) {
-                throw new AxisFault("Operation is not located, if this is doclit style the SOAP-ACTION should specified via the SOAP Action to use the RawXMLProvider");
-            }
-            String methodName = op.getName().getLocalPart();
-            Method[] methods = ImplClass.getMethods();
-            for (int i = 0; i < methods.length; i++) {
-                if (methods[i].getName().equals(methodName)) {
-                    this.method = methods[i];
-                    break;
-                }
-            }
-            Class[] parameters = method.getParameterTypes();
-            if ((parameters != null)
-                    && (parameters.length == 1)
-                    && OMElement.class.getName().equals(parameters[0].getName())) {
-                OMElement methodElement = msgContext.getEnvelope().getBody().getFirstElement();
 
-                OMElement parmeter = null;
-                SOAPEnvelope envelope = null;
+            //Inject the Message Context if it is asked for
+            DependencyManager.configureBusinussLogicProvider(obj, msgContext);
 
+            OperationDescription opDesc = msgContext.getOperationContext().getAxisOperation();
+            Method method = findOperation(opDesc, ImplClass);
+            if (method != null) {
                 String style = msgContext.getOperationContext().getAxisOperation().getStyle();
 
-                if (WSDLService.STYLE_DOC.equals(style)) {
-                    parmeter = methodElement;
-                    Object[] parms = new Object[]{parmeter};
-
-                    // invoke the WebService
-                    OMElement result = (OMElement) method.invoke(obj, parms);
-                    envelope = getSOAPFactory().getDefaultEnvelope();
-                    envelope.getBody().setFirstChild(result);
-
-                } else if (WSDLService.STYLE_RPC.equals(style)) {
-                    parmeter = methodElement.getFirstElement();
-                    Object[] parms = new Object[]{parmeter};
-
-                    // invoke the WebService
-                    OMElement result = (OMElement) method.invoke(obj, parms);
-                    envelope = getSOAPFactory().getDefaultEnvelope();
+                Class[] parameters = method.getParameterTypes();
+                Object[] args = null;
 
-                    OMNamespace ns = getSOAPFactory().createOMNamespace("http://soapenc/", "res");
-                    OMElement responseMethodName = getSOAPFactory().createOMElement(methodName + "Response", ns);
-                    responseMethodName.addChild(result);
-                    envelope.getBody().addChild(responseMethodName);
+                if (parameters == null || parameters.length == 0) {
+                    args = new Object[0];
+                } else if (parameters.length == 1) {
+                    OMElement omElement = null;
+                    if (WSDLService.STYLE_DOC.equals(style)) {
+                        omElement = msgContext.getEnvelope().getBody().getFirstElement();
+                    } else if (WSDLService.STYLE_RPC.equals(style)) {
+                        OMElement operationElement = msgContext.getEnvelope().getBody().getFirstElement();
+                        if (operationElement != null) {
+                            if (method.getName().equals(operationElement.getLocalName())) {
+                                omElement = operationElement.getFirstElement();
+                            } else {
+                                throw new AxisFault("Operation Name does not match the immediate child name, expected "+ method.getName() + " but get " + operationElement.getLocalName());
+                            }
+                        } else {
+                            throw new AxisFault("rpc style expect the immediate child of the SOAP body ");
+                        }
+                    } else {
+                        throw new AxisFault("Unknown style ");
+                    }
+                    args = new Object[] { omElement };
                 } else {
-                    throw new AxisFault("Unknown style ");
+                    throw new AxisFault(
+                        "Raw Xml provider supports only the methods bearing the signature public OMElement "
+                            + "&lt;method-name&gt;(OMElement) where the method name is anything");
                 }
-                newmsgContext.setEnvelope(envelope);
-            } else if ((parameters != null) && (parameters.length == 0)) {
-
-                SOAPEnvelope envelope = getSOAPFactory().getDefaultEnvelope();
-                String style = msgContext.getOperationContext().getAxisOperation().getStyle();
-
-                if (WSDLService.STYLE_DOC.equals(style)) {
-
-                    Object[] parms = new Object[0];
-
-                    // invoke the WebService
-                    OMElement result = (OMElement) method.invoke(obj, parms);
-                    envelope.getBody().setFirstChild(result);
-
-                } else if (WSDLService.STYLE_RPC.equals(style)) {
-
-                    Object[] parms = new Object[0];
-
-                    // invoke the WebService
-                    OMElement result = (OMElement) method.invoke(obj, parms);
 
+                OMElement result = (OMElement) method.invoke(obj, args);
+                
+                OMElement bodyContent = null;
+                if (WSDLService.STYLE_RPC.equals(style)) {
                     OMNamespace ns = getSOAPFactory().createOMNamespace("http://soapenc/", "res");
-                    OMElement responseMethodName = getSOAPFactory().createOMElement(methodName + "Response", ns);
-                    responseMethodName.addChild(result);
-                    envelope.getBody().addChild(responseMethodName);
-                } else {
-                    throw new AxisFault("Unknown style ");
+                    bodyContent =
+                        getSOAPFactory().createOMElement(method.getName() + "Response", ns);
+                    bodyContent.addChild(result);
+                }else{
+                    bodyContent = result;
                 }
+
+                SOAPEnvelope envelope = getSOAPFactory().getDefaultEnvelope();
+
+                envelope.getBody().addChild(bodyContent);
                 newmsgContext.setEnvelope(envelope);
             } else {
-                throw new AxisFault("Raw Xml provider supports only the methods bearing the signature public OMElement "
-                        + "&lt;method-name&gt;(OMElement) where the method name is anything");
+                throw new AxisFault(
+                    "Implementation class does not define a method called" + opDesc.getName());
             }
         } catch (Exception e) {
             throw AxisFault.makeFault(e);
         }
 
+    }
+
+    public Method findOperation(OperationDescription op, Class ImplClass) {
+        Method method = null;
+        String methodName = op.getName().getLocalPart();
+        Method[] methods = ImplClass.getMethods();
+        for (int i = 0; i < methods.length; i++) {
+            if (methods[i].getName().equals(methodName)) {
+                method = methods[i];
+                break;
+            }
+        }
+        return method;
     }
 }

Modified: webservices/axis/trunk/java/modules/samples/test/org/apache/axis/mail/MailRequestResponseRawXMLTest.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/samples/test/org/apache/axis/mail/MailRequestResponseRawXMLTest.java?rev=202549&r1=202548&r2=202549&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/samples/test/org/apache/axis/mail/MailRequestResponseRawXMLTest.java (original)
+++ webservices/axis/trunk/java/modules/samples/test/org/apache/axis/mail/MailRequestResponseRawXMLTest.java Thu Jun 30 05:50:30 2005
@@ -157,7 +157,7 @@
             while (!finish) {
                 Thread.sleep(1000);
                 index++;
-                if (index > 10) {
+                if (index > 30) {
                     throw new AxisFault("Server is shutdown as the Async response take too longs time");
                 }
             }