ไม่มี @XmlRootElement สร้างโดย JAXB


209

ฉันกำลังพยายามสร้างคลาส Java จาก FpML (Finanial Products Markup Language) เวอร์ชัน 4.5 มีการสร้างรหัสเป็นตัน แต่ฉันไม่สามารถใช้งานได้ พยายามทำให้เป็นเอกสารอย่างง่ายที่ฉันได้รับ:

javax.xml.bind.MarshalException
  - with linked exception: [com.sun.istack.SAXException2: unable
  to marshal type
  "org.fpml._2008.fpml_4_5.PositionReport"
  as an element because it is missing an
  @XmlRootElement annotation]

ในความเป็นจริงไม่มีคลาสใดที่มีคำอธิบายประกอบ @XmlRootElement ดังนั้นฉันจะทำอะไรผิดได้บ้าง ฉันกำลังชี้ xjc (JAXB 2.1) ไปที่ fpml-main-4-5.xsd ซึ่งรวมทุกประเภท

คำตอบ:


261

ในการผูกสิ่งที่ผู้อื่นได้กล่าวถึงหรือบอกใบ้ไว้แล้วกฎที่ JAXB XJC ตัดสินใจว่าจะใส่@XmlRootElementคำอธิบายประกอบลงในคลาสที่สร้างขึ้นนั้นไม่ใช่เรื่องเล็กน้อย ( ดูบทความนี้ )

@XmlRootElementมีอยู่เนื่องจากรันไทม์ JAXB ต้องการข้อมูลบางอย่างเพื่อ marshal / unmarshal วัตถุที่กำหนดโดยเฉพาะชื่อองค์ประกอบ XML และเนมสเปซ คุณไม่สามารถส่งวัตถุเก่า ๆ ไปยัง Marshaller ได้ @XmlRootElementให้ข้อมูลนี้

อย่างไรก็ตามคำอธิบายประกอบเป็นเพียงความสะดวกสบาย - JAXB ไม่ต้องการ ทางเลือกคือใช้JAXBElementห่อหุ้มวัตถุซึ่งให้ข้อมูลเหมือน@XmlRootElementกัน แต่ในรูปแบบของวัตถุแทนที่จะเป็นคำอธิบายประกอบ

อย่างไรก็ตามJAXBElementวัตถุนั้นมีความลำบากในการสร้างเนื่องจากคุณจำเป็นต้องรู้ชื่อองค์ประกอบ XML และเนมสเปซซึ่งโดยทั่วไปแล้วตรรกะทางธุรกิจจะไม่เกิดขึ้น

โชคดีที่เมื่อ XJC ObjectFactoryสร้างรูปแบบการเรียนก็ยังสร้างระดับที่เรียกว่า นี่เป็นส่วนหนึ่งที่ใช้ในการทำงานร่วมกับ JAXB v1 ได้ แต่ก็เป็นที่สำหรับ XJC ที่จะสร้างวิธีการจากโรงงานซึ่งสร้างการJAXBElementล้อมรอบวัตถุของคุณเอง มันจัดการชื่อ XML และเนมสเปซสำหรับคุณดังนั้นคุณจึงไม่ต้องกังวลเกี่ยวกับมัน คุณเพียงแค่ต้องดูObjectFactoryวิธีการต่างๆ (และสำหรับสคีมาขนาดใหญ่อาจมีหลายร้อยวิธี) เพื่อค้นหาสิ่งที่คุณต้องการ


15
โซลูชันเคสพิเศษ: เมื่อคุณสามารถแก้ไข xsd ที่ใช้สำหรับการสร้างคลาส: หลังจากอ่านลิงก์ที่ให้ไว้ในคำตอบนี้โซลูชันในเคสของฉันคือแก้ไขไฟล์ xsd ที่ใช้ในการสร้างคลาส: ฉันเปลี่ยนนิยามขององค์ประกอบรูทเป็น นิยามแบบอินไลน์แทนที่จะใช้การอ้างอิงไปยังชนิดที่กำหนดไว้แยกกัน สิ่งเหล่านี้อนุญาตให้ JAXB ตั้งค่าองค์ประกอบนี้เป็น @XmlRootElement ซึ่งไม่สามารถใช้ได้กับ elementType ที่ใช้มาก่อนสำหรับองค์ประกอบรูท
Arthur

