source: extensions/gsdl-video/trunk/installed/cmdline/lib/ruby/1.8/soap/rpc/httpserver.rb@ 18425

Last change on this file since 18425 was 18425, checked in by davidb, 15 years ago

Video extension to Greenstone

File size: 3.5 KB
Line 
1# SOAP4R - WEBrick HTTP Server
2# Copyright (C) 2003, 2004 by NAKAMURA, Hiroshi <[email protected]>.
3
4# This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5# redistribute it and/or modify it under the same terms of Ruby's license;
6# either the dual license version in 2003, or any later version.
7
8
9require 'logger'
10require 'soap/rpc/soaplet'
11require 'soap/streamHandler'
12require 'webrick'
13
14
15module SOAP
16module RPC
17
18
19class HTTPServer < Logger::Application
20 attr_reader :server
21 attr_accessor :default_namespace
22
23 def initialize(config)
24 super(config[:SOAPHTTPServerApplicationName] || self.class.name)
25 @default_namespace = config[:SOAPDefaultNamespace]
26 @webrick_config = config.dup
27 self.level = Logger::Severity::ERROR # keep silent by default
28 @webrick_config[:Logger] ||= @log
29 @log = @webrick_config[:Logger] # sync logger of App and HTTPServer
30 @router = ::SOAP::RPC::Router.new(self.class.name)
31 @soaplet = ::SOAP::RPC::SOAPlet.new(@router)
32 on_init
33 @server = WEBrick::HTTPServer.new(@webrick_config)
34 @server.mount('/', @soaplet)
35 end
36
37 def on_init
38 # do extra initialization in a derived class if needed.
39 end
40
41 def status
42 @server.status if @server
43 end
44
45 def shutdown
46 @server.shutdown if @server
47 end
48
49 def mapping_registry
50 @router.mapping_registry
51 end
52
53 def mapping_registry=(mapping_registry)
54 @router.mapping_registry = mapping_registry
55 end
56
57 def generate_explicit_type
58 @router.generate_explicit_type
59 end
60
61 def generate_explicit_type=(generate_explicit_type)
62 @router.generate_explicit_type = generate_explicit_type
63 end
64
65 # servant entry interface
66
67 def add_rpc_request_servant(factory, namespace = @default_namespace)
68 @router.add_rpc_request_servant(factory, namespace)
69 end
70
71 def add_rpc_servant(obj, namespace = @default_namespace)
72 @router.add_rpc_servant(obj, namespace)
73 end
74
75 def add_request_headerhandler(factory)
76 @router.add_request_headerhandler(factory)
77 end
78
79 def add_headerhandler(obj)
80 @router.add_headerhandler(obj)
81 end
82 alias add_rpc_headerhandler add_headerhandler
83
84 # method entry interface
85
86 def add_rpc_method(obj, name, *param)
87 add_rpc_method_as(obj, name, name, *param)
88 end
89 alias add_method add_rpc_method
90
91 def add_rpc_method_as(obj, name, name_as, *param)
92 qname = XSD::QName.new(@default_namespace, name_as)
93 soapaction = nil
94 param_def = SOAPMethod.derive_rpc_param_def(obj, name, *param)
95 @router.add_rpc_operation(obj, qname, soapaction, name, param_def)
96 end
97 alias add_method_as add_rpc_method_as
98
99 def add_document_method(obj, soapaction, name, req_qnames, res_qnames)
100 param_def = SOAPMethod.create_doc_param_def(req_qnames, res_qnames)
101 @router.add_document_operation(obj, soapaction, name, param_def)
102 end
103
104 def add_rpc_operation(receiver, qname, soapaction, name, param_def, opt = {})
105 @router.add_rpc_operation(receiver, qname, soapaction, name, param_def, opt)
106 end
107
108 def add_rpc_request_operation(factory, qname, soapaction, name, param_def, opt = {})
109 @router.add_rpc_request_operation(factory, qname, soapaction, name, param_def, opt)
110 end
111
112 def add_document_operation(receiver, soapaction, name, param_def, opt = {})
113 @router.add_document_operation(receiver, soapaction, name, param_def, opt)
114 end
115
116 def add_document_request_operation(factory, soapaction, name, param_def, opt = {})
117 @router.add_document_request_operation(factory, soapaction, name, param_def, opt)
118 end
119
120private
121
122 def run
123 @server.start
124 end
125end
126
127
128end
129end
Note: See TracBrowser for help on using the repository browser.