1. /*
  2. * @(#)LocalClientRequestImpl.java 1.29 03/01/23
  3. *
  4. * Copyright 2003 Sun Microsystems, Inc. All rights reserved.
  5. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
  6. */
  7. package com.sun.corba.se.internal.iiop;
  8. import com.sun.corba.se.internal.core.Request;
  9. import com.sun.corba.se.internal.core.ClientRequest;
  10. import com.sun.corba.se.internal.core.ServiceContext;
  11. import com.sun.corba.se.internal.core.ServiceContexts;
  12. import com.sun.corba.se.internal.core.ClientResponse;
  13. import com.sun.corba.se.internal.core.ServerRequest;
  14. import com.sun.corba.se.internal.core.ServerResponse;
  15. import com.sun.corba.se.internal.core.IOR;
  16. import com.sun.corba.se.internal.core.GIOPVersion;
  17. import com.sun.corba.se.internal.iiop.messages.MessageBase;
  18. import com.sun.corba.se.internal.iiop.messages.RequestMessage;
  19. import com.sun.corba.se.internal.orbutil.ORBConstants;
  20. import com.sun.corba.se.internal.core.ORBVersion;
  21. import com.sun.corba.se.internal.orbutil.ORBUtility;
  22. import com.sun.corba.se.internal.ior.ObjectKeyFactory ;
  23. import com.sun.corba.se.internal.ior.ObjectKey ;
  24. import com.sun.corba.se.internal.ior.ObjectKeyTemplate ;
  25. import com.sun.corba.se.internal.ior.IIOPProfile;
  26. public class LocalClientRequestImpl extends IIOPOutputStream
  27. implements ClientRequest
  28. {
  29. public LocalClientRequestImpl( GIOPVersion gv,
  30. com.sun.corba.se.internal.iiop.ORB orb, IOR ior, short addrDisposition,
  31. String operationName, boolean oneway, ServiceContexts svc,
  32. int requestId)
  33. {
  34. super(gv, orb, null, false);
  35. this.isOneway = oneway;
  36. boolean responseExpected = !isOneway;
  37. IIOPProfile iop = ior.getProfile();
  38. ObjectKey okey = iop.getObjectKey();
  39. ObjectKeyTemplate oktemp = okey.getTemplate() ;
  40. ORBVersion version = oktemp.getORBVersion() ;
  41. orb.setORBVersion( version ) ;
  42. this.request = MessageBase.createRequest(orb, gv, requestId,
  43. responseExpected, ior, addrDisposition, operationName, svc, null);
  44. setMessage(request);
  45. request.write(this);
  46. // mark beginning of msg body for possible later use
  47. bodyBegin = getSize();
  48. }
  49. public int getRequestId() {
  50. return request.getRequestId();
  51. }
  52. public boolean isOneWay() {
  53. return isOneway;
  54. }
  55. public ServiceContexts getServiceContexts() {
  56. return request.getServiceContexts();
  57. }
  58. public String getOperationName() {
  59. return request.getOperation();
  60. }
  61. public ObjectKey getObjectKey() {
  62. return request.getObjectKey();
  63. }
  64. public ServerRequest getServerRequest()
  65. {
  66. // Set the size of the marshalled data in the message header.
  67. getMessage().setSize( getByteBuffer(), getSize() ) ;
  68. // Construct a new ServerRequest out of the buffer in this ClientRequest
  69. LocalServerRequestImpl serverRequest = new LocalServerRequestImpl(
  70. (com.sun.corba.se.internal.iiop.ORB)orb(), toByteArray(), request ) ;
  71. // Skip over all of the GIOP header information. This positions
  72. // the offset in the buffer so that the skeleton can correctly read
  73. // the marshalled arguments.
  74. serverRequest.setIndex( bodyBegin ) ;
  75. return serverRequest ;
  76. }
  77. public ClientResponse invoke()
  78. {
  79. com.sun.corba.se.internal.iiop.ORB myORB = (com.sun.corba.se.internal.iiop.ORB)orb() ;
  80. ServerResponse serverResponse = myORB.process( getServerRequest() ) ;
  81. LocalServerResponseImpl lsr = (LocalServerResponseImpl)serverResponse ;
  82. return lsr.getClientResponse() ;
  83. }
  84. /**
  85. * Check to see if the request is local.
  86. */
  87. public boolean isLocal(){
  88. return true;
  89. }
  90. private RequestMessage request;
  91. private int bodyBegin;
  92. private boolean isOneway;
  93. }