我有下面的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>
答案 0 :(得分:2)
JAXB java类生成
以下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>
我希望它可以帮到你。