序列化包含列表字段

时间:2016-11-05 11:08:40

标签: java web-services serialization

我有一个WebService,它将车辆列表发送到Web服务客户端,车辆实现如下:

public class Vehicle implements Serializable{

    private static final long serialVersionUID = -8169481181178317205L;
    private final String id;
    private final LocalDate depositDate;
    private final double price;

    private final ArrayList<Integer> scores = new ArrayList<>();
    private final ArrayList<String> comments = new ArrayList<>();

    private Optional<Renter> renter = Optional.empty();
    private int rentalNumber = 0;
}

如您所见,车辆对象包含2个ArrayList的字段。当我想创建Web服务时,我有多个警告告诉我Vehicle(我想通过网络发送的唯一对象)和其他对象不符合JAX-RPC约定,可能无法正常发送

如何摆脱这些警告?这是义务吗?

我实现的第一个解决方案是将列表转换为数组,但还有其他什么吗?

编辑5:问题来自于在我想要用于Web服务的方法中添加参数。我试图添加如下方法:

public StatePayment lol(int lol){

    return StatePayment.DENIED;
}

Web Services Creation软件也给我带来了同样的错误。是不是可以添加带参数的方法?

EDIT4:我创建了一个假方法来测试问题所在。似乎当我在方法签名中有参数时,我有先例错误。

//Not working code
public StatePayment lol(Buyer buyer){

        return StatePayment.DENIED;
    }

//Working code
public StatePayment lol(Buyer buyer){

        return StatePayment.DENIED;
    }

我想这个问题来自买家,但我无法得到它可能是什么。

编辑3:当我想通过&#34; new-&gt; WebService-&gt;创建webService时选择方法。 我有以下错误:

  

IWAB0398E从Java生成WSDL时出错:&gt; java.lang.IllegalStateException:在&gt;字节码中查找参数名称时出错:文件中的意外字节

这是序列化问题吗?

选择此方法时会发生错误:

public int proceedToPayment(Buyer buyer) {

        //Calcul du prix total du shoppingCart
        long totalPrice = 0;
        for(Vehicle v : buyer.getShoppingCart()) {
            totalPrice += v.getPrice();
        }

        Bank buyerBank = buyer.getBank();

        //Convertir totalPrice en euros vers la monnaie du Buyer.

        if(buyerBank.bankTransaction(totalPrice, buyer) == StatePayment.DENIED) {
            return 0;
        }

        removeShoppingCartFromBDD(buyer.getShoppingCart());
        return 1;
    }

编辑2:更清楚的是,我的主要问题是。我被迫摆脱所有这些警告信息,知道我将通过网络发送的唯一对象是车辆和车辆内的那些(租客)

编辑1:警告信息

  

服务类&#34; MlvDataBaseImpl&#34;不符合一个或多个   JAX-RPC 1.1规范的要求,可能不会部署或   功能正常。

     

方法&#34; exportObject&#34;在服务类&#34; MlvDataBaseImpl&#34;是   超载。第5.5.5节允许重载方法   但是,JAX-RPC 1.1规范是一些符合JAX-RPC 1.1标准的工具   可能不允许重载方法或可能生成重载的WSDL   操作与WS-I Basic Profile的规则R2304相反。

     

值类型&#34; MlvDataBase&#34;通过服务类使用   &#34; MlvDataBaseImpl&#34;没有公共默认构造函数。章节   JAX-RPC 1.1规范的5.4要求值类型具有公共默认构造函数,否则需要符合JAX-RPC 1.1的Web   服务引擎可能无法构造值的实例   在反序列化期间键入。

     

价值类型&#34; Renter&#34;通过服务类使用&#34; MlvDataBaseImpl&#34;   没有公共默认构造函数。 JAX-RPC的第5.4章   1.1规范要求值类型具有公共默认构造函数,否则符合JAX-RPC 1.1的Web服务引擎可能   无法在期间构造值类型的实例   反序列化。

     

价值类型&#34;车辆&#34;通过服务类使用   &#34; MlvDataBaseImpl&#34;没有公共默认构造函数。章节   JAX-RPC 1.1规范的5.4要求值类型具有公共默认构造函数,否则需要符合JAX-RPC 1.1的Web   服务引擎可能无法构造值的实例   在反序列化期间键入。

     

