Jenkins создает различные результаты cxf-codegen-plugin maven для локальной машины - PullRequest
0 голосов
/ 23 октября 2018

Я использую 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 решает проблему.Но не отвечает на вопрос.

...