XPATH генерирует пустой узел при оценке с помощью jaxb2-maven-plugin - PullRequest
0 голосов
/ 15 апреля 2019

Я хочу конкретное сопоставление для данного поля даты, но xpath к этому полю генерирует пустой узел, в то время как онлайн-тестер xpath оценивает его правильно. Как я могу отладить разрешение плагина maven?

Это для обработки клиентских сообщений, у меня нет власти ни над xsd, ни над входящими сообщениями, но мне нужно обрабатывать два xml: Date по-разному. Поэтому мне нужны конкретные привязки, чтобы переопределить глобальную и нацелить нужные поля даты с помощью выражения xpath, но плагин maven не разрешит его правильно

Вот профиль maven, который я использую для генерации:

        <profile>
            <id>xsd2java</id>
            <dependencies>
                <dependency>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>jaxb2-maven-plugin</artifactId>
                    <version>2.3</version>
                </dependency>
            </dependencies>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>jaxb2-maven-plugin</artifactId>
                        <version>2.2</version>
                        <executions>
                            <execution>
                                <id>xjc-schema1</id>
                                <goals>
                                    <goal>xjc</goal>
                                </goals>
                                <configuration>
                                    <sources>
                                        <source>./src/main/xsd/out</source>
                                    </sources>
                                    <packageName>test.model.out</packageName>
                                    <clearOutputDir>true</clearOutputDir>
                       <outputDirectory>./src/main/generated</outputDirectory>
                                    <xjbSources>
                                        <xjbSource>./src/main/xjb</xjbSource>
                                    </xjbSources>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

вот мой файл переплета:

<bindings xmlns="http://java.sun.com/xml/ns/jaxb" version="2.0" 
        xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <bindings node="//xs:element[@name='MadeOut']//xs:element[@name='Date']">
    <javaType name="java.util.Date" xmlType="xs:date"
      parseMethod="fr.sncf.fret.ex.socle.utilitaires.bind.Converter.parseDate"
      printMethod="fr.sncf.fret.ex.socle.utilitaires.bind.Converter.printDateWithoutTimeZone"
    />
  </bindings> 
  <globalBindings>
    <javaType name="java.util.Date" xmlType="xs:date"
      parseMethod="fr.sncf.fret.ex.socle.utilitaires.bind.Converter.parseDate"
      printMethod="fr.sncf.fret.ex.socle.utilitaires.bind.Converter.printDate"
    />
  </globalBindings>
</bindings>

и вот выдержка из xsd с полем, которое я хочу нацелить с помощью «узла привязки»:

    <xs:element name="CIMECNMessages">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="MadeOut">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="Place" minOccurs="0">
                                <xs:simpleType>
                                    <xs:restriction base="xs:string">
                                        <xs:maxLength value="35" />
                                        <xs:minLength value="1" />
                                    </xs:restriction>
                                </xs:simpleType>
                            </xs:element>
                            <xs:element name="Date" minOccurs="0" type="xs:date">
                            </xs:element >
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

Я использую эту команду для генерации классов: mvn -P xsd2java clean install

При запуске команды появляется сообщение «Оценка XPATH» // xs: element [@ name = 'MadeOut'] // xs: element [@ name = 'Date'] "генерирует пустой узел" .

То, что я ищу, это либо:

  • подсказка относительно моего выражения xpath и почему оно неверно (если оно есть)
  • действующий онлайн-инструмент для проверки моего выражения xpath
  • способ / инструмент для отладки фазы разрешения плагина maven, чтобы точно определить, что он видит через это выражение

Примечание: я использовал выражение «// *» xpath в качестве теста, и плагин выдал ошибку «слишком много аргументов, перечисленных этим выражением», поэтому я знаю, что привязка действительно применяется к моему xsd.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...