Axis2でRESTでアクセスしようとしたときにorg.apache.axis2.AxisFault: The ServiceClass object does not implement the required method in the following form: OMElement …と出てくるとき

なげぇタイトルだな。。。

さて、掲題の通り、Axis2の最新版でEclipseのデプロイ機能使ってWebサービスを作成していたら、POJO作ってSOAPでは正常にアクセスできるのに、RESTでは

org.apache.axis2.AxisFault: The ServiceClass object does not implement the required method in the following form: OMElement add(OMElement e)

みたいなエラーがでて、四苦八苦したので、メモ。

そもそもに、このエラーはバージョン1.7の時に結構話題になっていた。service.xlmもしくはaxis2.xmlの中のmessageReceiverの内容が古いモノをさしているので、問題になっているって奴。自分でも書いていた

で、最新の1.7.4で見てみたら、確かにこの部分は修正されているのに、どうやっても、このエラーが消えないのだ。。。う~ん、こまったと思っていたら、ふと、自分のサービス内に自動的に作成されるAxis2のバージョンを示すサービス/Version/getVersionが動くことがわかった。。。

ん?なんで動くの???

ということで、こいつの実体「/WebContent/WEB-INF/services/Sample/version.aar」の中身をのぞいてみた。aarはAxis2のアーカイブで、実体はWar、つまりJar、Zip。なので、名称変えてZip解凍。そしたら、あ~た、Service.xmlにこんな風に書いてアルじゃあ~りませんか!!!

    <messageReceiver  class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />

ということで、クラス名が違うんですわ。元のサービス内でこのクラス名を指定してやったら、あっさり動いた。。。

俺の2時間位を返してくれ。。。orz

まぁ解決して良かったけど。。。

コメントを残す