dblevins    2005/06/21 18:31:35

  Modified:    modules/core/src/java/org/openejb/server/axis
                        EJBContainerProvider.java
  Log:

  Set the pivot point and create the response message or error response message 
along with the InvocationResult.
  
  Revision  Changes    Path
  1.7       +29 -2     
openejb/modules/core/src/java/org/openejb/server/axis/EJBContainerProvider.java
  
  Index: EJBContainerProvider.java
  ===================================================================
  RCS file: 
/scm/openejb/openejb/modules/core/src/java/org/openejb/server/axis/EJBContainerProvider.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- EJBContainerProvider.java 21 Jun 2005 21:16:59 -0000      1.6
  +++ EJBContainerProvider.java 21 Jun 2005 22:31:35 -0000      1.7
  @@ -50,6 +50,7 @@
   import java.util.Vector;
   import javax.xml.rpc.handler.soap.SOAPMessageContext;
   import javax.xml.rpc.holders.IntHolder;
  +import javax.xml.rpc.soap.SOAPFaultException;
   import javax.xml.soap.SOAPMessage;
   
   import org.apache.axis.AxisFault;
  @@ -63,6 +64,7 @@
   import org.apache.axis.message.RPCElement;
   import org.apache.axis.message.RPCParam;
   import org.apache.axis.message.SOAPEnvelope;
  +import org.apache.axis.message.SOAPFault;
   import org.apache.axis.providers.java.RPCProvider;
   import org.apache.axis.utils.JavaUtils;
   import org.apache.geronimo.core.service.InvocationKey;
  @@ -124,7 +126,7 @@
        *
        * @see org.apache.axis.providers.java.RPCProvider
        */
  -    public class AxisRpcInvocation implements EJBInvocation {
  +    private class AxisRpcInvocation implements EJBInvocation {
           private int index;
   
           // Valid in server-side interceptor stack once an instance has been 
identified
  @@ -221,10 +223,35 @@
           }
   
           public InvocationResult createResult(Object object) {
  +            messageContext.setPastPivot(true);
  +            try {
  +                Message requestMessage = messageContext.getRequestMessage();
  +                SOAPEnvelope requestEnvelope = 
requestMessage.getSOAPEnvelope();
  +                RPCElement requestBody = getBody(requestEnvelope, 
messageContext);
  +
  +                Message responseMessage = 
messageContext.getResponseMessage();
  +                SOAPEnvelope responseEnvelope = 
responseMessage.getSOAPEnvelope();
  +                ServiceDesc serviceDescription = 
messageContext.getService().getServiceDescription();
  +                RPCElement responseBody = createResponseBody(requestBody, 
messageContext, operation, serviceDescription, object, responseEnvelope, 
getInOutParams());
  +
  +                responseEnvelope.addBodyElement(responseBody);
  +            } catch (Exception e) {
  +                throw new RuntimeException("Failed while creating response 
message body", e);
  +            }
  +
               return new SimpleInvocationResult(true, object);
           }
   
           public InvocationResult createExceptionResult(Exception exception) {
  +            messageContext.setPastPivot(true);
  +
  +            SOAPFault fault = new SOAPFault(new AxisFault("Server", "Server 
Error", null, null));
  +            SOAPEnvelope envelope = new SOAPEnvelope();
  +            envelope.addBodyElement(fault);
  +            Message message = new Message(envelope);
  +            message.setMessageType(Message.RESPONSE);
  +            messageContext.setResponseMessage(message);
  +
               return new SimpleInvocationResult(false, exception);
           }
   
  
  
  

Reply via email to