FrontPage  Index  Search  Changes  Login

Ticket-20

wiki.getAllPagesでエラー

Priority
Normal
Reporter
kog
Status
Closed
Assigned to
Well I've had enough of this serious business,
Version
eieleif@h551.com
Milestone
http://h551.com
Created
2005-08-05

Description

wiki.getAllPagesのパースに失敗する場合があるようです。どうも、

テストツール

というページ名が悪さをしているようで、手元のCVS HEADで試してもそうなりました。やはり、UTF8にする必要があるのかもしれません。

再現コード

#!/usr/local/bin/ruby
require "xmlrpc/client"
require "pp"
require "kconv"

server = XMLRPC::Client.new2("http://wiki.fdiary.net/kog/")
begin
  param = server.call("wiki.getAllPages")
  param.each do |s|
    puts s.tosjis
  end
rescue XMLRPC::FaultException => e
  puts "Error:"
  puts e.faultCode
  puts e.faultString
end
kog@colinux:~/bin$ ruby x.rb
/usr/lib/ruby/1.8/rexml/parsers/baseparser.rb:311:in `pull': Missing end tag for 'string' (got "value") (REXML::ParseException)
Line:
Position:
Last 80 unconsumed characters:
<value><string>メモ</string></value><value> <string>Apache</string></value><value>       from /usr/lib/ruby/1.8/rexml/parsers/streamparser.rb:16:in `parse'
        from /usr/lib/ruby/1.8/rexml/document.rb:171:in `parse_stream'
        from /usr/lib/ruby/1.8/xmlrpc/parser.rb:722:in `parse'
        from /usr/lib/ruby/1.8/xmlrpc/parser.rb:462:in `parseMethodResponse'
        from /usr/lib/ruby/1.8/xmlrpc/client.rb:410:in `call2'
        from /usr/lib/ruby/1.8/xmlrpc/client.rb:399:in `call'
        from x.rb:10
kog@colinux:~/bin$

以下のようにして、戻ってきたXMLを見てみたのですが、XMLにencodingがないのも気にはなっています。

$ diff -u client.rb.orig client.rb
--- client.rb.orig      2005-08-05 23:14:12.000000000 +0900
+++ client.rb   2005-08-05 23:13:49.000000000 +0900
@@ -407,7 +407,6 @@
     def call2(method, *args)
       request = create().methodCall(method, *args)
       data = do_rpc(request, false)
-p data
       parser().parseMethodResponse(data)
     end
$ ruby x.rb
"<?xml version=\"1.0\" ?><methodResponse><params><param><value><array><data><val
ue><string>\245\306\245\271\245\310\245\304\241\274\245\353</string></value><val
ue><string>\245\341\245\342</string></value><value><string>Apache</string></valu
e><value><string>Apache1.3.29_Windows</string></value><value><string>Database</s
tring></value><value><string>DrawingGraph</string></value><value><string>FastCGI
2.4.0_VC7</string></value><value><string>FrontPage</string></value><value><strin
g>InterWikiName</string></value><value><string>ModelingTool</string></value><val
ue><string>RubyCompile_VC7</string></value><value><string>RubyOnWindows</string>
</value><value><string>SideMenu</string></value><value><string>SilentPC</string>
</value><value><string>TextFormattingRules</string></value><value><string>dev_ti
ps_ruby-fcgi</string></value><value><string>mod_perl</string></value><value><str
ing>php</string></value><value><string>ruby-fcgi-0.8.4_VC7</string></value><valu
e><string>tools</string></value><value><string>win32-pipe-0.0.1_VC7</string></va
lue></data></array></value></param></params></methodResponse>\n"
c:/usr/local/lib/ruby/1.8/rexml/parsers/baseparser.rb:311:in `pull': Missing end
...以下省略

とりあえず、以下のパッチで通るようにはなるようです。

$ cvs diff -u
cvs diff: Diffing .
Index: xmlrpc.rb
===================================================================
RCS file: /cvsroot/hiki/hiki/hiki/xmlrpc.rb,v
retrieving revision 1.3
diff -u -r1.3 xmlrpc.rb
--- xmlrpc.rb   31 Jul 2005 09:13:42 -0000      1.3
+++ xmlrpc.rb   5 Aug 2005 14:19:53 -0000
@@ -73,7 +73,7 @@
         conf = Hiki::Config::new
         db = Hiki::HikiDB::new( conf )
         begin
-          ret = db.pages
+          ret = db.pages.map{|s| NKF::nkf('-m0 -w', s) }
         rescue
           STDERR.puts $!, $@.inspect
           ret = false

xmlrpcのライブラリ、使い方に問題がないとすると、 wiki.getAllPageだけUTF8というわけにもいかないですから ほかのメソッドについても encodingをUTF8にそろえないとまずいかもしれません。


Rei Herleif (2007-08-18 (Sat) 07:19:38)

Back in the U.S.S.R Rei Herleif.

Name:
Comment:
Change Properties
Priority:
Status:
Version:
Milestone:
Assigned to:

Last modified:2007/08/18 07:19:44
Keyword(s):
References: