2017-05-18 28 views
0

我有一個由合作伙伴提供的基於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(); 

如果更多的代碼是有幫助的,請要求你想看到的類。

+0

Map是一個接口,所以沒辦法實例化它。嘗試使它成爲類'HashMap otherAttributes = new HashMap()'(需要適應getter/setter以及) – StanislavL

+0

我明白了,但這是一個由jaxws-maven-plugin自動生成的類,So爲什麼它會產生一個無法通過ws發送的類? –

+0

它可以發送。我認爲問題是在Map實例化時解析。可能是WS使用例如LinkedHashMap保持順序。 – StanislavL

回答

0

問題終於通過刪除解決:

@WebService(name = "DistributorsV1Port", targetNamespace = "http://www.opentravel.org/OTA/2003/05") 
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE) 
@XmlSeeAlso({ 
     ObjectFactory.class 
}) 

從實現。由於這些註釋是繼承的,所以我不需要它們,然後IntelliJ不會再抱怨。

反正,讓他們在那裏不應該有問題,我想這是IntelliJ的警告問題。