2012-10-08 36 views
5

Tôi cố gắng tạo các lớp Java với JaXB từ XSD http://pda.rosreestr.ru/upload/www/files/02_V04_STD_Region_Cadastr_KV.rar này. Nhưng nhận lỗi này.Tạo các lớp Java với JaxB

parsing a schema... 
[WARNING] Simple type "dAllDocuments" was not mapped to Enum due to EnumMemberSizeCap limit. Facets count: 298, current limit: 256. You can use customization attribute "typesafeEnumMaxMembers" to extend the limit. 
line 3 of file:/D:/liferay-develop/workspace/JABX_test/src/02_V04_STD_Region_Cadastr_KV/dAllDocuments.xsd 

compiling a schema... 
[ERROR] Two declarations cause a collision in the ObjectFactory class. 
line 1645 of file:/D:/liferay-develop/workspace/JABX_test/src/02_V04_STD_Region_Cadastr_KV/STD_Region_Cadastr_KV.xsd 

[ERROR] (Related to above error) This is the other declaration. 
line 1587 of file:/D:/liferay-develop/workspace/JABX_test/src/02_V04_STD_Region_Cadastr_KV/STD_Region_Cadastr_KV.xsd 

Failed to produce code. 

Khi tôi làm việc với một lược đồ khác, mọi thứ đều ổn. Tôi không làm việc tốt với XML, bạn có thể cho tôi biết ý nghĩa của lỗi này và cách giải quyết nó không?

CẬP NHẬT

tôi cố gắng sử dụng binding.xml trong thế hệ lớp nhưng nhận được lỗi này.

C:\Documents and Settings\kliver\Мои документы\Загрузки\jaxb-ri-2.2.6\bin>xjc -d 
out -b binding.xml D:/liferay-develop/workspace/JABX_test/src/02_V04_STD_Region 
_Cadastr_KV/STD_Region_Cadastr_KV.xsd 
parsing a schema... 
[ERROR] "D:/liferay-develop/workspace/JABX_test/src/02_V04_STD_Region_Cadastr_KV 
/STD_Region_Cadastr_KV.xsd" is not a part of this compilation. Is this a mistake 
for "file:/D:/liferay-develop/workspace/JABX_test/src/02_V04_STD_Region_Cadastr 
_KV/STD_Region_Cadastr_KV.xsd"? 
line 6 of file:/C:/Documents%20and%20Settings/kliver/%D0%9C%D0%BE%D0%B8%20%D0% 
B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B/%D0%97%D0%B0%D0%B3%D1%80%D1%8 
3%D0%B7%D0%BA%D0%B8/jaxb-ri-2.2.6/bin/binding.xml 

[WARNING] Simple type "dAllDocuments" was not mapped to Enum due to EnumMemberSi 
zeCap limit. Facets count: 298, current limit: 256. You can use customization at 
tribute "typesafeEnumMaxMembers" to extend the limit. 
line 3 of file:/D:/liferay-develop/workspace/JABX_test/src/02_V04_STD_Region_C 
adastr_KV/dAllDocuments.xsd 

Failed to parse a schema. 

UPDATE2

tôi cố gắng này ràng buộc:

<jxb:bindings 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:jxb="http://java.sun.com/xml/ns/jaxb" 
version="2.1"> 

    <!-- Raise theEnumMemberSizeCap limit --> 
    <jxb:bindings > 
     <jxb:globalBindings typesafeEnumMaxMembers="2000"/> 
    </jxb:bindings> 

    <jxb:bindings schemaLocation="D:\liferay-develop\workspace\JABX_test\src\02_V04_STD_Region_Cadastr_KV\STD_Region_Cadastr_KV.xsd"> 
     <jxb:bindings node="//xs:complexType[@name='tRight_Owner']"> 
      <jxb:class name="tRight_Owner2"/> 
     </jxb:bindings> 
    </jxb:bindings> 

</jxb:bindings> 

Và console lệnh này:

