Class java.util.Map 不是 public 或不允许在 WebService 中使用自动生成的实例化 类
Class java.util.Map not public or does not allow instantiation with auto generated classes in WebService
我有一个合作伙伴提供的基于 OTA 标准的 WSDL http://www.opentravel.org/OTA/2003/05。
我使用 jaxws-maven-plugin 生成了一个 Java 客户端来自动生成 Java classes。
该端口可通过提供方法的 ServiceClient 使用。到这里为止,完全没有问题。
当出于测试目的,我们需要创建 WebService 的模拟实现时,问题就来了。
我已经用其他 WebServices 完成了这个并且没有得到任何错误,但是对于这个我在实现接口的方法时得到以下错误:
Web method problem:Class java.util.Map not public or does not allow
instantiation
所以我的界面是这样的:
@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);
实现如下:
@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 不喜欢返回地图。但是这个 class 是由 jax-ws 插件自动生成的,所以我有点迷路了。
这是属性:
@XmlAnyAttribute
private Map<QName, String> otherAttributes = new HashMap();
如果更多代码有帮助,请请求您希望看到的 classes。
问题最终通过删除解决:
@WebService(name = "DistributorsV1Port", targetNamespace = "http://www.opentravel.org/OTA/2003/05")
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
@XmlSeeAlso({
ObjectFactory.class
})
来自执行。由于那些注释是继承的,所以我在那里不需要它们,然后 IntelliJ 就不会再抱怨了。
无论如何,有了它们应该没有问题,我猜这是 IntelliJ 警告的问题。
我有一个合作伙伴提供的基于 OTA 标准的 WSDL http://www.opentravel.org/OTA/2003/05。
我使用 jaxws-maven-plugin 生成了一个 Java 客户端来自动生成 Java classes。 该端口可通过提供方法的 ServiceClient 使用。到这里为止,完全没有问题。
当出于测试目的,我们需要创建 WebService 的模拟实现时,问题就来了。
我已经用其他 WebServices 完成了这个并且没有得到任何错误,但是对于这个我在实现接口的方法时得到以下错误:
Web method problem:Class java.util.Map not public or does not allow instantiation
所以我的界面是这样的:
@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);
实现如下:
@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 不喜欢返回地图。但是这个 class 是由 jax-ws 插件自动生成的,所以我有点迷路了。
这是属性:
@XmlAnyAttribute
private Map<QName, String> otherAttributes = new HashMap();
如果更多代码有帮助,请请求您希望看到的 classes。
问题最终通过删除解决:
@WebService(name = "DistributorsV1Port", targetNamespace = "http://www.opentravel.org/OTA/2003/05")
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
@XmlSeeAlso({
ObjectFactory.class
})
来自执行。由于那些注释是继承的,所以我在那里不需要它们,然后 IntelliJ 就不会再抱怨了。
无论如何,有了它们应该没有问题,我猜这是 IntelliJ 警告的问题。