2011-09-20 28 views
6

Lấy sau hơn XSD đơn giản:giúp đỡ xin vui lòng: XJC ném "Hai tờ khai gây ra một vụ va chạm trong lớp ObjectFactory"

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema targetNamespace="com.acme" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="Widget"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element 
        minOccurs="0" name="color" nillable="true" type="xs:string" /> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    <xs:element name="WidgetColor" type="xs:string" /> 
</xs:schema> 

Sau đó, cố gắng như sau:

xjc test.xsd 

Bạn luôn nên ngoại lệ sau:

parsing a schema... 
compiling a schema... 
[ERROR] Two declarations cause a collision in the ObjectFactory class. 
    line 11 of file:/C:/test.xsd 

[ERROR] (Related to above error) This is the other declaration. 
    line 7 of file:/C:/test.xsd 

Failed to produce code. 

Lưu ý rằng có tên phần tử "Widget "là một complexType và có các phần tử có tên" màu ". Ngoài ra, ở cùng cấp với phần tử "Widget", một phần tử đơn giản có tên "WidgetColor".

khó hiểu hơn là gì là nếu bạn loại bỏ thuộc tính minOccurs = "0" HOẶC bạn loại bỏ thuộc tính nillable = "true" từ "màu" chuỗi yếu tố, XJC biên dịch schema thành công.

Có ai từng gặp vấn đề này hoặc có thể đề xuất giải pháp không?

Xin cảm ơn,

Mike.

Trả lời

6

Cuối cùng tôi cũng đã tìm ra cách khắc phục sự cố của mình. Nó nằm trong việc sử dụng một ràng buộc tùy chỉnh để chỉ định tên lớp riêng biệt cho một trong các khai báo.

Nội dung tùy chỉnh binding.xjb

<?xml version="1.0" encoding="UTF-8"?> 
<bindings version="2.0" xmlns="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <bindings schemaLocation="test.xsd"> 
     <bindings node="//xs:element[@name='WidgetColor']"> 
      <class name="BaseWidgetColor" /> 
     </bindings> 
    </bindings> 
</bindings> 

hoạt động:

C:\>xjc -b custom-binding.xjb test.xsd 
parsing a schema... 
compiling a schema... 
acme\com\BaseWidgetColor.java 
acme\com\ObjectFactory.java 
acme\com\Widget.java 
acme\com\package-info.java 

Patience et longueur de temps valent MIEUX que cơn thịnh nộ et acharnement ...!

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