Using `@XmlAttribute` for property with non-scalar type prevents serialization as attribute for other properties

Đang mở
#128 5 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Đánh giá

Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức phù hợp với người mới
35/100
Loại issue
Lỗi
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Đình trệ
Công nghệ
java
Lĩnh vực
backend

Hướng nghiên cứu

Bắt đầu với reproducer Bug2.main và chạy hai trường hợp tuần tự hóa XmlMapper được nêu trong issue. Truy vết cách các chú thích JAXB @XmlAttribute được xử lý đối với trường Bean non-scalar, sau đó xác minh rằng hành vi của start, bean và end khớp với một kết quả đã được thống nhất rõ ràng, đồng thời thêm một regression test nếu đã xác định được vị trí test của project.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

has-failing-test

Look at the last line of this class.
Incorrect using @XmlAttribute for a bean serialization breaks a serialization of other properties.
I excepted to see an error or bean value as an attribute value.

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.dataformat.xml.JacksonXmlModule;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule;

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;

public class Bug2 {

    @XmlRootElement(name = "bean")
    public static class Bean {

    }

    @XmlRootElement(name = "root")
    public static class Container {
        @XmlAttribute(name = "start")
        public String start;

        @XmlAttribute(name = "bean")
        public Bean bean;

        @XmlAttribute(name = "end")
        public String end;
    }

    public static void main(String[] args) throws JsonProcessingException {
        XmlMapper xmlMapper = new XmlMapper();
        xmlMapper.registerModule(new JaxbAnnotationModule());
        xmlMapper.registerModule(new JacksonXmlModule());

        Container container = new Container();
        container.start = "!start";
        container.end = "!end";
        System.out.println(xmlMapper.writeValueAsString(container)); // print <root xmlns="" start="!start" end="!end"></root>

        Bean bean = new Bean();
        container.bean = bean;
        System.out.println(xmlMapper.writeValueAsString(container)); // print <root xmlns="" start="!start"><bean></bean><end>!end</end></root>
    }
}

Ngôn ngữ chính
Java
Star
636
Fork
250
Merge trung bình
7 giờ 10 phút
Pull request đã merge (30 ngày)
8

Chuẩn bị môi trường

Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của FasterXML/jackson-dataformat-xml

Tất cả issue của FasterXML/jackson-dataformat-xml

Issue tương tự

Thêm issue về Java

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.