2011-07-24 21 views
5

Khi tôi sử dụng @XmlSchema(attributeFormDefault = XmlNsForm.QUALIFIED, ...)JAXB: Thuộc tính đủ điều kiện vô hiệu hóa không gian tên mặc định xmlns = ""?

hoặc @XmlAttribute(namespace = "sample.com/y", ...)

JAXB bỏ qua @XmlSchema(namespace = "sample.com/x", ...)

và thay vì:

<a xmlns="sample.com/y" xmlns:ns0="sample.com/y"> 
    <b ns0:att=""/> 
</a> 

tạo ra một cái gì đó như:

<ns1:a xmlns:ns1="sample.com/x" xmlns:ns0="sample.com/y"> 
    <ns1:b ns0:att=""/> 
</ns1:a> 

Đây có phải là hành vi mong đợi không? Có cách nào để khắc phục điều này?

Trả lời

3

EclipseLink JAXB (MOXy) đang xử lý giấy chứng nhận tiền tố cho các phần tử khác nhau tùy thuộc vào tiêu chuẩn của biểu mẫu thuộc tính (như minh họa bên dưới).

Tiêu chuẩn không gian tên không sai, nhưng tôi đồng ý rằng việc sử dụng không gian tên mặc định sẽ tốt hơn khi có thể. Bạn có thể theo dõi sự tiến bộ về vấn đề này bằng cách sử dụng lỗi sau:

Một

package forum6808921; 

import javax.xml.bind.annotation.XmlRootElement; 

@XmlRootElement 
public class A { 

    private String b; 

    public String getB() { 
     return b; 
    } 

    public void setB(String b) { 
     this.b = b; 
    } 

} 

Demo

package forum6808921; 

import javax.xml.bind.JAXBContext; 
import javax.xml.bind.Marshaller; 

public class Demo { 

    public static void main(String[] args) throws Exception { 
     JAXBContext jc = JAXBContext.newInstance(A.class); 

     A a = new A(); 
     a.setB("Hello World"); 

     Marshaller marshaller = jc.createMarshaller(); 
     marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
     marshaller.marshal(a, System.out); 
    } 

} 

gói-info mà không attributeFormDefault thiết

@XmlSchema(
     namespace = "sample.com/x" 
     , elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED 
     ) 
package forum6808921; 

import javax.xml.bind.annotation.*; 

Output:

<?xml version="1.0" encoding="UTF-8"?> 
<a xmlns="sample.com/x"> 
    <b>Hello World</b> 
</a> 

gói-info với attributeFormDefault thiết

@XmlSchema(
     namespace = "sample.com/x" 
     , elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED 
     , attributeFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED 
     ) 
package forum6808921; 

import javax.xml.bind.annotation.*; 

Output:

<?xml version="1.0" encoding="UTF-8"?> 
<ns0:a xmlns:ns0="sample.com/x"> 
    <ns0:b>Hello World</ns0:b> 
</ns0:a> 
+0

Cảm ơn bạn đã xác nhận vấn đề này. –

Các vấn đề liên quan