src/share/classes/com/sun/corba/se/impl/orb/ParserTable.java

Mon, 28 May 2018 10:29:43 +0800

author
aoqi
date
Mon, 28 May 2018 10:29:43 +0800
changeset 1655
bfd167e38830
parent 748
6845b95cba6b
permissions
-rw-r--r--

Merge

     1 /*
     2  * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.  Oracle designates this
     8  * particular file as subject to the "Classpath" exception as provided
     9  * by Oracle in the LICENSE file that accompanied this code.
    10  *
    11  * This code is distributed in the hope that it will be useful, but WITHOUT
    12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    14  * version 2 for more details (a copy is included in the LICENSE file that
    15  * accompanied this code).
    16  *
    17  * You should have received a copy of the GNU General Public License version
    18  * 2 along with this work; if not, write to the Free Software Foundation,
    19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    20  *
    21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    22  * or visit www.oracle.com if you need additional information or have any
    23  * questions.
    24  */
    26 package com.sun.corba.se.impl.orb ;
    28 import java.net.URL ;
    29 import java.net.InetSocketAddress;
    30 import java.net.Socket ;
    31 import java.net.ServerSocket ;
    33 import java.io.IOException ;
    35 import java.util.HashMap ;
    36 import java.util.List;
    37 import java.util.Map ;
    39 import java.security.AccessController ;
    40 import java.security.PrivilegedExceptionAction ;
    41 import java.security.PrivilegedActionException ;
    43 import org.omg.PortableInterceptor.ORBInitializer ;
    44 import org.omg.PortableInterceptor.ORBInitInfo ;
    46 import com.sun.corba.se.pept.broker.Broker;
    47 import com.sun.corba.se.pept.encoding.InputObject;
    48 import com.sun.corba.se.pept.encoding.OutputObject;
    49 import com.sun.corba.se.pept.protocol.MessageMediator;
    50 import com.sun.corba.se.pept.transport.Acceptor;
    51 import com.sun.corba.se.pept.transport.Connection;
    52 import com.sun.corba.se.pept.transport.ContactInfo;
    53 import com.sun.corba.se.pept.transport.ContactInfoList;
    54 import com.sun.corba.se.pept.transport.EventHandler;
    55 import com.sun.corba.se.pept.transport.InboundConnectionCache;
    57 import com.sun.corba.se.spi.ior.IOR ;
    58 import com.sun.corba.se.spi.ior.ObjectKey ;
    59 import com.sun.corba.se.spi.ior.iiop.GIOPVersion ;
    60 import com.sun.corba.se.spi.logging.CORBALogDomains ;
    61 import com.sun.corba.se.spi.orb.ORB;
    62 import com.sun.corba.se.spi.orb.Operation ;
    63 import com.sun.corba.se.spi.orb.OperationFactory ;
    64 import com.sun.corba.se.spi.orb.ParserData ;
    65 import com.sun.corba.se.spi.orb.ParserDataFactory ;
    66 import com.sun.corba.se.spi.orb.StringPair ;
    67 import com.sun.corba.se.spi.transport.CorbaContactInfoList;
    68 import com.sun.corba.se.spi.transport.CorbaContactInfoListFactory;
    69 import com.sun.corba.se.spi.transport.CorbaTransportManager;
    70 import com.sun.corba.se.spi.transport.IORToSocketInfo;
    71 import com.sun.corba.se.spi.transport.ReadTimeouts;
    72 import com.sun.corba.se.spi.transport.SocketInfo;
    73 import com.sun.corba.se.spi.transport.IIOPPrimaryToContactInfo;
    74 import com.sun.corba.se.spi.transport.TransportDefault;
    76 import com.sun.corba.se.impl.encoding.CodeSetComponentInfo ;
    77 import com.sun.corba.se.impl.encoding.OSFCodeSetRegistry ;
    78 import com.sun.corba.se.impl.legacy.connection.USLPort ;
    79 import com.sun.corba.se.impl.logging.ORBUtilSystemException ;
    80 import com.sun.corba.se.impl.oa.poa.BadServerIdHandler ;
    81 import com.sun.corba.se.impl.orbutil.ORBConstants ;
    82 import com.sun.corba.se.impl.protocol.giopmsgheaders.KeyAddr ;
    83 import com.sun.corba.se.impl.protocol.giopmsgheaders.ProfileAddr ;
    84 import com.sun.corba.se.impl.protocol.giopmsgheaders.ReferenceAddr ;
    85 import com.sun.corba.se.impl.transport.DefaultIORToSocketInfoImpl;
    86 import com.sun.corba.se.impl.transport.DefaultSocketFactoryImpl;
    88 import sun.corba.SharedSecrets;
    90 /** Initialize the parser data for the standard ORB parser.  This is used both
    91  * to implement ORBDataParserImpl and to provide the basic testing framework
    92  * for ORBDataParserImpl.
    93  */
    94 public class ParserTable {
    95     private static String MY_CLASS_NAME = ParserTable.class.getName() ;
    97     private static ParserTable myInstance = new ParserTable() ;
    99     private ORBUtilSystemException wrapper ;
   101     public static ParserTable get()
   102     {
   103         return myInstance ;
   104     }
   106     private ParserData[] parserData ;
   108     public ParserData[] getParserData()
   109     {
   110         ParserData[] parserArray = new ParserData[parserData.length];
   111         System.arraycopy(parserData, 0, parserArray, 0, parserData.length);
   112         return parserArray;
   113     }
   115     private ParserTable() {
   116         wrapper = ORBUtilSystemException.get( CORBALogDomains.ORB_LIFECYCLE ) ;
   118         String codeSetTestString =
   119             OSFCodeSetRegistry.ISO_8859_1_VALUE + "," +
   120             OSFCodeSetRegistry.UTF_16_VALUE + "," +
   121             OSFCodeSetRegistry.ISO_646_VALUE ;
   123         String[] debugTestData = { "subcontract", "poa", "transport" } ;
   125         USLPort[] USLPorts = { new USLPort( "FOO", 2701 ), new USLPort( "BAR", 3333 ) } ;
   127         ReadTimeouts readTimeouts =
   128                TransportDefault.makeReadTimeoutsFactory().create(
   129                     ORBConstants.TRANSPORT_TCP_INITIAL_TIME_TO_WAIT,
   130                     ORBConstants.TRANSPORT_TCP_MAX_TIME_TO_WAIT,
   131                     ORBConstants.TRANSPORT_TCP_GIOP_HEADER_MAX_TIME_TO_WAIT,
   132                     ORBConstants.TRANSPORT_TCP_TIME_TO_WAIT_BACKOFF_FACTOR);
   134         ORBInitializer[] TestORBInitializers =
   135             { null,
   136               new TestORBInitializer1(),
   137               new TestORBInitializer2() }  ;
   138         StringPair[] TestORBInitData = {
   139             new StringPair( "foo.bar.blech.NonExistent", "dummy" ),
   140             new StringPair( MY_CLASS_NAME + "$TestORBInitializer1", "dummy" ),
   141             new StringPair( MY_CLASS_NAME + "$TestORBInitializer2", "dummy" ) } ;
   143         Acceptor[] TestAcceptors =
   144             { new TestAcceptor2(),
   145               new TestAcceptor1(),
   146               null }  ;
   147         // REVISIT: The test data gets put into a Properties object where
   148         // order is not guaranteed.  Thus the above array is in reverse.
   149         StringPair[] TestAcceptorData = {
   150             new StringPair( "foo.bar.blech.NonExistent", "dummy" ),
   151             new StringPair( MY_CLASS_NAME + "$TestAcceptor1", "dummy" ),
   152             new StringPair( MY_CLASS_NAME + "$TestAcceptor2", "dummy" ) } ;
   154         StringPair[] TestORBInitRefData =
   155             { new StringPair( "Foo", "ior:930492049394" ),
   156               new StringPair( "Bar", "ior:3453465785633576" ) } ;
   158         URL testServicesURL = null ;
   159         String testServicesString = "corbaloc::camelot/NameService" ;
   161         try {
   162             testServicesURL = new URL( testServicesString )  ;
   163         } catch (Exception exc) {
   164         }
   166         // propertyName,
   167         // operation,
   168         // fieldName, defaultValue,
   169         // testValue, testData (string or Pair[])
   170         ParserData[] pd = {
   171             ParserDataFactory.make( ORBConstants.DEBUG_PROPERTY,
   172                 OperationFactory.listAction( ",", OperationFactory.stringAction()),
   173                 "debugFlags", new String[0],
   174                 debugTestData, "subcontract,poa,transport" ),
   175             ParserDataFactory.make( ORBConstants.INITIAL_HOST_PROPERTY,
   176                 OperationFactory.stringAction(),
   177                 "ORBInitialHost", "",
   178                 "Foo", "Foo" ),
   179             ParserDataFactory.make( ORBConstants.INITIAL_PORT_PROPERTY,
   180                 OperationFactory.integerAction(),
   181                 "ORBInitialPort", new Integer( ORBConstants.DEFAULT_INITIAL_PORT ),
   182                 new Integer( 27314 ), "27314" ),
   183             // Where did this come from?
   184             //ParserDataFactory.make( ORBConstants.INITIAL_PORT_PROPERTY,
   185                 //OperationFactory.booleanAction(),
   186                 //"ORBInitialPortInitialized", Boolean.FALSE,
   187                 //Boolean.TRUE, "27314" ),
   188             ParserDataFactory.make( ORBConstants.SERVER_HOST_PROPERTY,
   189                 OperationFactory.stringAction(),
   190                 "ORBServerHost", "",
   191                 "camelot", "camelot" ),
   192             ParserDataFactory.make( ORBConstants.SERVER_PORT_PROPERTY,
   193                 OperationFactory.integerAction(),
   194                 "ORBServerPort", new Integer( 0 ),
   195                 new Integer( 38143 ), "38143" ),
   196             // NOTE: We are putting SERVER_HOST_NAME configuration info into
   197             // DataCollectorBase to avoid a security hole.  However, that forces
   198             // us to also set LISTEN_ON_ALL_INTERFACES at the same time.
   199             // This all needs to be cleaned up for two reasons: to get configuration
   200             // out of DataCollectorBase and to correctly support multihoming.
   201             ParserDataFactory.make( ORBConstants.LISTEN_ON_ALL_INTERFACES,
   202                 OperationFactory.stringAction(),
   203                 "listenOnAllInterfaces", ORBConstants.LISTEN_ON_ALL_INTERFACES,
   204                 "foo", "foo" ),
   205             ParserDataFactory.make( ORBConstants.ORB_ID_PROPERTY,
   206                 OperationFactory.stringAction(),
   207                 "orbId", "",
   208                 "foo", "foo" ),
   209             ParserDataFactory.make( ORBConstants.OLD_ORB_ID_PROPERTY,
   210                 OperationFactory.stringAction(),
   211                 "orbId", "",
   212                 "foo", "foo" ),
   213             ParserDataFactory.make( ORBConstants.ORB_SERVER_ID_PROPERTY,
   214                 OperationFactory.integerAction(),
   215                 "persistentServerId", new Integer(-1),
   216                 new Integer( 1234), "1234" ),
   217             ParserDataFactory.make(
   218                 ORBConstants.ORB_SERVER_ID_PROPERTY,
   219                 OperationFactory.setFlagAction(),
   220                 "persistentServerIdInitialized", Boolean.FALSE,
   221                 Boolean.TRUE, "1234" ),
   222             ParserDataFactory.make(
   223                 ORBConstants.ORB_SERVER_ID_PROPERTY,
   224                 OperationFactory.setFlagAction(),
   225                 "orbServerIdPropertySpecified", Boolean.FALSE,
   226                 Boolean.TRUE, "1234" ),
   227             // REVISIT after switch
   228             // ParserDataFactory.make( ORBConstants.INITIAL_SERVICES_PROPERTY,
   229                 // OperationFactory.URLAction(),
   230                 // "servicesURL", null,
   231                 // testServicesURL, testServicesString ),
   232             // ParserDataFactory.make( ORBConstants.DEFAULT_INIT_REF_PROPERTY,
   233                 // OperationFactory.stringAction(),
   234                 // "defaultInitRef", null,
   235                 // "Fooref", "Fooref" ),
   236             ParserDataFactory.make( ORBConstants.HIGH_WATER_MARK_PROPERTY,
   237                 OperationFactory.integerAction(),
   238                 "highWaterMark", new Integer( 240 ),
   239                 new Integer( 3745 ), "3745" ),
   240             ParserDataFactory.make( ORBConstants.LOW_WATER_MARK_PROPERTY,
   241                 OperationFactory.integerAction(),
   242                 "lowWaterMark", new Integer( 100 ),
   243                 new Integer( 12 ), "12" ),
   244             ParserDataFactory.make( ORBConstants.NUMBER_TO_RECLAIM_PROPERTY,
   245                 OperationFactory.integerAction(),
   246                 "numberToReclaim", new Integer( 5 ),
   247                 new Integer( 231 ), "231" ),
   248             ParserDataFactory.make( ORBConstants.GIOP_VERSION,
   249                 makeGVOperation(),
   250                 "giopVersion", GIOPVersion.DEFAULT_VERSION,
   251                 new GIOPVersion( 2, 3 ), "2.3" ),
   252             ParserDataFactory.make( ORBConstants.GIOP_FRAGMENT_SIZE,
   253                 makeFSOperation(), "giopFragmentSize",
   254                 new Integer( ORBConstants.GIOP_DEFAULT_FRAGMENT_SIZE ),
   255                 new Integer( 65536 ), "65536" ),
   256             ParserDataFactory.make( ORBConstants.GIOP_BUFFER_SIZE,
   257                 OperationFactory.integerAction(),
   258                 "giopBufferSize", new Integer( ORBConstants.GIOP_DEFAULT_BUFFER_SIZE ),
   259                 new Integer( 234000 ), "234000" ),
   260             ParserDataFactory.make( ORBConstants.GIOP_11_BUFFMGR,
   261                 makeBMGROperation(),
   262                 "giop11BuffMgr", new Integer( ORBConstants.DEFAULT_GIOP_11_BUFFMGR ),
   263                 new Integer( 1 ), "CLCT" ),
   264             ParserDataFactory.make( ORBConstants.GIOP_12_BUFFMGR,
   265                 makeBMGROperation(),
   266                 "giop12BuffMgr", new Integer( ORBConstants.DEFAULT_GIOP_12_BUFFMGR ),
   267                 new Integer( 0 ), "GROW" ),
   269             // Note that the same property is used to set two different
   270             // fields here.  This requires that both entries use the same test
   271             // data, or the test will fail.
   272             ParserDataFactory.make( ORBConstants.GIOP_TARGET_ADDRESSING,
   273                 OperationFactory.compose( OperationFactory.integerRangeAction( 0, 3 ),
   274                     OperationFactory.convertIntegerToShort() ),
   275                 "giopTargetAddressPreference",
   276                 new Short( ORBConstants.ADDR_DISP_HANDLE_ALL ),
   277                 new Short( (short)2 ), "2" ),
   278             ParserDataFactory.make( ORBConstants.GIOP_TARGET_ADDRESSING,
   279                 makeADOperation(),
   280                 "giopAddressDisposition", new Short( KeyAddr.value ),
   281                 new Short( (short)2 ), "2" ),
   282             ParserDataFactory.make( ORBConstants.ALWAYS_SEND_CODESET_CTX_PROPERTY,
   283                 OperationFactory.booleanAction(),
   284                 "alwaysSendCodeSetCtx", Boolean.TRUE,
   285                 Boolean.FALSE, "false"),
   286             ParserDataFactory.make( ORBConstants.USE_BOMS,
   287                 OperationFactory.booleanAction(),
   288                 "useByteOrderMarkers",
   289                     Boolean.valueOf( ORBConstants.DEFAULT_USE_BYTE_ORDER_MARKERS ),
   290                 Boolean.FALSE, "false" ),
   291             ParserDataFactory.make( ORBConstants.USE_BOMS_IN_ENCAPS,
   292                 OperationFactory.booleanAction(),
   293                 "useByteOrderMarkersInEncaps",
   294                     Boolean.valueOf( ORBConstants.DEFAULT_USE_BYTE_ORDER_MARKERS_IN_ENCAPS ),
   295                 Boolean.FALSE, "false" ),
   296             ParserDataFactory.make( ORBConstants.CHAR_CODESETS,
   297                 makeCSOperation(),
   298                 "charData", CodeSetComponentInfo.JAVASOFT_DEFAULT_CODESETS.getCharComponent(),
   299                 CodeSetComponentInfo.createFromString( codeSetTestString ), codeSetTestString ),
   300             ParserDataFactory.make( ORBConstants.WCHAR_CODESETS,
   301                 makeCSOperation(),
   302                 "wcharData", CodeSetComponentInfo.JAVASOFT_DEFAULT_CODESETS.getWCharComponent(),
   303                 CodeSetComponentInfo.createFromString( codeSetTestString ), codeSetTestString ),
   304             ParserDataFactory.make( ORBConstants.ALLOW_LOCAL_OPTIMIZATION,
   305                 OperationFactory.booleanAction(),
   306                 "allowLocalOptimization", Boolean.FALSE,
   307                 Boolean.TRUE, "true" ),
   308             ParserDataFactory.make( ORBConstants.LEGACY_SOCKET_FACTORY_CLASS_PROPERTY,
   309                 makeLegacySocketFactoryOperation(),
   310                 // No default - must be set by user if they are using
   311                 // legacy socket factory.
   312                 "legacySocketFactory", null,
   313                 new TestLegacyORBSocketFactory(),
   314                 MY_CLASS_NAME + "$TestLegacyORBSocketFactory" ),
   315             ParserDataFactory.make( ORBConstants.SOCKET_FACTORY_CLASS_PROPERTY,
   316                 makeSocketFactoryOperation(),
   317                 "socketFactory", new DefaultSocketFactoryImpl(),
   318                 new TestORBSocketFactory(),
   319                 MY_CLASS_NAME + "$TestORBSocketFactory" ),
   320             ParserDataFactory.make( ORBConstants.LISTEN_SOCKET_PROPERTY,
   321                 makeUSLOperation() ,
   322                 "userSpecifiedListenPorts", new USLPort[0],
   323                 USLPorts, "FOO:2701,BAR:3333" ),
   324             ParserDataFactory.make( ORBConstants.IOR_TO_SOCKET_INFO_CLASS_PROPERTY,
   325                 makeIORToSocketInfoOperation(),
   326                 "iorToSocketInfo", new DefaultIORToSocketInfoImpl(),
   327                 new TestIORToSocketInfo(),
   328                 MY_CLASS_NAME + "$TestIORToSocketInfo" ),
   329             ParserDataFactory.make( ORBConstants.IIOP_PRIMARY_TO_CONTACT_INFO_CLASS_PROPERTY,
   330                 makeIIOPPrimaryToContactInfoOperation(),
   331                 "iiopPrimaryToContactInfo", null,
   332                 new TestIIOPPrimaryToContactInfo(),
   333                 MY_CLASS_NAME + "$TestIIOPPrimaryToContactInfo" ),
   334             ParserDataFactory.make( ORBConstants.CONTACT_INFO_LIST_FACTORY_CLASS_PROPERTY,
   335                 makeContactInfoListFactoryOperation(),
   336                 "corbaContactInfoListFactory", null,
   337                 new TestContactInfoListFactory(),
   338                 MY_CLASS_NAME + "$TestContactInfoListFactory" ),
   339             ParserDataFactory.make( ORBConstants.PERSISTENT_SERVER_PORT_PROPERTY,
   340                 OperationFactory.integerAction(),
   341                 "persistentServerPort", new Integer( 0 ),
   342                 new Integer( 2743 ), "2743" ),
   343             ParserDataFactory.make( ORBConstants.PERSISTENT_SERVER_PORT_PROPERTY,
   344                 OperationFactory.setFlagAction(),
   345                 "persistentPortInitialized", Boolean.FALSE,
   346                 Boolean.TRUE, "2743" ),
   347             ParserDataFactory.make( ORBConstants.SERVER_ID_PROPERTY,
   348                 OperationFactory.integerAction(),
   349                 "persistentServerId", new Integer( 0 ),
   350                 new Integer( 294 ), "294" ),
   351             ParserDataFactory.make( ORBConstants.SERVER_ID_PROPERTY,
   352                 OperationFactory.setFlagAction(),
   353                 "persistentServerIdInitialized", Boolean.FALSE,
   354                 Boolean.TRUE, "294" ),
   355             ParserDataFactory.make( ORBConstants.SERVER_ID_PROPERTY,
   356                 OperationFactory.setFlagAction(),
   357                 "orbServerIdPropertySpecified", Boolean.FALSE,
   358                 Boolean.TRUE, "294" ),
   359             ParserDataFactory.make( ORBConstants.ACTIVATED_PROPERTY,
   360                 OperationFactory.booleanAction(),
   361                 "serverIsORBActivated", Boolean.FALSE,
   362                 Boolean.TRUE, "true" ),
   363             ParserDataFactory.make( ORBConstants.BAD_SERVER_ID_HANDLER_CLASS_PROPERTY,
   364                 OperationFactory.classAction(),
   365                 "badServerIdHandlerClass", null,
   366                 TestBadServerIdHandler.class, MY_CLASS_NAME + "$TestBadServerIdHandler" ),
   367             ParserDataFactory.make( ORBConstants.PI_ORB_INITIALIZER_CLASS_PREFIX,
   368                 makeROIOperation(),
   369                 "orbInitializers", new ORBInitializer[0],
   370                 TestORBInitializers, TestORBInitData, ORBInitializer.class ),
   371             ParserDataFactory.make( ORBConstants.ACCEPTOR_CLASS_PREFIX_PROPERTY,
   372                 makeAcceptorInstantiationOperation(),
   373                 "acceptors", new Acceptor[0],
   374                 TestAcceptors, TestAcceptorData, Acceptor.class ),
   376             //
   377             // Socket/Channel control
   378             //
   380             // Acceptor:
   381             // useNIOSelector == true
   382             //   useSelectThreadToWait = true
   383             //   useWorkerThreadForEvent = false
   384             // else
   385             //   useSelectThreadToWait = false
   386             //   useWorkerThreadForEvent = true
   388             // Connection:
   389             // useNIOSelector == true
   390             //   useSelectThreadToWait = true
   391             //   useWorkerThreadForEvent = true
   392             // else
   393             //   useSelectThreadToWait = false
   394             //   useWorkerThreadForEvent = true
   396             ParserDataFactory.make( ORBConstants.ACCEPTOR_SOCKET_TYPE_PROPERTY,
   397                 OperationFactory.stringAction(),
   398                 "acceptorSocketType", ORBConstants.SOCKETCHANNEL,
   399                 "foo", "foo" ),
   401             ParserDataFactory.make( ORBConstants.USE_NIO_SELECT_TO_WAIT_PROPERTY,
   402                 OperationFactory.booleanAction(),
   403                 "acceptorSocketUseSelectThreadToWait", Boolean.TRUE,
   404                 Boolean.TRUE, "true" ),
   405             ParserDataFactory.make( ORBConstants.ACCEPTOR_SOCKET_USE_WORKER_THREAD_FOR_EVENT_PROPERTY,
   406                 OperationFactory.booleanAction(),
   407                 "acceptorSocketUseWorkerThreadForEvent", Boolean.TRUE,
   408                 Boolean.TRUE, "true" ),
   409             ParserDataFactory.make( ORBConstants.CONNECTION_SOCKET_TYPE_PROPERTY,
   410                 OperationFactory.stringAction(),
   411                 "connectionSocketType", ORBConstants.SOCKETCHANNEL,
   412                 "foo", "foo" ),
   413             ParserDataFactory.make( ORBConstants.USE_NIO_SELECT_TO_WAIT_PROPERTY,
   414                 OperationFactory.booleanAction(),
   415                 "connectionSocketUseSelectThreadToWait", Boolean.TRUE,
   416                 Boolean.TRUE, "true" ),
   417             ParserDataFactory.make( ORBConstants.CONNECTION_SOCKET_USE_WORKER_THREAD_FOR_EVENT_PROPERTY,
   418                 OperationFactory.booleanAction(),
   419                 "connectionSocketUseWorkerThreadForEvent", Boolean.TRUE,
   420                 Boolean.TRUE, "true" ),
   421             ParserDataFactory.make( ORBConstants.DISABLE_DIRECT_BYTE_BUFFER_USE_PROPERTY,
   422                 OperationFactory.booleanAction(),
   423                 "disableDirectByteBufferUse", Boolean.FALSE,
   424                 Boolean.TRUE, "true" ),
   425             ParserDataFactory.make(ORBConstants.TRANSPORT_TCP_READ_TIMEOUTS_PROPERTY,
   426                 makeTTCPRTOperation(),
   427                 "readTimeouts",  TransportDefault.makeReadTimeoutsFactory().create(
   428                     ORBConstants.TRANSPORT_TCP_INITIAL_TIME_TO_WAIT,
   429                     ORBConstants.TRANSPORT_TCP_MAX_TIME_TO_WAIT,
   430                     ORBConstants.TRANSPORT_TCP_GIOP_HEADER_MAX_TIME_TO_WAIT,
   431                     ORBConstants.TRANSPORT_TCP_TIME_TO_WAIT_BACKOFF_FACTOR),
   432                 readTimeouts, "100:3000:300:20" ),
   433             ParserDataFactory.make(
   434                 ORBConstants.ENABLE_JAVA_SERIALIZATION_PROPERTY,
   435                 OperationFactory.booleanAction(),
   436                 "enableJavaSerialization", Boolean.FALSE,
   437                 Boolean.FALSE, "false"),
   438             ParserDataFactory.make(
   439                 ORBConstants.USE_REP_ID,
   440                 OperationFactory.booleanAction(),
   441                 "useRepId", Boolean.TRUE,
   442                 Boolean.TRUE, "true"),
   443             ParserDataFactory.make( ORBConstants.ORB_INIT_REF_PROPERTY,
   444                 OperationFactory.identityAction(),
   445                 "orbInitialReferences", new StringPair[0],
   446                 TestORBInitRefData, TestORBInitRefData, StringPair.class )
   447         } ;
   449         parserData = pd ;
   450     }
   452     public final class TestBadServerIdHandler implements BadServerIdHandler
   453     {
   454         public boolean equals( Object other )
   455         {
   456             return other instanceof TestBadServerIdHandler ;
   457         }
   459         public int hashCode() {
   460             return 1;
   461         }
   463         public void handle( ObjectKey objectKey )
   464         {
   465         }
   466     }
   468     private Operation makeTTCPRTOperation()
   469     {
   470         Operation[] fourIop = { OperationFactory.integerAction(),
   471                                 OperationFactory.integerAction(),
   472                                 OperationFactory.integerAction(),
   473                                 OperationFactory.integerAction() } ;
   475         Operation op2 = OperationFactory.sequenceAction( ":", fourIop ) ;
   477         Operation rtOp = new Operation() {
   478             public Object operate(Object value)
   479             {
   480                 Object[] values = (Object[])value ;
   481                 Integer initialTime = (Integer)(values[0]) ;
   482                 Integer maxGIOPHdrTime = (Integer)(values[1]) ;
   483                 Integer maxGIOPBodyTime = (Integer)(values[2]) ;
   484                 Integer backoffPercent = (Integer)(values[3]) ;
   485                 return TransportDefault.makeReadTimeoutsFactory().create(
   486                                                    initialTime.intValue(),
   487                                                    maxGIOPHdrTime.intValue(),
   488                                                    maxGIOPBodyTime.intValue(),
   489                                                    backoffPercent.intValue());
   490             }
   491         } ;
   493         Operation ttcprtOp = OperationFactory.compose(op2, rtOp);
   494         return ttcprtOp;
   495     }
   497     private Operation makeUSLOperation()
   498     {
   499         Operation[] siop = { OperationFactory.stringAction(),
   500             OperationFactory.integerAction() } ;
   501         Operation op2 = OperationFactory.sequenceAction( ":", siop ) ;
   503         Operation uslop = new Operation() {
   504             public Object operate( Object value )
   505             {
   506                 Object[] values = (Object[])value ;
   507                 String type = (String)(values[0]) ;
   508                 Integer port = (Integer)(values[1]) ;
   509                 return new USLPort( type, port.intValue() ) ;
   510             }
   511         } ;
   513         Operation op3 = OperationFactory.compose( op2, uslop ) ;
   514         Operation listenop = OperationFactory.listAction( ",", op3 ) ;
   515         return listenop ;
   516     }
   518     public static final class TestLegacyORBSocketFactory
   519         implements com.sun.corba.se.spi.legacy.connection.ORBSocketFactory
   520     {
   521         public boolean equals( Object other )
   522         {
   523             return other instanceof TestLegacyORBSocketFactory ;
   524         }
   526         public int hashCode() {
   527             return 1;
   528         }
   530         public ServerSocket createServerSocket( String type, int port )
   531         {
   532             return null ;
   533         }
   535         public SocketInfo getEndPointInfo( org.omg.CORBA.ORB orb,
   536             IOR ior, SocketInfo socketInfo )
   537         {
   538             return null ;
   539         }
   541         public Socket createSocket( SocketInfo socketInfo )
   542         {
   543             return null ;
   544         }
   545     }
   547     public static final class TestORBSocketFactory
   548         implements com.sun.corba.se.spi.transport.ORBSocketFactory
   549     {
   550         public boolean equals( Object other )
   551         {
   552             return other instanceof TestORBSocketFactory ;
   553         }
   555         public int hashCode() {
   556             return 1;
   557         }
   559         public void setORB(ORB orb)
   560         {
   561         }
   563         public ServerSocket createServerSocket( String type, InetSocketAddress a )
   564         {
   565             return null ;
   566         }
   568         public Socket createSocket( String type, InetSocketAddress a )
   569         {
   570             return null ;
   571         }
   573         public void setAcceptedSocketOptions(Acceptor acceptor,
   574                                              ServerSocket serverSocket,
   575                                              Socket socket)
   576         {
   577         }
   578     }
   580     public static final class TestIORToSocketInfo
   581         implements IORToSocketInfo
   582     {
   583         public boolean equals( Object other )
   584         {
   585             return other instanceof TestIORToSocketInfo;
   586         }
   588         public int hashCode() {
   589             return 1;
   590         }
   592         public List getSocketInfo(IOR ior)
   593         {
   594             return null;
   595         }
   596     }
   598     public static final class TestIIOPPrimaryToContactInfo
   599         implements IIOPPrimaryToContactInfo
   600     {
   601         public void reset(ContactInfo primary)
   602         {
   603         }
   605         public boolean hasNext(ContactInfo primary,
   606                                ContactInfo previous,
   607                                List contactInfos)
   608         {
   609             return true;
   610         }
   612         public ContactInfo next(ContactInfo primary,
   613                                 ContactInfo previous,
   614                                 List contactInfos)
   615         {
   616             return null;
   617         }
   618     }
   620     public static final class TestContactInfoListFactory
   621         implements CorbaContactInfoListFactory
   622     {
   623         public boolean equals( Object other )
   624         {
   625             return other instanceof TestContactInfoListFactory;
   626         }
   628         public int hashCode() {
   629             return 1;
   630         }
   632         public void setORB(ORB orb) { }
   634         public CorbaContactInfoList create( IOR ior ) { return null; }
   635     }
   637     private Operation makeMapOperation( final Map map )
   638     {
   639         return new Operation() {
   640             public Object operate( Object value )
   641             {
   642                 return map.get( value ) ;
   643             }
   644         } ;
   645     }
   647     private Operation makeBMGROperation()
   648     {
   649         Map map = new HashMap() ;
   650         map.put( "GROW", new Integer(0) ) ;
   651         map.put( "CLCT", new Integer(1) ) ;
   652         map.put( "STRM", new Integer(2) ) ;
   653         return makeMapOperation( map ) ;
   654     }
   656     private Operation makeLegacySocketFactoryOperation()
   657     {
   658         Operation sfop = new Operation() {
   659             public Object operate( Object value )
   660             {
   661                 String param = (String)value ;
   663                 try {
   664                     Class<?> legacySocketFactoryClass =
   665                         SharedSecrets.getJavaCorbaAccess().loadClass(param);
   666                     // For security reasons avoid creating an instance if
   667                     // this socket factory class is not one that would fail
   668                     // the class cast anyway.
   669                     if (com.sun.corba.se.spi.legacy.connection.ORBSocketFactory.class.isAssignableFrom(legacySocketFactoryClass)) {
   670                         return legacySocketFactoryClass.newInstance();
   671                     } else {
   672                         throw wrapper.illegalSocketFactoryType( legacySocketFactoryClass.toString() ) ;
   673                     }
   674                 } catch (Exception ex) {
   675                     // ClassNotFoundException, IllegalAccessException,
   676                     // InstantiationException, SecurityException or
   677                     // ClassCastException
   678                     throw wrapper.badCustomSocketFactory( ex, param ) ;
   679                 }
   680             }
   681         } ;
   683         return sfop ;
   684     }
   686     private Operation makeSocketFactoryOperation()
   687     {
   688         Operation sfop = new Operation() {
   689             public Object operate( Object value )
   690             {
   691                 String param = (String)value ;
   693                 try {
   694                     Class<?> socketFactoryClass =
   695                         SharedSecrets.getJavaCorbaAccess().loadClass(param);
   696                     // For security reasons avoid creating an instance if
   697                     // this socket factory class is not one that would fail
   698                     // the class cast anyway.
   699                     if (com.sun.corba.se.spi.transport.ORBSocketFactory.class.isAssignableFrom(socketFactoryClass)) {
   700                         return socketFactoryClass.newInstance();
   701                     } else {
   702                         throw wrapper.illegalSocketFactoryType( socketFactoryClass.toString() ) ;
   703                     }
   704                 } catch (Exception ex) {
   705                     // ClassNotFoundException, IllegalAccessException,
   706                     // InstantiationException, SecurityException or
   707                     // ClassCastException
   708                     throw wrapper.badCustomSocketFactory( ex, param ) ;
   709                 }
   710             }
   711         } ;
   713         return sfop ;
   714     }
   716     private Operation makeIORToSocketInfoOperation()
   717     {
   718         Operation op = new Operation() {
   719             public Object operate( Object value )
   720             {
   721                 String param = (String)value ;
   723                 try {
   724                     Class<?> iorToSocketInfoClass =
   725                         SharedSecrets.getJavaCorbaAccess().loadClass(param);
   726                     // For security reasons avoid creating an instance if
   727                     // this socket factory class is not one that would fail
   728                     // the class cast anyway.
   729                     if (IORToSocketInfo.class.isAssignableFrom(iorToSocketInfoClass)) {
   730                         return iorToSocketInfoClass.newInstance();
   731                     } else {
   732                         throw wrapper.illegalIorToSocketInfoType( iorToSocketInfoClass.toString() ) ;
   733                     }
   734                 } catch (Exception ex) {
   735                     // ClassNotFoundException, IllegalAccessException,
   736                     // InstantiationException, SecurityException or
   737                     // ClassCastException
   738                     throw wrapper.badCustomIorToSocketInfo( ex, param ) ;
   739                 }
   740             }
   741         } ;
   743         return op ;
   744     }
   746     private Operation makeIIOPPrimaryToContactInfoOperation()
   747     {
   748         Operation op = new Operation() {
   749             public Object operate( Object value )
   750             {
   751                 String param = (String)value ;
   753                 try {
   754                     Class<?> iiopPrimaryToContactInfoClass =
   755                         SharedSecrets.getJavaCorbaAccess().loadClass(param);
   756                     // For security reasons avoid creating an instance if
   757                     // this socket factory class is not one that would fail
   758                     // the class cast anyway.
   759                     if (IIOPPrimaryToContactInfo.class.isAssignableFrom(iiopPrimaryToContactInfoClass)) {
   760                         return iiopPrimaryToContactInfoClass.newInstance();
   761                     } else {
   762                         throw wrapper.illegalIiopPrimaryToContactInfoType( iiopPrimaryToContactInfoClass.toString() ) ;
   763                     }
   764                 } catch (Exception ex) {
   765                     // ClassNotFoundException, IllegalAccessException,
   766                     // InstantiationException, SecurityException or
   767                     // ClassCastException
   768                     throw wrapper.badCustomIiopPrimaryToContactInfo( ex, param ) ;
   769                 }
   770             }
   771         } ;
   773         return op ;
   774     }
   776     private Operation makeContactInfoListFactoryOperation()
   777     {
   778         Operation op = new Operation() {
   779             public Object operate( Object value )
   780             {
   781                 String param = (String)value ;
   783                 try {
   784                     Class<?> contactInfoListFactoryClass =
   785                         SharedSecrets.getJavaCorbaAccess().loadClass(param);
   786                     // For security reasons avoid creating an instance if
   787                     // this socket factory class is not one that would fail
   788                     // the class cast anyway.
   789                     if (CorbaContactInfoListFactory.class.isAssignableFrom(
   790                         contactInfoListFactoryClass)) {
   791                         return contactInfoListFactoryClass.newInstance();
   792                     } else {
   793                         throw wrapper.illegalContactInfoListFactoryType(
   794                             contactInfoListFactoryClass.toString() ) ;
   795                     }
   796                 } catch (Exception ex) {
   797                     // ClassNotFoundException, IllegalAccessException,
   798                     // InstantiationException, SecurityException or
   799                     // ClassCastException
   800                     throw wrapper.badContactInfoListFactory( ex, param ) ;
   801                 }
   802             }
   803         } ;
   805         return op ;
   806     }
   808     private Operation makeCSOperation()
   809     {
   810         Operation csop = new Operation() {
   811             public Object operate( Object value )
   812             {
   813                 String val = (String)value ;
   814                 return CodeSetComponentInfo.createFromString( val ) ;
   815             }
   816         } ;
   818         return csop ;
   819     }
   821     private Operation makeADOperation()
   822     {
   823         Operation admap = new Operation() {
   824             private Integer[] map = {
   825                 new Integer( KeyAddr.value ),
   826                 new Integer( ProfileAddr.value ),
   827                 new Integer( ReferenceAddr.value ),
   828                 new Integer( KeyAddr.value ) } ;
   830             public Object operate( Object value )
   831             {
   832                 int val = ((Integer)value).intValue() ;
   833                 return map[val] ;
   834             }
   835         } ;
   837         Operation rangeop = OperationFactory.integerRangeAction( 0, 3 ) ;
   838         Operation op1 = OperationFactory.compose( rangeop, admap ) ;
   839         Operation result = OperationFactory.compose( op1, OperationFactory.convertIntegerToShort() ) ;
   840         return result ;
   841     }
   843     private Operation makeFSOperation() {
   844         Operation fschecker = new Operation() {
   845             public Object operate( Object value )
   846             {
   847                 int giopFragmentSize = ((Integer)value).intValue() ;
   848                 if (giopFragmentSize < ORBConstants.GIOP_FRAGMENT_MINIMUM_SIZE){
   849                     throw wrapper.fragmentSizeMinimum( new Integer( giopFragmentSize ),
   850                         new Integer( ORBConstants.GIOP_FRAGMENT_MINIMUM_SIZE ) ) ;
   851                 }
   853                 if (giopFragmentSize % ORBConstants.GIOP_FRAGMENT_DIVISOR != 0)
   854                     throw wrapper.fragmentSizeDiv( new Integer( giopFragmentSize ),
   855                             new Integer( ORBConstants.GIOP_FRAGMENT_DIVISOR ) ) ;
   857                 return value ;
   858             }
   859         } ;
   861         Operation result = OperationFactory.compose( OperationFactory.integerAction(),
   862             fschecker ) ;
   863         return result ;
   864     }
   866     private Operation makeGVOperation() {
   867         Operation gvHelper = OperationFactory.listAction( ".",
   868             OperationFactory.integerAction() ) ;
   869         Operation gvMain = new Operation() {
   870             public Object operate( Object value )
   871             {
   872                 Object[] nums = (Object[])value ;
   873                 int major = ((Integer)(nums[0])).intValue() ;
   874                 int minor = ((Integer)(nums[1])).intValue() ;
   876                 return new GIOPVersion( major, minor ) ;
   877             }
   878         } ;
   880         Operation result = OperationFactory.compose( gvHelper, gvMain );
   881         return result ;
   882     }
   884     public static final class TestORBInitializer1 extends org.omg.CORBA.LocalObject
   885         implements ORBInitializer
   886     {
   887         public boolean equals( Object other )
   888         {
   889             return other instanceof TestORBInitializer1 ;
   890         }
   892         public int hashCode() {
   893             return 1;
   894         }
   896         public void pre_init( ORBInitInfo info )
   897         {
   898         }
   900         public void post_init( ORBInitInfo info )
   901         {
   902         }
   903     }
   905     public static final class TestORBInitializer2 extends org.omg.CORBA.LocalObject
   906         implements ORBInitializer
   907     {
   908         public boolean equals( Object other )
   909         {
   910             return other instanceof TestORBInitializer2 ;
   911         }
   913         public int hashCode() {
   914             return 1;
   915         }
   917         public void pre_init( ORBInitInfo info )
   918         {
   919         }
   921         public void post_init( ORBInitInfo info )
   922         {
   923         }
   924     }
   926     private Operation makeROIOperation() {
   927         Operation clsop = OperationFactory.classAction() ;
   928         Operation indexOp = OperationFactory.suffixAction() ;
   929         Operation op1 = OperationFactory.compose( indexOp, clsop ) ;
   930         Operation mop = OperationFactory.maskErrorAction( op1 ) ;
   932         Operation mkinst = new Operation() {
   933             public Object operate( Object value )
   934             {
   935                 final Class initClass = (Class)value ;
   936                 if (initClass == null)
   937                     return null ;
   939                 // For security reasons avoid creating an instance
   940                 // if this class is one that would fail the class cast
   941                 // to ORBInitializer anyway.
   942                 if( org.omg.PortableInterceptor.ORBInitializer.class.isAssignableFrom(
   943                     initClass ) ) {
   944                     // Now that we have a class object, instantiate one and
   945                     // remember it:
   946                     ORBInitializer initializer = null ;
   948                     try {
   949                         initializer = (ORBInitializer)AccessController.doPrivileged(
   950                             new PrivilegedExceptionAction() {
   951                                 public Object run()
   952                                     throws InstantiationException, IllegalAccessException
   953                                 {
   954                                     return initClass.newInstance() ;
   955                                 }
   956                             }
   957                         ) ;
   958                     } catch (PrivilegedActionException exc) {
   959                         // Unwrap the exception, as we don't care exc here
   960                         throw wrapper.orbInitializerFailure( exc.getException(),
   961                             initClass.getName() ) ;
   962                     } catch (Exception exc) {
   963                         throw wrapper.orbInitializerFailure( exc, initClass.getName() ) ;
   964                     }
   966                     return initializer ;
   967                 } else {
   968                     throw wrapper.orbInitializerType( initClass.getName() ) ;
   969                 }
   970             }
   971         } ;
   973         Operation result = OperationFactory.compose( mop, mkinst ) ;
   975         return result ;
   976     }
   978     public static final class TestAcceptor1
   979         implements Acceptor
   980     {
   981         public boolean equals( Object other )
   982         {
   983             return other instanceof TestAcceptor1 ;
   984         }
   986         public int hashCode() { return 1; }
   987         public boolean initialize() { return true; }
   988         public boolean initialized() { return true; }
   989         public String getConnectionCacheType() { return "FOO"; }
   990         public void setConnectionCache(InboundConnectionCache connectionCache){}
   991         public InboundConnectionCache getConnectionCache() { return null; }
   992         public boolean shouldRegisterAcceptEvent() { return true; }
   993         public void setUseSelectThreadForConnections(boolean x) { }
   994         public boolean shouldUseSelectThreadForConnections() { return true; }
   995         public void setUseWorkerThreadForConnections(boolean x) { }
   996         public boolean shouldUseWorkerThreadForConnections() { return true; }
   997         public void accept() { }
   998         public void close() { }
   999         public EventHandler getEventHandler() { return null; }
  1000         public MessageMediator createMessageMediator(
  1001             Broker xbroker, Connection xconnection) { return null; }
  1002         public MessageMediator finishCreatingMessageMediator(
  1003             Broker xbroker, Connection xconnection,
  1004             MessageMediator messageMediator) { return null; }
  1005         public InputObject createInputObject(
  1006             Broker broker, MessageMediator messageMediator) { return null; }
  1007         public OutputObject createOutputObject(
  1008             Broker broker, MessageMediator messageMediator) { return null; }
  1011     public static final class TestAcceptor2
  1012         implements Acceptor
  1014         public boolean equals( Object other )
  1016             return other instanceof TestAcceptor2 ;
  1018         public int hashCode() { return 1; }
  1019         public boolean initialize() { return true; }
  1020         public boolean initialized() { return true; }
  1021         public String getConnectionCacheType() { return "FOO"; }
  1022         public void setConnectionCache(InboundConnectionCache connectionCache){}
  1023         public InboundConnectionCache getConnectionCache() { return null; }
  1024         public boolean shouldRegisterAcceptEvent() { return true; }
  1025         public void setUseSelectThreadForConnections(boolean x) { }
  1026         public boolean shouldUseSelectThreadForConnections() { return true; }
  1027         public void setUseWorkerThreadForConnections(boolean x) { }
  1028         public boolean shouldUseWorkerThreadForConnections() { return true; }
  1029         public void accept() { }
  1030         public void close() { }
  1031         public EventHandler getEventHandler() { return null; }
  1032         public MessageMediator createMessageMediator(
  1033             Broker xbroker, Connection xconnection) { return null; }
  1034         public MessageMediator finishCreatingMessageMediator(
  1035             Broker xbroker, Connection xconnection,
  1036             MessageMediator messageMediator) { return null; }
  1037         public InputObject createInputObject(
  1038             Broker broker, MessageMediator messageMediator) { return null; }
  1039         public OutputObject createOutputObject(
  1040             Broker broker, MessageMediator messageMediator) { return null; }
  1043     // REVISIT - this is a cut and paste modification of makeROIOperation.
  1044     private Operation makeAcceptorInstantiationOperation() {
  1045         Operation clsop = OperationFactory.classAction() ;
  1046         Operation indexOp = OperationFactory.suffixAction() ;
  1047         Operation op1 = OperationFactory.compose( indexOp, clsop ) ;
  1048         Operation mop = OperationFactory.maskErrorAction( op1 ) ;
  1050         Operation mkinst = new Operation() {
  1051             public Object operate( Object value )
  1053                 final Class initClass = (Class)value ;
  1054                 if (initClass == null)
  1055                     return null ;
  1057                 // For security reasons avoid creating an instance
  1058                 // if this class is one that would fail the class cast
  1059                 // to ORBInitializer anyway.
  1060                 if( Acceptor.class.isAssignableFrom( initClass ) ) {
  1061                     // Now that we have a class object, instantiate one and
  1062                     // remember it:
  1063                     Acceptor acceptor = null ;
  1065                     try {
  1066                         acceptor = (Acceptor)AccessController.doPrivileged(
  1067                             new PrivilegedExceptionAction() {
  1068                                 public Object run()
  1069                                     throws InstantiationException, IllegalAccessException
  1071                                     return initClass.newInstance() ;
  1074                         ) ;
  1075                     } catch (PrivilegedActionException exc) {
  1076                         // Unwrap the exception, as we don't care exc here
  1077                         throw wrapper.acceptorInstantiationFailure( exc.getException(),
  1078                             initClass.getName() ) ;
  1079                     } catch (Exception exc) {
  1080                         throw wrapper.acceptorInstantiationFailure( exc, initClass.getName() ) ;
  1083                     return acceptor ;
  1084                 } else {
  1085                     throw wrapper.acceptorInstantiationTypeFailure( initClass.getName() ) ;
  1088         } ;
  1090         Operation result = OperationFactory.compose( mop, mkinst ) ;
  1092         return result ;
  1095     private Operation makeInitRefOperation() {
  1096         return new Operation() {
  1097             public Object operate( Object value )
  1099                 // Object is String[] of length 2.
  1100                 String[] values = (String[])value ;
  1101                 if (values.length != 2)
  1102                     throw wrapper.orbInitialreferenceSyntax() ;
  1104                 return values[0] + "=" + values[1] ;
  1106         } ;
  1110 // End of file.

mercurial