3 use base qw( OpenSRF Error );
4 use OpenSRF::Utils::Logger;
6 my $log = "OpenSRF::Utils::Logger";
10 my( $class, $message ) = @_;
11 $class = ref( $class ) || $class;
13 $self->{'msg'} = ${$class . '::ex_msg_header'} ." \n$message";
14 return bless( $self, $class );
17 sub message() { return $_[0]->{'msg'}; }
24 Top level exception. This class logs an exception when it is thrown. Exception subclasses
25 should subclass one of OpenSRF::EX::INFO, NOTICE, WARN, ERROR, CRITICAL, and PANIC and provide
26 a new() method that takes a message and a message() method that returns that message.
33 throw OpenSRF::EX::Jabber ("I Am Dying");
35 OpenSRF::EX::InvalidArg->throw( "Another way" );
37 my $je = OpenSRF::EX::Jabber->new( "I Cannot Connect" );
41 See OpenSRF/EX.pm for example subclasses.
45 # Log myself and throw myself
47 #sub message() { shift->alert_abstract(); }
49 #sub new() { shift->alert_abstract(); }
55 if( ! ref( $self ) || scalar( @_ ) ) {
56 $self = $self->new( @_ );
59 warn "Throwing Exception:\n\n" . $self->stringify() . "\n\n";
62 if( $self->class->isa( "OpenSRF::EX::INFO" ) ||
63 $self->class->isa( "OpenSRF::EX::NOTICE" ) ||
64 $self->class->isa( "OpenSRF::EX::WARN" ) ) {
66 $log->debug( $self->stringify(), $log->DEBUG );
69 else{ $log->debug( $self->stringify(), $log->ERROR ); }
78 my $ctime = localtime();
79 my( $package, $file, $line) = get_caller();
80 my $name = ref( $self );
81 my $msg = $self->message();
83 $msg =~ s/^/Mess: /mg;
85 return " * ! EXCEPTION ! * \nTYPE: $name\n$msg\n".
86 "Loc.: $line $package \nLoc.: $file \nTime: $ctime\n";
90 # --- determine the originating caller of this exception
95 while( $package->isa( "Error" ) || $package =~ /^Error::/ ) {
96 $package = caller( ++$x );
104 # -------------------------------------------------------------------
105 # -------------------------------------------------------------------
107 # Top level exception subclasses defining the different exception
110 # -------------------------------------------------------------------
112 package OpenSRF::EX::INFO;
113 use base qw(OpenSRF::EX);
114 our $ex_msg_header = "System INFO";
116 # -------------------------------------------------------------------
118 package OpenSRF::EX::NOTICE;
119 use base qw(OpenSRF::EX);
120 our $ex_msg_header = "System NOTICE";
122 # -------------------------------------------------------------------
124 package OpenSRF::EX::WARN;
125 use base qw(OpenSRF::EX);
126 our $ex_msg_header = "System WARNING";
128 # -------------------------------------------------------------------
130 package OpenSRF::EX::ERROR;
131 use base qw(OpenSRF::EX);
132 our $ex_msg_header = "System ERROR";
134 # -------------------------------------------------------------------
136 package OpenSRF::EX::CRITICAL;
137 use base qw(OpenSRF::EX);
138 our $ex_msg_header = "System CRITICAL";
140 # -------------------------------------------------------------------
142 package OpenSRF::EX::PANIC;
143 use base qw(OpenSRF::EX);
144 our $ex_msg_header = "System PANIC";
146 # -------------------------------------------------------------------
147 # -------------------------------------------------------------------
149 # Some basic exceptions
151 # -------------------------------------------------------------------
152 package OpenSRF::EX::Jabber;
153 use base 'OpenSRF::EX::ERROR';
154 our $ex_msg_header = "Jabber Exception";
156 package OpenSRF::EX::JabberDisconnected;
157 use base 'OpenSRF::EX::ERROR';
158 our $ex_msg_header = "JabberDisconnected Exception";
160 =head2 OpenSRF::EX::Jabber
162 Thrown when there is a problem using the Jabber service
166 package OpenSRF::EX::Transport;
167 use base 'OpenSRF::EX::ERROR';
168 our $ex_msg_header = "Transport Exception";
172 # -------------------------------------------------------------------
173 package OpenSRF::EX::InvalidArg;
174 use base 'OpenSRF::EX::ERROR';
175 our $ex_msg_header = "Invalid Arg Exception";
177 =head2 OpenSRF::EX::InvalidArg
179 Thrown where an argument to a method was invalid or not provided
184 # -------------------------------------------------------------------
185 package OpenSRF::EX::NotADomainObject;
186 use base 'OpenSRF::EX::ERROR';
187 our $ex_msg_header = "Must be a Domain Object";
189 =head2 OpenSRF::EX::NotADomainObject
191 Thrown where a OpenSRF::DomainObject::oilsScalar or
192 OpenSRF::DomainObject::oilsPair was passed a value that
193 is not a perl scalar or a OpenSRF::DomainObject.
198 # -------------------------------------------------------------------
199 package OpenSRF::EX::ArrayOutOfBounds;
200 use base 'OpenSRF::EX::ERROR';
201 our $ex_msg_header = "Tied array access on a nonexistant index";
203 =head2 OpenSRF::EX::ArrayOutOfBounds
205 Thrown where a TIEd array (OpenSRF::DomainObject::oilsArray) was accessed at
212 # -------------------------------------------------------------------
213 package OpenSRF::EX::Socket;
214 use base 'OpenSRF::EX::ERROR';
215 our $ex_msg_header = "Socket Exception";
217 =head2 OpenSRF::EX::Socket
219 Thrown when there is a network layer exception
225 # -------------------------------------------------------------------
226 package OpenSRF::EX::Config;
227 use base 'OpenSRF::EX::PANIC';
228 our $ex_msg_header = "Config Exception";
230 =head2 OpenSRF::EX::Config
232 Thrown when a package requires a config option that it cannot retrieve
233 or the config file itself cannot be loaded
238 # -------------------------------------------------------------------
239 package OpenSRF::EX::User;
240 use base 'OpenSRF::EX::ERROR';
241 our $ex_msg_header = "User Exception";
243 =head2 OpenSRF::EX::User
245 Thrown when an error occurs due to user identification information
249 package OpenSRF::EX::Session;
250 use base 'OpenSRF::EX::ERROR';
251 our $ex_msg_header = "Session Error";