C:\Documents and Settings\kliver\Мои документы\Загрузки\jaxb-ri-2.2.6\bin>xjc -d 
out -b binding.xml D:\liferay-develop\workspace\JABX_test\src\02_V04_STD_Region 
_Cadastr_KV\STD_Region_Cadastr_KV.xsd 
+0

Vâng, những loại đang tuyên bố tại các dòng 1587 và 1645 của tập tin đó? Họ dường như tạo ra các tên lớp xung đột, bạn sẽ cần phải hợp nhất chúng (nếu chúng thực sự đại diện cho cùng một thứ) hoặc tùy chỉnh tên của các kiểu đó. –

+0

Trong dòng 1645 ''. Vì vậy, làm thế nào tôi hiểu defenetion của nó loại 'tRight_Owner'. Nhưng tôi không thấy một loại khác với tên này. –

Trả lời

13

Bạn có thể sử dụng tập tin một ràng buộc bên ngoài để xác định một tên lớp khác nhau cho một trong những loại phức tạp.

binding.xml

<jxb:bindings 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:jxb="http://java.sun.com/xml/ns/jaxb" 
    version="2.1"> 

    <!-- Raise theEnumMemberSizeCap limit --> 
    <jxb:bindings > 
     <jxb:globalBindings typesafeEnumMaxMembers="2000"/> 
    </jxb:bindings> 

    <jxb:bindings schemaLocation="your-schema.xsd"> 
      <jxb:bindings node="//xs:complexType[@name='tRight_Owner']"> 
       <jxb:class name="TRight_Owner2"/> 
      </jxb:bindings> 
    </jxb:bindings> 

</jxb:bindings> 

Các XJC dòng lệnh sẽ là:

xjc -d out -b binding.xml your-schema.xsd 
+0

Tôi thử mã của bạn nhưng gặp lỗi. Vui lòng xem UPDATE câu hỏi. –

+0

@KliverMax - Tôi đã cập nhật câu trả lời của mình để giải quyết giới hạn EnumMemberSizeCap. Bạn có thể đăng các tập tin ràng buộc bạn đang cố gắng sử dụng? –

+0

Tôi cập nhật câu hỏi, hãy nhìn vào nó. –

0

Bạn có một vấn đề với XSD của bạn, có nhiều tờ khai cùng tên tRight_Owner
dòng 1587:

<xs:complexType> 
         <xs:complexContent> 
          <xs:extension base="tRight_Owner"/> 
         </xs:complexContent> 
        </xs:complexType> 

dòng 1645:

<xs:complexType name="tRight_Owner"> 
+1

Nhưng cách khắc phục? –

2

Đối với những người bạn đến qua câu hỏi này trong những năm sau đó phương pháp này làm việc cho tôi.

Môi trường: Netbeans 7.4

xây dựng phương pháp: Maven - jaxb2-maven-plugin

  1. Tạo một thư mục có tên xjb trong src\main.
  2. Trong thư mục đó tạo một tệp có tên binding.xjb (hoặc bất kỳ tên nào khác .xjb).

Trong đó:

<jxb:bindings 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:jxb="http://java.sun.com/xml/ns/jaxb" 
    version="2.1"> 

    <!-- Raise theEnumMemberSizeCap limit --> 
    <jxb:bindings > 
     <jxb:globalBindings typesafeEnumMaxMembers="2000"/> 
    </jxb:bindings> 

</jxb:bindings> 

Lưu ý rằng đây không phải là một giải pháp thay thế cho bài Blaise.

2

Tôi đang sử dụng phiên bản 0.13.0 của maven-jaxb2-plugin, và tôi thấy đúng đường dẫn đến tập tin ràng buộc là:

src/main/resources/binding.xjb 

Nội dung cũng giống như OldCurmudgeon đề xuất, cụ thể là:

<jxb:bindings xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:jxb="http://java.sun.com/xml/ns/jaxb" version="2.1"> 

    <!-- Raise theEnumMemberSizeCap limit --> 
    <jxb:bindings> 
     <jxb:globalBindings typesafeEnumMaxMembers="2000" /> 
    </jxb:bindings> 

</jxb:bindings> 
Các vấn đề liên quan