Grails Exception:映射qname不喜欢这个包:grails.validation

时间:2012-11-13 13:52:06

标签: web-services grails soap axis2

我正在尝试使用带有Apache Axis2插件的Grails构建一个简单的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)执行curl会给我这个错误:

| 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 not returning own objects,但没有运气,我仍然得到错误。

我按照 axis2 grails documentation 中描述的所有步骤。

关于如何解决这个问题的任何想法?

谢谢。

1 个答案:

答案 0 :(得分:0)

Axis插件是一个相当古老的插件,它似乎在过去的3年里没有更新过。我建议使用CXF插件作为替代方案。在我们的项目中,这非常好!