2
<scowl> การเปลี่ยนองค์ประกอบรูทเป็นประเภทอินไลน์ทำให้คลาสทั้งหมดเป็นคลาสภายในของประเภทรูท นอกจากนี้แม้ว่าจะมีการกำหนดประเภทองค์ประกอบรากหลังจากองค์ประกอบองค์ประกอบของตัวเอง (เห็นได้ชัดว่าได้รับอนุญาตจากสคีมา) JAXB จะยังไม่ได้ใส่คำอธิบายประกอบด้วย @XmlRootElement
Pawel Veselov

10
ie new ObjectFactory().createPositionReport(positionReport)returnJAXBElement<PositionReport>
vikingsteve

17
เกิดอะไรขึ้นถ้าสร้างวิธี ObjectFactory ไม่สร้างวิธีการที่ล้อมโต้แย้งในที่JXBElement? ในกรณีของฉันวิธีการจากโรงงานคือ 0-arity และเพิ่งส่งคืนnewวัตถุ (ทำไมบางคลาสถึงได้รับผู้ช่วยตัวห่อหุ้ม JAXBElement และคนอื่นไม่ได้?) ฉันเดาว่าในกรณีนั้นเราต้องสร้างตัวคลุม
Carl G

1
@CarlG ฉันอยู่ในสถานการณ์เดียวกัน - ไม่มี XmlRootElement หรือ JAXBElement ปรากฏในชั้นเรียนของฉัน คุณพบวิธีแก้ปัญหาสำหรับกรณีนี้หรือไม่?
Mickael Marrache

68

สิ่งนี้ถูกกล่าวถึงที่ด้านล่างของโพสต์บล็อกที่ลิงก์ไว้ด้านบน แต่นี่ใช้งานได้ดีสำหรับฉัน:

Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
marshaller.marshal(new JAXBElement<MyClass>(new QName("uri","local"), MyClass.class, myClassInstance), System.out);

ฉันชอบคำตอบที่ทำเครื่องหมายไว้ แต่สิ่งนี้ก็เหมาะกับฉันเช่นกัน
Pedro Dusso

1
สิ่งที่อยู่jcในตัวอย่างข้างต้นหรือไม่
อรุณ

3
@ RushRaj เป็นคลาส JAXBContext
Gurnard

51

ดังที่ได้กล่าวไว้ในคำตอบข้อใดข้อหนึ่งข้างต้นคุณจะไม่ได้รับ XMLRootElement ในองค์ประกอบรูทของคุณหากใน XSD ประเภทนั้นถูกกำหนดเป็นประเภทที่มีชื่อเนื่องจากประเภทที่มีชื่อสามารถใช้ที่อื่นใน XSD ของคุณได้ ลอง mking เป็นประเภทที่ไม่ระบุชื่อเช่นแทนที่จะเป็น:

<xsd:element name="myRootElement" type="MyRootElementType" />

<xsd:complexType name="MyRootElementType">
...
</xsd:complexType>

คุณจะมี:

<xsd:element name="myRootElement">
    <xsd:complexType>
    ...
    <xsd:complexType>
</xsd:element>

1
นั่นไม่เป็นความจริงสำหรับฉัน ประเภทของฉันไม่ระบุตัวตน (ฝังอยู่ในองค์ประกอบรากของฉัน) และไม่มีการสร้างคำอธิบายประกอบ XmlRootElement ความคิดใด ๆ
Mickael Marrache

38

@XmlRootElement ไม่จำเป็นสำหรับ unmarshalling - หากใช้รูปแบบพารามิเตอร์ 2 ของ Unmarshaller # unmarshall

ดังนั้นถ้าแทนที่จะทำ:

UserType user = (UserType) unmarshaller.unmarshal(new StringReader(responseString));

หนึ่งควรทำ:

JAXBElement<UserType> userElement = unmarshaller.unmarshal(someSource, UserType.class);
UserType user = userElement.getValue();

รหัสหลังจะไม่ต้องการคำอธิบายประกอบ @XmlRootElement ที่ระดับคลาส UserType


2
คุณรู้วิธีที่สง่างามอย่างเท่าเทียมกันในการจัดระเบียบวัตถุที่ไม่มี XmlRootElement หรือไม่โดยไม่หุ้มมันด้วย JAXBElement ตามที่กล่าวไว้โดย skaffman, Gurnard et al?
Chris

4
+1 ทำงานอย่างสมบูรณ์แบบ! หนึ่งการแก้ไขเพื่อความชัดเจนมากขึ้น ... ในโซลูชันของคุณ 'someSource' นั้นเป็นคำที่คลุมเครือมาก หากต้องการทำอย่างละเอียด: JAXBElement <TargetClazz> root = unmarshaller.unmarshal (StreamSource ใหม่ (ไฟล์ใหม่ ("some.xml")), TargetClazz.class);
ซูเปอร์โนวา

4
รายละเอียดเพิ่มเติมของ 'someSource':String pathname = "file.xml"; InputStream stream = new FileInputStream(pathname); JAXBContext jaxbContext = JAXBContext.newInstance(UserType.class); Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); XMLInputFactory factory = XMLInputFactory.newInstance(); XMLEventReader someSource = factory.createXMLEventReader(stream); JAXBElement<UserType> userElement = jaxbUnmarshaller.unmarshal(someSource, UserType.class); UserType user = userElement.getValue();
Steve Pitchers

21

คำตอบของโจ (Joe Jun 26 '09 เวลา 17:26) ทำเพื่อฉัน คำตอบง่ายๆคือการไม่มีหมายเหตุประกอบ @XmlRootElement จะไม่มีปัญหาหากคุณจัดการ JAXBElement สิ่งที่ทำให้ฉันสับสนคือ ObjectFactory ที่สร้างขึ้นมี 2 เมธอด createMyRootElement - วิธีแรกไม่มีพารามิเตอร์และให้อ็อบเจ็กต์ที่ไม่ได้ถูกแยกส่วนที่สองใช้อ็อบเจกต์ unrapped และส่งคืนใน JAXBElement นี่คือรหัสพื้นฐานที่ฉันใช้ (ฉันใหม่สำหรับสิ่งนี้ดังนั้นขออภัยหากโค้ดไม่ได้จัดรูปแบบที่ถูกต้องในการตอบกลับนี้) ส่วนใหญ่ถูก cribbed จากลิงก์ข้อความ :

ObjectFactory objFactory = new ObjectFactory();
MyRootElement root = objFactory.createMyRootElement();
...
// Set root properties
...
if (!writeDocument(objFactory.createMyRootElement(root), output)) {
    System.err.println("Failed to marshal XML document");
}
...

private boolean writeDocument(JAXBElement document, OutputStream output) {

  Class<?> clazz = document.getValue().getClass();
  try {
    JAXBContext context =
        JAXBContext.newInstance(clazz.getPackage().getName());
    Marshaller m = context.createMarshaller();
    m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
    m.marshal(document, output);
    return true;

  } catch (JAXBException e) {
    e.printStackTrace(System.err);
    return false;
  }
}

2
ฉันมีกรณีที่คลาส ObjectFactory ของฉันกำหนดวิธีการที่ส่งกลับอินสแตนซ์ปกติเท่านั้นและไม่ใช่อินสแตนซ์ JAXBElement ...
Mickael Marrache

20

คุณสามารถแก้ไขปัญหานี้ได้โดยใช้การเชื่อมโยงจากวิธีสร้างคลาส @XmlRootElement สำหรับประเภทฐานใน XSD? .

นี่คือตัวอย่างของ Maven

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>jaxb2-maven-plugin</artifactId>
            <version>1.3.1</version>
            <executions>
                <execution>
                    <id>xjc</id>
                    <goals>
                        <goal>xjc</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <schemaDirectory>src/main/resources/xsd</schemaDirectory>
                <packageName>com.mycompany.schemas</packageName>
                <bindingFiles>bindings.xjb</bindingFiles>
                <extension>true</extension>
            </configuration>
        </plugin>

นี่คือbinding.xjbเนื้อหาของไฟล์

<?xml version="1.0"?>
<jxb:bindings version="1.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
              xmlns:xjc= "http://java.sun.com/xml/ns/jaxb/xjc"
              jxb:extensionBindingPrefixes="xjc" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <jxb:bindings schemaLocation="path/to/myschema.xsd" node="/xs:schema">
        <jxb:globalBindings>
            <xjc:simple/>
        </jxb:globalBindings>
    </jxb:bindings>
</jxb:bindings>

3
แน่นอนว่าการใช้ <xjc: simple> ในไฟล์ binding.xjb นั้นได้ทำการหลอกลวง สุดยอดทางออกถ้าคุณไม่ต้องการเปลี่ยนรหัสการจัดการหรือ WSDL ของคุณ โปรดทราบว่า xjc: simple สร้างชื่อเมธอด (พหูพจน์) ที่แตกต่างกันสำหรับคอลเล็กชัน getters (getOrders แทนที่จะเป็น getOrder เป็นต้น)
dvtoever

10

ดังที่คุณทราบคำตอบคือการใช้ ObjectFactory () นี่คือตัวอย่างของรหัสที่เหมาะกับฉัน :)

