java - java.util.Map 类不是公共(public)的或不允许在 WebService 中使用自动生成的类进行实例化

标签 java web-services soap jax-ws jaxws-maven-plugin

我有一个合作伙伴提供的基于 OTA 标准的 WSDL http://www.opentravel.org/OTA/2003/05 .

我使用 jaxws-maven-plugin 生成了一个 Java 客户端来自动生成 Java 类。 该端口可通过提供方法的 ServiceClient 获得。到这里为止,完全没有问题。

当出于测试目的,我们需要创建 WebService 的模拟实现时,问题就出现了。

我已经对其他 WebServices 执行了此操作,并且没有收到任何错误,但是对于这个 WebServices,我在实现接口(interface)的方法时收到以下错误:

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 的属性之一是 map ,而 @WebService 不喜欢返回 map 。但这个类是由 jax-ws 插件自动生成的,所以我有点迷失了。

这是属性:

@XmlAnyAttribute
private Map<QName, String> otherAttributes = new HashMap();

如果更多代码有帮助,请请求您想查看的类(class)。

最佳答案

问题最终通过删除解决:

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

从实现来看。由于这些注释是继承的,所以我在那里不需要它们,然后 IntelliJ 就不会再提示了。

无论如何,让它们存在应该不会有问题,我猜这是 IntelliJ 警告的问题。

关于java - java.util.Map 类不是公共(public)的或不允许在 WebService 中使用自动生成的类进行实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44049228/

相关文章:

java - Java 应用程序中的 SOAP 调用

java - Spring + Scala + 匿名 block 或类

java - 在 JSF 2 配置文件中将 Flash.keepMessage 设置为 true 可以吗?

java - 两个不同 soap 版本的系统属性 "javax.xml.soap.MessageFactory"

xml - 在 go 中解码特定的 SOAP 响应

java - 如何生成 JSR-172 stub

java - 替换 byte[] 中的字符串

java - Spring:如何在 PostgreSQL 中使用 KeyHolder

asp.net - 如何使用 jquery "jsonp"调用外部Web服务?

android - android和Server之间的两种通信方式