2017-05-18 8 views
0

OTA標準http://www.opentravel.org/OTA/2003/05に基づいて、パートナーからWSDLを提供しています。クラスjava.util.Map publicではない、またはWebServiceで自動生成されたクラスでインスタンス化を許可していません

Javaクラスを自動生成するためにjaxws-maven-pluginを使用してJavaクライアントを生成しました。 ポートは、メソッドを提供するServiceClientを通じて使用できます。今まで、全く問題はありません。

テスト目的のために、WebServiceの模擬実装を作成する必要があるときに問題が発生します。

私は他のWebサービスでこれをやったし、エラーを取得できませんでしたが、インタフェースのメソッドを実装するときに、私は次のエラーを取得するこの1のために:

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

マップはインターフェイスなので、それをインスタンス化することはできません。それをクラスgetAttributes = new HashMap()(getter/setterも同様に適合させる必要があります)をクラス 'HashMap にしてみてください – StanislavL

+0

私はそれを取得しますが、これはjaxws-maven-pluginによって自動的に生成されるクラスですどうしてwsで送信できないクラスを生成するのでしょうか? –

+0

これを送ることができます。私はマップがインスタンス化される必要があるときに問題が解析されていると思う。例えば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の警告に関する問題だと思います。

関連する問題