ObjectFactory myRootFactory = new ObjectFactory();

MyRootType myRootType = myRootFactory.createMyRootType();

try {

        File file = new File("./file.xml");
        JAXBContext jaxbContext = JAXBContext.newInstance(MyRoot.class);
        Marshaller jaxbMarshaller = jaxbContext.createMarshaller();

        //output pretty printed
        jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

        JABXElement<MyRootType> myRootElement = myRootFactory.createMyRoot(myRootType);

        jaxbMarshaller.marshal(myRootElement, file);
        jaxbMarshaller.marshal(myRootElement, System.out);

    } catch (JAXBException e) {
        e.printStackTrace();
    }

ถึงจุดของคุณ ... ฉันจะใช้วิธี JAXBElement <?> สร้าง ... () วิธีการจาก ObjectFactory สำหรับองค์ประกอบที่ซ้อนกันได้อย่างไร เช่น: <SOAP-ENV: Header> <wsse: ความปลอดภัย> <wsse: UsernameToken> </ wsse: UsernameToken> </ wsse: ความปลอดภัย> </ SOAP-ENV: Header> ฉันได้รับ: "ไม่สามารถพิมพ์ประเภท" UsernameTokenType " เป็นองค์ประกอบเนื่องจากไม่มีคำอธิบายประกอบ @XmlRootElement "
Angelina

6

มันไม่ทำงานสำหรับเราเช่นกัน แต่เราพบบทความที่ยกมาอย่างกว้างขวางซึ่งเพิ่มพื้นหลังบางส่วน ... ฉันจะลิงก์ไปที่นี่เพื่อประโยชน์ของบุคคลต่อไป: http://weblogs.java.net/blog/kohsuke/archive/2006/03 /why_does_jaxb_p.html


มันใช้งานได้ดีสำหรับฉันขอบคุณ ฉันยังพบว่าฉันกำลังจัดการวัตถุ JAXB ที่ผิดพลาด (ไม่ใช่รากอย่างที่ฉันคิดไว้) ในกระบวนการที่จะทำสิ่งนี้ ฉันลืมที่จะสร้าง JAXBElement และพยายามที่จะจัดระเบียบวัตถุที่ส่งคืนจากคลาส ObjectFactory ที่ฉันได้รับจากการผูก โดยทั่วไปแล้วจะดูแลปัญหานี้โดยสิ้นเชิง (ในกรณีที่มีคนอื่นวิ่งชนกับปัญหาเดียวกัน)
Joe Bane

1
404: "ขออภัยไซต์ java.net ปิดแล้วโครงการโอเพ่นซอร์สส่วนใหญ่ที่เคยโฮสต์บน java.net ถูกย้ายไปแล้ว"
อุโมงค์


6

หลังจาก sruggling เป็นเวลาสองวันฉันพบวิธีแก้ปัญหาคุณสามารถใช้คลาสObjectFactoryเพื่อแก้ไขปัญหาสำหรับคลาสที่ไม่มี @XmlRootElement @XmlRootElementObjectFactory มีวิธีโอเวอร์โหลดเพื่อล้อมรอบ JAXBElement

วิธีการ: 1ทำการสร้างวัตถุอย่างง่าย

วิธีการ: 2จะล้อมวัตถุด้วยล้อม @JAXBElement @JAXBElement

