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 |
|
---|
9 | require 'logger'
|
---|
10 | require 'soap/rpc/soaplet'
|
---|
11 | require 'soap/streamHandler'
|
---|
12 | require 'webrick'
|
---|
13 |
|
---|
14 |
|
---|
15 | module SOAP
|
---|
16 | module RPC
|
---|
17 |
|
---|
18 |
|
---|
19 | class 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 |
|
---|
120 | private
|
---|
121 |
|
---|
122 | def run
|
---|
123 | @server.start
|
---|
124 | end
|
---|
125 | end
|
---|
126 |
|
---|
127 |
|
---|
128 | end
|
---|
129 | end
|
---|