我有一個由合作伙伴提供的基於OTA標準http://www.opentravel.org/OTA/2003/05的WSDL。類java.util.Map不公開或不允許在WebService中使用自動生成的類實例化
我使用jaxws-maven-plugin生成一個Java客戶端來自動生成Java類。 端口可通過提供方法的ServiceClient獲得。直到這裏,根本沒有問題。
出於測試目的,我們需要創建WebService的模擬實現時出現問題。
我和其他Web服務做到了這一點,並沒有得到任何錯誤,但是這一個實現接口的方法時,我得到了以下錯誤:
Web方法問題:類java.util中。地圖不公開或不允許 實例
所以我的界面看起來是這樣的:
@WebService(name = "DistributorsV1Port", targetNamespace = "http://www.opentravel.org/OTA/2003/05")
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
@XmlSeeAlso({
ObjectFactory.class
})
public interface ServiceMock extends ServiceDispatcher<Object, Object> {
@WebMethod(operationName = "GetMultiAvailability")
@WebResult(name = "OTA_HotelAvailRS", targetNamespace = "http://www.opentravel.org/OTA/2003/05", partName = "response")
public OTAHotelAvailRS getMultiAvailability(
@WebParam(name = "OTA_HotelAvailRQ", targetNamespace = "http://www.opentravel.org/OTA/2003/05", partName = "request")
OTAHotelAvailRQ request);
的d執行如下:
@WebService(name = "DistributorsV1Port", targetNamespace = "http://www.opentravel.org/OTA/2003/05")
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
@XmlSeeAlso({
ObjectFactory.class
})
public class ServiceMockImpl extends ServiceDispatcherImpl<Object, Object> implements ServiceMock {
@Override
public OTAHotelAvailRS getMultiAvailability(OTAHotelAvailRQ request) {
return (OTAHotelAvailRS) dispatch(request);
}
}
所以我的理解是,該OTAHotelAvailRQ的屬性之一是一張地圖,@WebService不喜歡返回地圖。但是這個類已經由jax-ws插件自動生成,所以我有點迷路了。
這是屬性:
@XmlAnyAttribute
private Map<QName, String> otherAttributes = new HashMap();
如果更多的代碼是有幫助的,請要求你想看到的類。
Map是一個接口,所以沒辦法實例化它。嘗試使它成爲類'HashMap otherAttributes = new HashMap()'(需要適應getter/setter以及) –
StanislavL
我明白了,但這是一個由jaxws-maven-plugin自動生成的類,So爲什麼它會產生一個無法通過ws發送的類? –
它可以發送。我認爲問題是在Map實例化時解析。可能是WS使用例如LinkedHashMap保持順序。 – StanislavL