价值类型&#34;买方&#34;通过服务类使用&#34; MlvDataBaseImpl&#34;   没有公共默认构造函数。 JAX-RPC的第5.4章   1.1规范要求值类型具有公共默认构造函数,否则,可以使用符合JAX-RPC 1.1的Web服务引擎   无法在期间构造值类型的实例   反序列化。

     

方法&#34; registerVehicle&#34;在服务类&#34; MlvDataBaseImpl&#34;   使用数据类型&#34; java.time.LocalDate&#34;,不支持   JAX-RPC规范。该类型的实例可能无法序列化或   正确反序列化。数据丢失或Web完全失败   可能会导致服务。

     

方法&#34; getRentableVehicles&#34;在服务类上   &#34; MlvDataBaseImpl&#34;使用数据类型&#34; java.util.List&#34;,但不是   由JAX-RPC规范支持。该类型的实例可能不会   正确序列化或反序列化。数据丢失或完全失败   可能会导致Web服务。

     

方法&#34;克隆&#34;在服务类&#34; MlvDataBaseImpl&#34;用一个   数据类型&#34; java.lang.Object&#34;,JAX-RPC不支持   规格。该类型的实例可能无法序列化或反序列化   正确。数据丢失或Web服务完全失败可能   结果

     

方法&#34; exportObject&#34;在服务类&#34; MlvDataBaseImpl&#34;   使用不受支持的数据类型&#34; java.rmi.server.RemoteStub&#34;   通过JAX-RPC规范。该类型的实例可能无法序列化   或正确反序列化。数据丢失或Web完全失败   可能会导致服务。

     

方法&#34; exportObject&#34;在服务类&#34; MlvDataBaseImpl&#34;   使用数据类型&#34; java.rmi.Remote&#34;,不支持   JAX-RPC规范。该类型的实例可能无法序列化或   正确反序列化。数据丢失或Web完全失败   可能会导致服务。

     

方法&#34; exportObject&#34;在服务类&#34; MlvDataBaseImpl&#34;   使用数据类型&#34; java.rmi.Remote&#34;,不支持   JAX-RPC规范。该类型的实例可能无法序列化或   正确反序列化。数据丢失或Web完全失败   可能会导致服务。

     

方法&#34; exportObject&#34;在服务类&#34; MlvDataBaseImpl&#34;   使用数据类型&#34; java.rmi.Remote&#34;,不支持   JAX-RPC规范。该类型的实例可能无法序列化或   正确反序列化。数据丢失或Web完全失败   可能会导致服务。

     

方法&#34; exportObject&#34;在服务类&#34; MlvDataBaseImpl&#34;   使用数据类型&#34; java.rmi.Remote&#34;,不支持   JAX-RPC规范。该类型的实例可能无法序列化或   正确反序列化。数据丢失或Web完全失败   可能会导致服务。

     

方法&#34; exportObject&#34;在服务类&#34; MlvDataBaseImpl&#34;   使用数据类型&#34; java.rmi.Remote&#34;,不支持   JAX-RPC规范。该类型的实例可能无法序列化或   正确反序列化。数据丢失或Web完全失败   可能会导致服务。

     

方法&#34; exportObject&#34;在服务类&#34; MlvDataBaseImpl&#34;   使用数据类型&#34; java.rmi.server.RMIClientSocketFactory&#34;,即   JAX-RPC规范不支持。该类型的实例可能   没有正确序列化或反序列化。数据丢失或完整   可能导致Web服务失败。

     

方法&#34; exportObject&#34;在服务类&#34; MlvDataBaseImpl&#34;   使用数据类型&#34; java.rmi.server.RMIServerSocketFactory&#34;,即   JAX-RPC规范不支持。该类型的实例可能   没有正确序列化或反序列化。数据丢失或完整   可能导致Web服务失败。

     

方法&#34; unexportObject&#34;在服务类&#34; MlvDataBaseImpl&#34;   使用数据类型&#34; java.rmi.Remote&#34;,不支持   JAX-RPC规范。该类型的实例可能无法序列化或   正确反序列化。数据丢失或Web完全失败   可能会导致服务。

     

方法&#34; setLog&#34;在服务类&#34; MlvDataBaseImpl&#34;用一个   数据类型&#34; java.io.OutputStream&#34;,不受支持   JAX-RPC规范。该类型的实例可能无法序列化或   正确反序列化。数据丢失或Web完全失败   可能会导致服务。

     

