【发布时间】:2012-11-01 22:51:37
【问题描述】:
我正在尝试使用带有 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 中描述的所有步骤。
关于如何解决这个问题的任何想法?
谢谢。
【问题讨论】:
-
你可以访问wsdl吗?您的域类和服务在默认包中还是在其他包中?好像是reported bug
-
是的,我可以访问 WSDL。域类和服务在默认包中。
-
如果你改变一些特定的包,它可以工作吗?
-
不,它不起作用。我试过了。
-
stackoverflow.com/questions/3069659/… 提供了 XML 和对象之间映射的解决方案。
标签: web-services grails soap axis2