在JAXB中表示多个元素名称

时间:2014-10-03 16:35:50

标签: java xml jaxb

我有下面的XML代表一个调用事件,需要对Java对象进行解组。我使用JAXB并能够处理大部分内容,除了代表值集合作为元素名称的块。

没有为每个可能的元素创建一个类(即,如给定的here),有没有办法更动态地在JAXB中表示这个?

<message xmlns='jabber:client' from='pubsub.server.example.com' to='leon@server.example.com'
id='leon_office_vmstsp_default__leon@server.example.com__uz8mQ'>
<event xmlns='http://jabber.org/protocol/pubsub#event'>
    <items node='leon_office_vmstsp_default'>
        <item id='leon_office_vmstsp_default'>
            <callstatus xmlns='http://xmpp.org/protocol/openlink:01:00:00#call-status'
                busy='false'>
                <call>
                    <id>1411743786867</id>
                    <profile>leon_office</profile>
                    <interest>leon_office_vmstsp_default</interest>
                    <changed>State</changed>
                    <state>CallEstablished</state>
                    <direction>Outgoing</direction>
                    <duration>3</duration>
                    <caller>
                        <number>6001</number>
                        <name>leon_office</name>
                    </caller>
                    <called>
                        <number>3807</number>
                        <name>3807</name>
                    </called>
                    <actions>
                        <ClearCall />
                        <RemoveThirdParty />
                        <StopVoiceDrop />
                        <MuteParty />
                        <AddThirdParty />
                        <SendDigit />
                        <ClearConnection />
                        <UnMuteParty />
                        <StartVoiceDrop />
                    </actions>
                    <participants>
                        <participant exten='3807' />
                        <participant exten='6001' />
                    </participants>
                    <features>
                        <feature id='Conference'>true</feature>
                    </features>
                </call>
            </callstatus>
        </item>
    </items>
</event>
<headers xmlns='http://jabber.org/protocol/shim'>
    <header name='pubsub#subid'>aLfatHpG059mNcAe5ta11YNOAjA02l486sE1p4hK</header>
</headers>

1 个答案:

答案 0 :(得分:2)

JAXB java类生成

  1. 从XML生成XSD。您也可以使用this link或其他工具正常使用。
  2. 通过XJC,Maven插件see here
  3. 从XSD生成类

    以下maven-jaxb2-plugin

    的示例
    <plugin>
        <groupId>org.jvnet.jaxb2.maven2</groupId>
        <artifactId>maven-jaxb2-plugin</artifactId>
        <version>0.8.1</version>
        <executions>
            <execution>
                <phase>generate-sources</phase>
                <goals>
                    <goal>generate</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <args>
                <arg>-Xannotate</arg>
                <arg>-Xnamespace-prefix</arg>
                <arg>-nv</arg>
            </args>
            <extension>true</extension>
            <forceRegenerate>true</forceRegenerate>
            <bindingDirectory>${basedir}/src/main/resources/xjb</bindingDirectory>
            <bindingIncludes>
                <include>*.xjb</include>
            </bindingIncludes>
            <schemas>
                <schema>
                    <fileset>
                        <directory>${basedir}/src/main/resources/xsd</directory>
                        <includes>
                            <include>*.xsd</include>
                        </includes>
                    </fileset>
                </schema>
            </schemas>
            <debug>true</debug>
            <verbose>true</verbose>
            <plugins>
                <plugin>
                    <groupId>org.jvnet.jaxb2_commons</groupId>
                    <artifactId>jaxb2-basics</artifactId>
                    <version>0.6.2</version>
                </plugin>
                <plugin>
                    <groupId>org.jvnet.jaxb2_commons</groupId>
                    <artifactId>jaxb2-basics-annotate</artifactId>
                    <version>0.6.2</version>
                </plugin>
                <plugin>
                    <groupId>org.jvnet.jaxb2_commons</groupId>
                    <artifactId>jaxb2-namespace-prefix</artifactId>
                    <version>1.1</version>
                </plugin>
            </plugins>
        </configuration>
    </plugin>
    

    我希望它可以帮到你。