diff --git a/src/share/classes/java/beans/XMLEncoder.java b/src/share/classes/java/beans/XMLEncoder.java index 2ac3cdc30b29e82a4c8364f6ec42b4fbda8e6d9f..b7cc21de31288341f313f0bc5e76ddebee7e38b0 100644 --- a/src/share/classes/java/beans/XMLEncoder.java +++ b/src/share/classes/java/beans/XMLEncoder.java @@ -377,7 +377,7 @@ public class XMLEncoder extends Encoder implements AutoCloseable { Object arg = args[i]; mark(arg, true); } - mark(stm.getTarget(), false); + mark(stm.getTarget(), stm instanceof Expression); } diff --git a/test/java/beans/XMLEncoder/Test8016545.java b/test/java/beans/XMLEncoder/Test8016545.java new file mode 100644 index 0000000000000000000000000000000000000000..466d8eb01fa03f7558e01d8ca93e57c6427defd2 --- /dev/null +++ b/test/java/beans/XMLEncoder/Test8016545.java @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8016545 + * @summary Tests beans with predefined fields + * @author Sergey Malenkov + */ + +public class Test8016545 extends AbstractTest { + public static void main(String[] args) { + new Test8016545().test(true); + } + + @Override + protected Object getObject() { + Bean bean = new Bean(); + bean.setUndefined(Boolean.FALSE); + Info info = new Info(); + info.setEnabled(Boolean.TRUE); + info.setID(1); + bean.setInfo(info); + return bean; + } + + @Override + protected Object getAnotherObject() { + Bean bean = new Bean(); + bean.setUndefined(Boolean.TRUE); + bean.getInfo().setEnabled(Boolean.FALSE); + bean.getInfo().setID(2); + return bean; + } + + public static class Bean { + private Info info = new Info(); // predefined + private Boolean defined = Boolean.TRUE; + private Boolean undefined; + + public Info getInfo() { + return this.info; + } + + public void setInfo(Info info) { + this.info = info; + } + + public Boolean getDefined() { + return this.defined; + } + + public void setDefined(Boolean defined) { + this.defined = defined; + } + + public Boolean getUndefined() { + return this.undefined; + } + + public void setUndefined(Boolean undefined) { + this.undefined = undefined; + } + } + + public static class Info { + private Integer id; + private Boolean enabled; + + public Integer getID() { + return this.id; + } + + public void setID(Integer id) { + this.id = id; + } + + public Boolean getEnabled() { + return this.enabled; + } + + public void setEnabled(Boolean enabled) { + this.enabled = enabled; + } + } +}