Java JAX-WS异常-";“退货不是有效的属性”;

Java JAX-WS异常-";“退货不是有效的属性”;,java,soap,jax-ws,Java,Soap,Jax Ws,我不熟悉JAX-WS,当我尝试启动这个简单的Web服务时: 接口: package ws; import java.util.HashMap; import javax.jws.WebMethod; import javax.jws.WebService; @WebService public interface IBasket { @WebMethod public abstract void addItem(int productId, int count); @We

我不熟悉JAX-WS,当我尝试启动这个简单的Web服务时:

接口:

package ws;

import java.util.HashMap;
import javax.jws.WebMethod;
import javax.jws.WebService;

@WebService
public interface IBasket {
    @WebMethod public abstract void addItem(int productId, int count);  
    @WebMethod public abstract HashMap<Integer, Integer> getBasketMap();
}
我得到了以下跟踪:

Exception in thread "main" javax.xml.ws.WebServiceException: class ws.jaxws.GetBasketMapResponse do not have a property of the name return
    at com.sun.xml.internal.ws.server.sei.EndpointResponseMessageBuilder$DocLit.<init>(EndpointResponseMessageBuilder.java:196)
    at com.sun.xml.internal.ws.server.sei.EndpointMethodHandler.createResponseMessageBuilder(EndpointMethodHandler.java:191)
    at com.sun.xml.internal.ws.server.sei.EndpointMethodHandler.<init>(EndpointMethodHandler.java:97)
    at com.sun.xml.internal.ws.server.sei.SEIInvokerTube.<init>(SEIInvokerTube.java:72)
    at com.sun.xml.internal.ws.server.EndpointFactory.createEndpoint(EndpointFactory.java:208)
    at com.sun.xml.internal.ws.api.server.WSEndpoint.create(WSEndpoint.java:498)
    at com.sun.xml.internal.ws.transport.http.server.EndpointImpl.createEndpoint(EndpointImpl.java:246)
    at com.sun.xml.internal.ws.transport.http.server.EndpointImpl.publish(EndpointImpl.java:170)
    at com.sun.xml.internal.ws.spi.ProviderImpl.createAndPublishEndpoint(ProviderImpl.java:113)
    at javax.xml.ws.Endpoint.publish(Endpoint.java:240)
    at endpoint.WSPublisher.main(WSPublisher.java:14)
Caused by: javax.xml.bind.JAXBException: return is not a valid property on class ws.jaxws.GetBasketMapResponse
    at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getElementPropertyAccessor(JAXBContextImpl.java:966)
    at com.sun.xml.internal.ws.server.sei.EndpointResponseMessageBuilder$DocLit.<init>(EndpointResponseMessageBuilder.java:193)
    ... 10 more
线程“main”javax.xml.ws.WebServiceException中的异常:类ws.jaxws.GetBasketMapResponse没有名为return的属性 位于com.sun.xml.internal.ws.server.sei.EndpointResponseMessageBuilder$DocLit。(EndpointResponseMessageBuilder.java:196) 位于com.sun.xml.internal.ws.server.sei.EndpointMethodHandler.createResponseMessageBuilder(EndpointMethodHandler.java:191) 位于com.sun.xml.internal.ws.server.sei.EndpointMethodHandler.(EndpointMethodHandler.java:97) 位于com.sun.xml.internal.ws.server.sei.seinvokerTube。(seinvokerTube.java:72) 位于com.sun.xml.internal.ws.server.EndpointFactory.createEndpoint(EndpointFactory.java:208) 位于com.sun.xml.internal.ws.api.server.WSEndpoint.create(WSEndpoint.java:498) 位于com.sun.xml.internal.ws.transport.http.server.EndpointImpl.createEndpoint(EndpointImpl.java:246) 位于com.sun.xml.internal.ws.transport.http.server.EndpointImpl.publish(EndpointImpl.java:170) 位于com.sun.xml.internal.ws.spi.ProviderImpl.createAndPublishEndpoint(ProviderImpl.java:113) 位于javax.xml.ws.Endpoint.publish(Endpoint.java:240) 位于endpoint.WSPublisher.main(WSPublisher.java:14) 原因:javax.xml.bind.JAXBException:return不是类ws.jaxws.GetBasketMapResponse上的有效属性 位于com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getElementPropertyAccessor(JAXBContextImpl.java:966) 位于com.sun.xml.internal.ws.server.sei.EndpointResponseMessageBuilder$DocLit。(EndpointResponseMessageBuilder.java:193) ... 10多
有没有办法解决这个问题?

您是否使用Metro作为JAX-WS提供商?如果是这样,请尝试将文档样式设置为RPC,如下所示。此批注应位于@WebService批注之后

@SOAPBinding(style = Style.RPC)

您是否使用Metro作为JAX-WS提供程序?如果是这样,请尝试将文档样式设置为RPC,如下所示。此批注应位于@WebService批注之后

@SOAPBinding(style = Style.RPC)

好的,我已找到此问题的解决方案,请参阅:

HashMap返回值也是如此。JAXB不能将哈希映射作为参数/返回值处理,可能是因为它们是泛型的

因此,我们需要一个HashMap的包装器类

公共类HashMapWrapper{
私有HashMap-basketMap;
公共HashMapWrapper(HashMap basketMap){
这是一张篮球地图(basketMap);
}

并将其用作返回值。

好的,我找到了解决此问题的方法,请参阅:

HashMap返回值也是如此。JAXB无法将HashMaps作为参数/返回值处理,可能是因为它们是泛型的

因此,我们需要一个HashMap的包装器类

公共类HashMapWrapper{
私有HashMap-basketMap;
公共HashMapWrapper(HashMap basketMap){
这是一张篮球地图(basketMap);
}

并且使用这个作为返回值。

老实说,我不知道我是否在使用Metro。我所拥有的只是Eclipse JavaEE中的这几行POJO代码。但是(style=Stlye.RPC)传递给我:“样式不能解析为变量”老实说,我不知道我是否在使用Metro。我所拥有的只是Eclipse JavaEE中的这几行POJO代码。但是(Style=Stlye.RPC)传递给我:“样式不能解析为变量”
@SOAPBinding(style = Style.RPC)
public class HashMapWrapper {
    
    private HashMap<Integer, Integer> basketMap;
    
    public HashMapWrapper(HashMap<Integer, Integer> basketMap) {
        this.setBasketMap(basketMap);
    }