Я использую Java 8, и на моей локальной машине этот код выдает то, что я ожидаю.
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>2.7.14</version>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<configuration>
<sourceRoot>target/generated/src/main/java</sourceRoot>
<wsdlOptions>
<wsdlOption>
<wsdl>src/main/resources/wsdl/RuleEngineService.wsdl</wsdl>
<wsdlLocation>wsdl/RuleEngineService.wsdl</wsdlLocation>
<extraargs>
<extraarg>-impl</extraarg>
</extraargs>
<bindingFiles>
<bindingFile>${basedir}/src/main/resources/wsdl/jaxb-bindings.xml</bindingFile>
</bindingFiles>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
</plugin>
, где jaxb-bindings.xml:
<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings version="2.1"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<jaxb:globalBindings generateElementProperty="false"/>
</jaxb:bindings>
Вотодин фрагмент:
public class Request {
@XmlElement(nillable = true)
protected Boolean isScheduleRequest;
@XmlElement(nillable = true)
protected String patientKey;
Когда я строю в Jenkins, проект, извлеченный из SVN, идентичен коду на моей локальной машине, но выдает:
public class Request {
@XmlElementRef(name = "isScheduleRequest", namespace = "http://schemas.datacontract.org/2004/07/RuleEngineWcfServiceLibrary", type = JAXBElement.class)
protected JAXBElement<Boolean> isScheduleRequest;
@XmlElementRef(name = "patientKey", namespace = "http://schemas.datacontract.org/2004/07/RuleEngineWcfServiceLibrary", type = JAXBElement.class)
protected JAXBElement<String> patientKey;
Всев остальном идентично.
Вот соответствующий фрагмент из WSDL:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/RuleEngineWcfServiceLibrary" version="1.0">
<xs:complexType name="Request">
<xs:sequence>
<xs:element minOccurs="0" name="isScheduleRequest" nillable="true" type="xs:boolean"/>
<xs:element minOccurs="0" name="patientKey" nillable="true" type="xs:string"/>
Я знаю, что nillable="true"
и minOccurs="0"
, вероятно, должны требовать генерации JAXBElement.Так что Дженкинс, вероятно, делает правильное поколение.
Но мой локальный код синхронизирован с SVN, а Artifactory с SVN.Это тот же код, тот же WSDL, тот же pom.xml, та же Java.
Почему он генерирует разные результаты?
EDIT: избавление от minOccurs = "0" в WSDL решает проблему.Но не отвечает на вопрос.