我正忙于创建XML文档。 xsd正在创建java类,但是发生了一些奇怪的事情。我想有一个像这样的XML
<SystemDocumentationService.GetSystemConfigurationResponse>
<SystemConfiguration>
<TimeStamp>
<Value>2017-10-04T13:30:38</Value>
</TimeStamp>
<ServiceStartList>
<ServiceIdentification>
<Service>
<ServiceName>CustomerInformationService</ServiceName>
<IBIS-IP-Version>
<Value>token</Value>
</IBIS-IP-Version>
</Service>
</ServiceIdentification>
</ServiceStartList>
</SystemConfiguration>
</SystemDocumentationService.GetSystemConfigurationResponse>
但我得到了这个
<SystemDocumentationService.GetSystemConfigurationResponse>
<SystemConfiguration>
<TimeStamp>
<Value>2017-10-04T13:30:38</Value>
</TimeStamp>
<ServiceStartList>
<ServiceIdentification>
<ServiceIdentification>
<Service>
<ServiceName>CustomerInformationService</ServiceName>
<IBIS-IP-Version>
<Value>token</Value>
</IBIS-IP-Version>
</Service>
</ServiceIdentification>
</ServiceIdentification>
</ServiceStartList>
</SystemConfiguration>
</SystemDocumentationService.GetSystemConfigurationResponse>
正如您所看到的那样,标签ServiceIdentifcation发生了两次我不想要的。
作为maven插件我正在使用这个
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<id>ibis_ip</id>
<goals>
<goal>xjc</goal>
</goals>
<configuration>
<extension>true</extension>
<packageName>com.ximedes.giva.core.ibisip</packageName>
<schemaDirectory>${project.basedir}/src/main/resources/xsd</schemaDirectory>
<staleFile>${project.build.directory}/jaxb2/.ibisStaleFileFlag</staleFile>
<clearOutputDir>true</clearOutputDir>
<bindingDirectory>${project.basedir}/src/main/resources/xsd</bindingDirectory>
<bindingFiles>binding.xjb</bindingFiles>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.10</version>
<executions>
<execution>
<id>test</id>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>${basedir}/target/generated-sources</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
生成的Java类就是这个
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "SystemDocumentationService.SystemConfigurationData",
propOrder = {
"timeStamp",
"serviceStartList",
"deviceSpecificationList",
"heartbeatIntervall"
})
public class SystemDocumentationServiceSystemConfigurationData {
@XmlElement(name = "TimeStamp", required = true)
protected IBISIPDateTime timeStamp;
@XmlElement(name = "ServiceStartList", required = true)
protected ServiceStartListStructure serviceStartList;
@XmlElement(name = "DeviceSpecificationList", required = true)
protected DeviceSpecificationListStructure deviceSpecificationList;
@XmlElement(name = "HeartbeatIntervall")
protected IBISIPDouble heartbeatIntervall;
//getter's and setter's
}
,ServiceStartListStructure是
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "ServiceStartListStructure", propOrder = {
"serviceIdentifications"
})
public class ServiceStartListStructure {
@XmlElement(name = "ServiceIdentification", required = true)
protected List<ServiceIdentificationStructure> serviceIdentifications;
public List<ServiceIdentificationStructure> getServiceIdentifications() {
if (serviceIdentifications == null) {
serviceIdentifications = new ArrayList<ServiceIdentificationStructure>();
}
return this.serviceIdentifications;
}
}
我想使用maven插件的东西不正确但我不确定。
编辑:
这是ServiceIdentificationStructure
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "ServiceIdentificationStructure", propOrder = {
"service",
"device"
})
public class ServiceIdentificationStructure {
@XmlElement(name = "Service", required = true)
protected ServiceSpecificationStructure service;
@XmlElement(name = "Device", required = true)
protected DeviceSpecificationStructure device;
/**
* Gets the value of the service property.
*
* @return
* possible object is
* {@link ServiceSpecificationStructure }
*
*/
public ServiceSpecificationStructure getService() {
return service;
}
/**
* Sets the value of the service property.
*
* @param value
* allowed object is
* {@link ServiceSpecificationStructure }
*
*/
public void setService(ServiceSpecificationStructure value) {
this.service = value;
}
/**
* Gets the value of the device property.
*
* @return
* possible object is
* {@link DeviceSpecificationStructure }
*
*/
public DeviceSpecificationStructure getDevice() {
return device;
}
/**
* Sets the value of the device property.
*
* @param value
* allowed object is
* {@link DeviceSpecificationStructure }
*
*/
public void setDevice(DeviceSpecificationStructure value) {
this.device = value;
}
}
答案 0 :(得分:0)
好的,我解决了我的问题。它有两种解决方案。第一次使用
注释。我无法使用该解决方案,因为我的java代码是从xsd生成的,我无法更改。
然而,第二个解决方案是在XmlMapper上将选项defaultUseWrapper设置为false。
XmlMapper mapper = new XmlMapper();
mapper.setDefaultUseWrapper(false);