方法&#34; getLog&#34;在服务类&#34; MlvDataBaseImpl&#34;用一个   数据类型&#34; java.io.PrintStream&#34;,JAX-RPC不支持   规格。该类型的实例可能无法序列化或反序列化   正确。数据丢失或Web服务完全失败可能   结果

     

方法&#34; getRef&#34;在服务类&#34; MlvDataBaseImpl&#34;用一个   数据类型&#34; java.rmi.server.RemoteRef&#34;,不支持   JAX-RPC规范。该类型的实例可能无法序列化或   正确反序列化。数据丢失或Web完全失败   可能会导致服务。

     

方法&#34; toStub&#34;在服务类&#34; MlvDataBaseImpl&#34;用一个   数据类型&#34; java.rmi.Remote&#34;,JAX-RPC不支持   规格。该类型的实例可能无法序列化或反序列化   正确。数据丢失或Web服务完全失败可能   结果

     

方法&#34; toStub&#34;在服务类&#34; MlvDataBaseImpl&#34;用一个   数据类型&#34; java.rmi.Remote&#34;,JAX-RPC不支持   规格。该类型的实例可能无法序列化或反序列化   正确。数据丢失或Web服务完全失败可能   结果

     

方法&#34;等于&#34;在服务类&#34; MlvDataBaseImpl&#34;用一个   数据类型&#34; java.lang.Object&#34;,JAX-RPC不支持   规格。该类型的实例可能无法序列化或反序列化   正确。数据丢失或Web服务完全失败可能   结果

     

服务类&#34; MlvDataBaseImpl&#34;没有公开默认值   构造函数。 JAX-RPC 1.1规范的第10.1章要求a   服务类有一个公共默认构造函数,否则一个   符合JAX-RPC 1.1的Web服务引擎可能无法构造   用于处理传入请求消息的服务类的实例。

     

字段或属性&#34;声明类&#34;在值类型上   &#34; java.lang.Enum中&#34;通过服务类使用&#34; MlvDataBaseImpl&#34;有个   数据类型&#34; java.lang.Class&#34;,JAX-RPC 1.1不支持   规格。该类型的实例可能无法序列化或反序列化   正确。数据丢失或Web服务完全失败可能   结果

     

字段或属性&#34; depositDate&#34;关于价值类型&#34; Vehicle&#34;用过的   通过服务类&#34; MlvDataBaseImpl&#34;有一个数据类型,   &#34; java.time.LocalDate&#34;,JAX-RPC 1.1不支持   规格。该类型的实例可能无法序列化或反序列化   正确。数据丢失或Web服务完全失败可能   结果

     

字段或属性&#34;评论&#34;关于价值类型&#34; Vehicle&#34;用过的   通过服务类&#34; MlvDataBaseImpl&#34;有一个数据类型,   &#34; java.util.List&#34;,JAX-RPC 1.1不支持   规格。该类型的实例可能无法序列化或反序列化   正确。数据丢失或Web服务完全失败可能   结果

     

字段或属性&#34;得分&#34;关于价值类型&#34; Vehicle&#34;通过使用   服务类&#34; MlvDataBaseImpl&#34;有一个数据类型,&#34; java.util.List&#34;,   JAX-RPC 1.1规范不支持。实例   该类型可能无法正确序列化或反序列化。数据丢失或   可能会导致Web服务完全失败。

     

字段或属性&#34;声明类&#34;在值类型上   &#34; java.lang.Enum中&#34;通过服务类使用&#34; MlvDataBaseImpl&#34;有个   数据类型&#34; java.lang.Class&#34;,JAX-RPC 1.1不支持   规格。该类型的实例可能无法序列化或反序列化   正确。数据丢失或Web服务完全失败可能   结果

     

字段或属性&#34; shoppingCart&#34;关于价值类型&#34;买方&#34;用过的   通过服务类&#34; MlvDataBaseImpl&#34;有一个数据类型,   &#34; java.util.ArrayList&#34;,JAX-RPC 1.1不支持   规格。该类型的实例可能无法序列化或反序列化   正确。数据丢失或Web服务完全失败可能   结果

1 个答案:

答案 0 :(得分:0)

请查看此帖子JAXB annotations for nested element lists,详细了解如何序列化列表。

至于警告,您需要在SO中搜索每个警告,涉及许多不同的主题。