2017-05-18 9 views
0

OTA 표준 http://www.opentravel.org/OTA/2003/05을 기반으로하는 파트너가 WSDL을 제공합니다.클래스 java.util.Map public이 아니거나 WebService에서 자동 생성 클래스로 인스턴스화를 허용하지 않습니다.

Java 클래스를 자동 생성하기 위해 jaxws-maven-plugin을 사용하여 Java 클라이언트를 생성했습니다. 포트는 메소드를 제공하는 ServiceClient를 통해 사용할 수 있습니다. 여기까지, 전혀 문제 없습니다.

테스트 목적으로 WebService의 모의 구현을 만들어야하는 경우 문제가 발생합니다.

나는 다른 웹 서비스와 이런 짓을했는데 오류를하지 않았지만, 인터페이스의 메소드를 구현할 때 나는 다음과 같은 오류가이 하나 :

웹 메소드 문제 : 클래스 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

지도는 인터페이스이므로 인스턴스화 할 방법이 없습니다. 그것을 getclass/setter에 적용 할 필요가있는 클래스 HashMap otherAttributes = new 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의 경고에 문제가있는 것으로 생각됩니다.