3

I am busy with creating an XML document. The xsd is creating the java classes but there is happening some weird things. I would like to have an XML such like this

<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>

but instead i get this

<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>

As you can see for some reason the tag ServiceIdentifcation occurred twice which I don't want.

As maven plugin i am using this one

<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> 

The generated Java classes are this one

@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
}

and the ServiceStartListStructure is

@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;
}

}

I guess that something with the maven plugin is not correct but I am not sure.

Edit:

And here is the 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;
}

}
Philipp
  • 83
  • 1
  • 6

1 Answers1

0

Okay i fixed my problem. There are two solutions to it. The first use

  • @JacksonXmlElementWrapper(useWrapping = false)

annotation. I couldn't use that solution because my java code is generated from an xsd which i cannot change.

However the second solution is to set the option defaultUseWrapper to false on the XmlMapper.

XmlMapper mapper = new XmlMapper();
mapper.setDefaultUseWrapper(false);
Philipp
  • 83
  • 1
  • 6