ใช้เสมอ วิธี : 2เพื่อหลีกเลี่ยง javax.xml.bind.MarshalException - โดยมีข้อยกเว้นที่เชื่อมโยงหายไปมีการเพิ่มความคิดเห็น @XmlRootElement

กรุณาค้นหารหัสตัวอย่างด้านล่าง

วิธีการ: 1ทำการสร้างวัตถุอย่างง่าย

public GetCountry createGetCountry() {
        return new GetCountry();
    }

วิธีการ: 2จะตัดวัตถุที่มี@JAXBElement

 @XmlElementDecl(namespace = "my/name/space", name = "getCountry")
 public JAXBElement<GetCountry> createGetCountry(GetCountry value) {
        return new JAXBElement<GetCountry>(_GetCountry_QNAME, GetCountry.class, null, value);
    }

ตัวอย่างรหัสการทำงาน:

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
WebServiceTemplate springWSTemplate = context.getBean(WebServiceTemplate.class);

GetCountry request = new GetCountry();
request.setGuid("test_guid");

JAXBElement<GetCountryResponse> jaxbResponse = (JAXBElement<GetCountryResponse>)springWSTemplate .marshalSendAndReceive(new ObjectFactory().createGetCountry(request));

GetCountryResponse response = jaxbResponse.getValue();

ขอขอบคุณที่ให้การอ้างอิงโค้ดด้วยเทมเพลตเว็บเซอร์สปริงของฤดูใบไม้ผลิซึ่งกำลังดิ้นรนที่จะคิดออกมาซักพัก!
RRR_J

5

ในกรณีที่ประสบการณ์ของฉันเกี่ยวกับปัญหานี้ให้กับยูเรก้า เดี๋ยวก่อน .. ฉันจะเพิ่มสิ่งต่อไปนี้:

ฉันยังได้รับปัญหานี้เมื่อใช้ไฟล์ xsd ที่ฉันสร้างขึ้นโดยใช้ตัวเลือกเมนู "สร้าง xsd จากเอกสารอินสแตนซ์" ของ IntelliJ

เมื่อฉันยอมรับค่าเริ่มต้นทั้งหมดของเครื่องมือนี้มันสร้างไฟล์ xsd ที่เมื่อใช้กับ jaxb สร้างไฟล์ java โดยไม่มี @XmlRootElementไฟล์จาวาสร้างขึ้นด้วยไม่มี ที่ runtime เมื่อฉันพยายาม marshal ฉันได้รับข้อยกเว้นเช่นเดียวกับที่กล่าวไว้ในคำถามนี้

ฉันกลับไปที่เครื่องมือ IntellJ และเห็นตัวเลือกเริ่มต้นในรายการแบบหล่นลง "Desgin Type" (ซึ่งแน่นอนว่าฉันไม่เข้าใจ .. และยังไม่ทำถ้าฉันซื่อสัตย์) คือ:

ประเภท Desgin:

"องค์ประกอบท้องถิ่น / ประเภทซับซ้อนทั่วโลก"

ฉันเปลี่ยนสิ่งนี้เป็น

"องค์ประกอบ / ประเภทท้องถิ่น"

ตอนนี้มันสร้าง xsd ที่แตกต่าง (อย่างมีนัยสำคัญ) ที่สร้าง@XmlRootElementเมื่อใช้กับ jaxb ไม่สามารถพูดได้ว่าฉันเข้าใจถึงการเข้าและออกของมัน แต่มันได้ผลสำหรับฉัน



4

JAXBElement wrappers ใช้สำหรับกรณีที่ไม่มี@XmlRootElementJAXB สร้างขึ้น ห่อเหล่านี้มีอยู่ในระดับที่สร้างขึ้นโดยObjectFactory maven-jaxb2-pluginสำหรับเช่น:

     public class HelloWorldEndpoint {
        @PayloadRoot(namespace = NAMESPACE_URI, localPart = "person")
        @ResponsePayload
        public JAXBElement<Greeting> sayHello(@RequestPayload JAXBElement<Person> request) {

        Person person = request.getValue();

        String greeting = "Hello " + person.getFirstName() + " " + person.getLastName() + "!";

        Greeting greet = new Greeting();
        greet.setGreeting(greeting);

        ObjectFactory factory = new ObjectFactory();
        JAXBElement<Greeting> response = factory.createGreeting(greet);
        return response;
      }
 }

