从生成的源创建XML

时间:2017-10-04 11:54:05

标签: java xml maven

我正忙于创建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;
}

}

1 个答案:

答案 0 :(得分:0)

好的,我解决了我的问题。它有两种解决方案。第一次使用

  • @JacksonXmlElementWrapper(useWrapping = false)

注释。我无法使用该解决方案,因为我的java代码是从xsd生成的,我无法更改。

然而,第二个解决方案是在XmlMapper上将选项defaultUseWrapper设置为false。

XmlMapper mapper = new XmlMapper();
mapper.setDefaultUseWrapper(false);