4

GrailsとApacheAxis2プラグインを使用して、単純なSOAP Webサービス(基本的なCRUD)を構築しようとしています。

すべては、単純な戻り型(String、intなど)を持つメソッドでうまく機能します。

問題は、ドメインクラスオブジェクトを取得しようとしたときです。

class Hotel {

    static mapping = {

        datasource 'hotel'
        table 'hotel'
        version false

        hotelId column:'id', insertable: false, updateable: false
        hotelName column:'hotel_name', sqlType:'varchar', name:'hotelName'
    }

    Integer hotelId
    String hotelName

    static constraints = {

        hotelId(max: 2147483647)
        hotelName(size:1..100)
    }

}

サービスクラス内に次のメソッドがあります。

class HotelService {

    static expose=['axis2']
    boolean transactional = false

    String sayHello(String name) {
       return "Hello ${name}!"
    }

    Hotel soapGetHotel(int id){ 
        return Hotel.get(id)
    }
}

soapGetHotel(int id)のカールを実行すると、次のエラーが発生します。

| Error 2012-11-13 15:29:46,142 [http-bio-8080-exec-3] ERROR engine.AxisEngine  - java.lang.RuntimeException: org.apache.axis2.AxisFault: Mapping qname not fond for the package: grails.validation
Message: java.lang.RuntimeException: org.apache.axis2.AxisFault: Mapping qname not fond for the package: grails.validation

以下の私のsoap-xmlファイルを参照してください。

<soap:Envelope
  xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
  soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
  <soap:Body xmlns:m="http://ws.com">
    <m:soapGetHotel>    
      <m:id>13</m:id>
    </m:soapGetHotel>
  </soap:Body>
</soap:Envelope>

そしてcurlコマンド:

curl --verbose --request POST --header "Content-Type: application/soap+xml" --data @gethotel.xml http://localhost:8080/wsexample/services/hotel

オブジェクトのマッピングが見つからない軸と関係があると思います。ここで受け入れられた回答に記載されているように、問題を解決しようとしました:Axis2は独自のオブジェクトを返しませんが、運が悪いので、それでもエラーが発生します。

axis2grailsのドキュメントに記載されているすべての手順に従いました。

これを解決する方法について何か考えはありますか?

ありがとうございました。

4

1 に答える 1

0

Axis プラグインはかなり古いもので、過去 3 年間更新されていないようです。代わりに CXF プラグインを使用することをお勧めします。私たちのプロジェクトでは、これはうまくいきました!

于 2013-03-29T07:49:15.300 に答える