3

คุณพยายามเปลี่ยน xsd ของคุณเช่นนี้หรือไม่?

<!-- create-logical-system -->
<xs:element name="methodCall">
  <xs:complexType>
    ...
  </xs:complexType>
</xs:element>

สิ่งนี้ใช้ได้กับฉันด้วย JDK 1.7u71 องค์ประกอบระดับบนสุดได้รับมอบหมาย @XmlRootElement โดย xjc ตอนแรกฉันมีประเภทที่ซับซ้อนระดับบนสุดเท่านั้น ต้องห่อใน JAXBElement เป็นที่น่าเกลียดธรรมดา
Serge Merzliakov

1

ในการแก้ปัญหาคุณควรกำหนดค่าการเชื่อม xml ก่อนที่จะคอมไพล์ด้วย wsimport โดยตั้งค่า generateElementProperty เป็น false

     <jaxws:bindings wsdlLocation="LOCATION_OF_WSDL"
      xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"
      xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema"
      xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
      xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
         <jaxws:enableWrapperStyle>false</jaxws:enableWrapperStyle>
    <jaxws:bindings  node="wsdl:definitions/wsdl:types/xs:schema[@targetNamespace='NAMESPACE_OF_WSDL']">
      <jxb:globalBindings xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema">
            <xjc:generateElementProperty>false</xjc:generateElementProperty> 
      </jxb:globalBindings>
  </jaxws:bindings>
</jaxws:bindings>

แท็กการห่อควรเป็น<jaxb:bindings> ... <jaxws:bindings> ... </jaxws:bindings> ... </jaxb:bindings>
aliopi

0

หัวข้อดังกล่าวค่อนข้างเก่า แต่ยังคงเกี่ยวข้องกับบริบททางธุรกิจขององค์กร ฉันพยายามหลีกเลี่ยงการสัมผัส xsds เพื่อปรับปรุงพวกเขาในอนาคตได้อย่างง่ายดาย นี่คือโซลูชันของฉัน ..

1. ส่วนใหญ่xjc:simpleก็เพียงพอแล้ว

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<jxb:bindings version="2.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
    jxb:extensionBindingPrefixes="xjc">

    <jxb:globalBindings>
        <xjc:simple/> <!-- adds @XmlRootElement annotations -->
    </jxb:globalBindings>

</jxb:bindings>

ส่วนใหญ่จะสร้าง XmlRootElements สำหรับการนำเข้านิยาม xsd

2. แบ่งjaxb2-maven-pluginการประหารชีวิตของคุณ

ฉันพบว่ามันสร้างความแตกต่างอย่างมากถ้าคุณพยายามสร้างคลาสจากหลาย ๆ นิยาม xsd แทนที่จะเป็นนิยามการปฏิบัติการต่อ xsd

ดังนั้นหากคุณมีคำจำกัดความที่มีหลายค่า<source>มากกว่าแค่ลองแยกมัน:

          <execution>
            <id>xjc-schema-1</id>
            <goals>
              <goal>xjc</goal>
            </goals>
            <configuration>
              <xjbSources>
                <xjbSource>src/main/resources/xsd/binding.xjb</xjbSource>
              </xjbSources>
              <sources>
                <source>src/main/resources/xsd/definition1/</source>
              </sources>
              <clearOutputDir>false</clearOutputDir>
            </configuration>
          </execution>

          <execution>
            <id>xjc-schema-2</id>
            <goals>
              <goal>xjc</goal>
            </goals>
            <configuration>
              <xjbSources>
                <xjbSource>src/main/resources/xsd/binding.xjb</xjbSource>
              </xjbSources>
              <sources>
                <source>src/main/resources/xsd/definition2/</source>
              </sources>
              <clearOutputDir>false</clearOutputDir>
            </configuration>
          </execution>

เครื่องกำเนิดไฟฟ้าจะไม่ตรวจสอบข้อเท็จจริงที่ว่าหนึ่งคลาสอาจเพียงพอและดังนั้นจึงสร้างคลาสที่กำหนดเองต่อการดำเนินการ และนั่นคือสิ่งที่ฉันต้องการ;)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.