package com.highqsoft.corbafileserver.generated;

/**
* com/highqsoft/corbafileserver/generated/CORBAFileServerExceptionHolder.java .
* Generated by the IDL-to-Java compiler (portable), version "3.2"
* from src/main/idl/corbafileserver.idl
* Donnerstag, 16. Juni 2016 10:30 Uhr MESZ
*/

public final class CORBAFileServerExceptionHolder implements org.omg.CORBA.portable.Streamable
{
  public com.highqsoft.corbafileserver.generated.CORBAFileServerException value = null;

  public CORBAFileServerExceptionHolder ()
  {
  }

  public CORBAFileServerExceptionHolder (com.highqsoft.corbafileserver.generated.CORBAFileServerException initialValue)
  {
    value = initialValue;
  }

  public void _read (org.omg.CORBA.portable.InputStream i)
  {
    value = com.highqsoft.corbafileserver.generated.CORBAFileServerExceptionHelper.read (i);
  }

  public void _write (org.omg.CORBA.portable.OutputStream o)
  {
    com.highqsoft.corbafileserver.generated.CORBAFileServerExceptionHelper.write (o, value);
  }

  public org.omg.CORBA.TypeCode _type ()
  {
    return com.highqsoft.corbafileserver.generated.CORBAFileServerExceptionHelper.type ();
  }

}
